コード例 #1
0
void SamplingTool::doRun()
{
    Sample sample(m_sample, m_codeBlock);
    ++m_sampleCount;

    if (sample.isNull())
        return;

    if (!sample.inHostFunction()) {
        unsigned opcodeID = m_interpreter->getOpcodeID(sample.vPC()[0].u.opcode);

        ++m_opcodeSampleCount;
        ++m_opcodeSamples[opcodeID];

        if (sample.inCTIFunction())
            m_opcodeSamplesInCTIFunctions[opcodeID]++;
    }

#if ENABLE(CODEBLOCK_SAMPLING)
    if (CodeBlock* codeBlock = sample.codeBlock()) {
        MutexLocker locker(m_scopeSampleMapMutex);
        ScopeSampleRecord* record = m_scopeSampleMap->get(codeBlock->ownerNode());
        ASSERT(record);
        record->sample(codeBlock, sample.vPC());
    }
#endif
}
コード例 #2
0
ファイル: SamplingTool.cpp プロジェクト: Fale/qtmoko
void SamplingTool::run()
{
    while (m_running) {
        sleepForMicroseconds(hertz2us(m_hertz));

        Sample sample(m_sample, m_codeBlock);
        ++m_sampleCount;

        if (sample.isNull())
            continue;

        if (!sample.inHostFunction()) {
            unsigned opcodeID = m_interpreter->getOpcodeID(sample.vPC()[0].u.opcode);

            ++m_opcodeSampleCount;
            ++m_opcodeSamples[opcodeID];

            if (sample.inCTIFunction())
                m_opcodeSamplesInCTIFunctions[opcodeID]++;
        }

#if ENABLE(CODEBLOCK_SAMPLING)
        MutexLocker locker(m_scopeSampleMapMutex);
        ScopeSampleRecord* record = m_scopeSampleMap->get(sample.codeBlock()->ownerNode);
        ASSERT(record);
        record->sample(sample.codeBlock(), sample.vPC());
#endif
    }
}