Ejemplo n.º 1
0
void CBtraceReader::DecodeFrame(const TBtraceHeader& aHeader, const TDesC8& aFrame, TUint32)
{
    if (aHeader.iCategory == BTrace::EKernPrintf)
    {
        TUint32 threadId = *(TUint32*)aFrame.Ptr();
        TBuf<256> text;
        text.Copy(aFrame.Mid(4));
        if (iDebugConsole)
        {
            iDebugConsole->Printf(_L("Kern::Printf (0x%08x) \'%S\'\r\n"), &threadId, &text);
        }
    }
    else if (aHeader.iCategory == RMemSampler::EBtraceCategory)
    {
        switch (aHeader.iSubCategory)
        {
        case RMemSampler::ENewChunk:
        {
            TUint32 address = *(TUint32*)aFrame.Ptr();
            TInt maxSize = *((TUint32*)aFrame.Ptr() + 1);
            TFullName fullName;
            fullName.Copy(aFrame.Mid(8));
            if (iDebugConsole)
            {
                iDebugConsole->Printf(_L("New chunk - %S\r\n\taddress: 0x%08x max size: %d\r\n"), &fullName, address, maxSize);
            }
            if (iMemoryView)
            {
                iMemoryView->HandleNewChunk(fullName, address, maxSize);
            }
            break;
        }
        case RMemSampler::EChangedChunk:
        {
            TUint32 address = *(TUint32*)aFrame.Ptr();
            TUint32 size = *((TUint32*)aFrame.Ptr() + 1);
            TUint32 highWaterMark = *((TUint32*)aFrame.Ptr() + 2);
            if (iDebugConsole)
            {
                iDebugConsole->Printf(_L("Changed chunk - address: 0x%08x size: %d hwm: %d\r\n"), address, size, highWaterMark);
            }
            if (iMemoryView)
            {
                iMemoryView->HandleChangedChunk(address, size, highWaterMark);
            }
            break;
        }
        case RMemSampler::EDeletedChunk:
        {
            TUint32 address = *(TUint32*)aFrame.Ptr();
            if (iDebugConsole)
            {
                iDebugConsole->Printf(_L("Deleted chunk - address: 0x%08x\r\n"), address);
            }
            if (iMemoryView)
            {
                iMemoryView->HandleDeletedChunk(address);
            }
            break;
        }
        }
    }
}