void CoreRecorder::recordAccess(uint64_t startCycle) {
    assert(eventRecorder.hasRecord());
    TimingRecord tr = eventRecorder.popRecord();
    TimingEvent* origPrevResp = prevRespEvent;

    assert(startCycle >= prevRespCycle);
    assert(tr.reqCycle >= startCycle);

    if (IsGet(tr.type)) {
        uint64_t delay = tr.reqCycle - prevRespCycle;
        TimingEvent* ev = new (eventRecorder) TimingCoreEvent(delay, prevRespCycle - gapCycles, this);
        ev->setMinStartCycle(prevRespCycle);
        prevRespEvent->addChild(ev, eventRecorder)->addChild(tr.startEvent, eventRecorder);
        prevRespEvent = tr.endEvent;
        prevRespCycle = tr.respCycle;
        assert(prevRespEvent);
    } else {
        assert(IsPut(tr.type));
        // Link previous response and this req directly (don't even create a new event)
        DelayEvent* dr = new (eventRecorder) DelayEvent(tr.reqCycle - prevRespCycle);
        dr->setMinStartCycle(prevRespCycle);
        prevRespEvent->addChild(dr, eventRecorder)->addChild(tr.startEvent, eventRecorder);
        //tr.endEvent not linked to anything, it's a PUT
    }

    origPrevResp->produceCrossings(&eventRecorder);
    eventRecorder.getCrossingStack().clear();
}
예제 #2
0
bool
nsHttpRequestHead::IsSafeMethod() const
{
  // This code will need to be extended for new safe methods, otherwise
  // they'll default to "not safe".
    if (IsGet() || IsHead() || IsOptions() || IsTrace()) {
        return true;
    }

    if (mParsedMethod != kMethod_Custom) {
        return false;
    }

    return (!strcmp(mMethod.get(), "PROPFIND") ||
            !strcmp(mMethod.get(), "REPORT") ||
            !strcmp(mMethod.get(), "SEARCH"));
}