Skip to content

ActivityRecorder

这个类封装的很奇怪,既可以表示 cpu 在某段事件内是否活动,又能表示各个阶段的活动情况。

cpu

对于 cpu,在 activateStage 中:

cpp
void
ActivityRecorder::activity()
{
    // 如果已经激活过 直接返回
    if (activityBuffer[0]) {
        return;
    }

    // 没有激活过 进行激活
    activityBuffer[0] = true;

    // 增加活动数
    ++activityCount;

    DPRINTF(Activity, "Activity: %i\n", activityCount);
}

而在 advance 中:

cpp
void
ActivityRecorder::advance()
{ 
    // 随着 advance,会将激活数减到0
    if (activityBuffer[-longestLatency]) {
        --activityCount;

        assert(activityCount >= 0);

        DPRINTF(Activity, "Activity: %i\n", activityCount);

        if (activityCount == 0) {
            DPRINTF(Activity, "No activity left!\n");
        }
    }

    activityBuffer.advance();
}

在某段时间内激活数为 0 的时候直接代表不工作。

对于阶段而言

阶段就是直接进行计数,没有使用 TimeBuffer,各个阶段是否激活的 bool 和 激活数来判断各个阶段是否激活。

使用

两者可以独自用,也可以单独用。