X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_loader.cpp;h=f91e09b00ef5ffe8a9575314c4848690ee7158a3;hb=3176ebeffe825a5f998b13755c09cfa312b0e8d3;hp=f2e6c6e58d18b5b3df221c9f1cc4677288634090;hpb=712429a22a8cc9d51b620d433ade6d327fbabbf0;p=apitrace diff --git a/trace_loader.cpp b/trace_loader.cpp index f2e6c6e..f91e09b 100644 --- a/trace_loader.cpp +++ b/trace_loader.cpp @@ -5,8 +5,7 @@ using namespace Trace; Loader::Loader() - : m_frameMarker(FrameMarker_SwapBuffers), - file(0) + : m_frameMarker(FrameMarker_SwapBuffers) { } @@ -30,13 +29,14 @@ int Loader::numberOfFrames() const return m_frameOffsets.size(); } -int Loader::numberOfCallsInFrame(int frameIdx) +int Loader::numberOfCallsInFrame(int frameIdx) const { if (frameIdx > m_frameOffsets.size()) { return 0; } - - return m_frameOffsets[frameIdx].numberOfCalls; + FrameOffsets::const_iterator itr = + m_frameOffsets.find(frameIdx); + return itr->second.numberOfCalls; } bool Loader::open(const char *filename) @@ -45,27 +45,42 @@ bool Loader::open(const char *filename) std::cerr << "error: failed to open " << filename << "\n"; return false; } + if (!m_parser.supportsOffsets()) { + std::cerr << "error: " <= 5) { + std::cerr << "\tPercent scanned = " + << m_parser.percentRead() + << "..."<dump(std::cout, color); @@ -102,24 +117,28 @@ bool Loader::isCallAFrameMarker(const Trace::Call *call) const return false; } -std::vector Trace::Loader::frame(int idx) +std::vector Loader::frame(int idx) { int numOfCalls = numberOfCallsInFrame(idx); if (numOfCalls) { + const FrameOffset &frameOffset = m_frameOffsets[idx]; std::vector calls(numOfCalls); - m_parser.setCurrentOffset(m_frameOffsets[idx].start); + m_parser.setCurrentOffset(frameOffset.start); + m_parser.setCurrentCallNumber(frameOffset.callNumber); Trace::Call *call; int parsedCalls = 0; while ((call = m_parser.parse_call())) { + calls[parsedCalls] = call; + ++parsedCalls; + if (isCallAFrameMarker(call)) { break; } - calls[parsedCalls] = call; - ++parsedCalls; } + assert(parsedCalls == numOfCalls); return calls; } return std::vector();