X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Ftraceloader.cpp;h=2ad32b1fb4d73523dc4219650ee5ac6cd93a85d6;hb=cbb86175e81c2765f14fa01a2dc49d367203ac1f;hp=c6694a16df7892cd1ded6aa5ecd464c7049173c3;hpb=ad513b3f5f6e3b1e460d9cf77479715cc05319b4;p=apitrace diff --git a/gui/traceloader.cpp b/gui/traceloader.cpp index c6694a1..2ad32b1 100644 --- a/gui/traceloader.cpp +++ b/gui/traceloader.cpp @@ -7,7 +7,7 @@ #define FRAMES_TO_CACHE 100 static ApiTraceCall * -apiCallFromTraceCall(const Trace::Call *call, +apiCallFromTraceCall(const trace::Call *call, const QHash &helpHash, ApiTraceFrame *frame, TraceLoader *loader) @@ -20,8 +20,7 @@ apiCallFromTraceCall(const Trace::Call *call, } TraceLoader::TraceLoader(QObject *parent) - : QObject(parent), - m_frameMarker(ApiTrace::FrameMarker_SwapBuffers) + : QObject(parent) { } @@ -61,6 +60,7 @@ void TraceLoader::loadTrace(const QString &filename) //Load the entire file into memory parseTrace(); } + emit guessedApi(static_cast(m_parser.api)); emit finishedParsing(); } @@ -69,34 +69,6 @@ void TraceLoader::loadFrame(ApiTraceFrame *currentFrame) fetchFrameContents(currentFrame); } -void TraceLoader::setFrameMarker(ApiTrace::FrameMarker marker) -{ - m_frameMarker = marker; -} - -bool TraceLoader::isCallAFrameMarker(const Trace::Call *call) const -{ - std::string name = call->name(); - - switch (m_frameMarker) { - case ApiTrace::FrameMarker_SwapBuffers: - return name.find("SwapBuffers") != std::string::npos || - name == "CGLFlushDrawable" || - name == "glFrameTerminatorGREMEDY"; - break; - case ApiTrace::FrameMarker_Flush: - return name == "glFlush"; - break; - case ApiTrace::FrameMarker_Finish: - return name == "glFinish"; - break; - case ApiTrace::FrameMarker_Clear: - return name == "glClear"; - break; - } - return false; -} - int TraceLoader::numberOfFrames() const { return m_frameBookmarks.size(); @@ -104,7 +76,7 @@ int TraceLoader::numberOfFrames() const int TraceLoader::numberOfCallsInFrame(int frameIdx) const { - if (frameIdx > m_frameBookmarks.size()) { + if (frameIdx >= m_frameBookmarks.size()) { return 0; } FrameBookmarks::const_iterator itr = @@ -136,8 +108,8 @@ void TraceLoader::scanTrace() QList frames; ApiTraceFrame *currentFrame = 0; - Trace::Call *call; - Trace::ParseBookmark startBookmark; + trace::Call *call; + trace::ParseBookmark startBookmark; int numOfFrames = 0; int numOfCalls = 0; int lastPercentReport = 0; @@ -147,7 +119,7 @@ void TraceLoader::scanTrace() while ((call = m_parser.scan_call())) { ++numOfCalls; - if (isCallAFrameMarker(call)) { + if (call->flags & trace::CALL_FLAG_END_FRAME) { FrameBookmark frameBookmark(startBookmark); frameBookmark.numberOfCalls = numOfCalls; @@ -172,7 +144,7 @@ void TraceLoader::scanTrace() } if (numOfCalls) { - //Trace::File::Bookmark endBookmark = m_parser.currentBookmark(); + //trace::File::Bookmark endBookmark = m_parser.currentBookmark(); FrameBookmark frameBookmark(startBookmark); frameBookmark.numberOfCalls = numOfCalls; @@ -201,7 +173,7 @@ void TraceLoader::parseTrace() int lastPercentReport = 0; - Trace::Call *call = m_parser.parse_call(); + trace::Call *call = m_parser.parse_call(); while (call) { //std::cout << *call; if (!currentFrame) { @@ -217,8 +189,7 @@ void TraceLoader::parseTrace() apiCall->arguments()[apiCall->binaryDataIndex()].toByteArray(); binaryDataSize += data.size(); } - if (ApiTrace::isCallAFrameMarker(apiCall, - m_frameMarker)) { + if (call->flags & trace::CALL_FLAG_END_FRAME) { calls.squeeze(); currentFrame->setCalls(calls, binaryDataSize); calls.clear(); @@ -290,7 +261,7 @@ void TraceLoader::searchNext(const ApiTrace::SearchRequest &request) int startFrame = m_createdFrames.indexOf(request.frame); const FrameBookmark &frameBookmark = m_frameBookmarks[startFrame]; m_parser.setBookmark(frameBookmark.start); - Trace::Call *call = 0; + trace::Call *call = 0; while ((call = m_parser.parse_call())) { if (callContains(call, request.text, request.cs)) { @@ -320,8 +291,8 @@ void TraceLoader::searchPrev(const ApiTrace::SearchRequest &request) Q_ASSERT(m_parser.supportsOffsets()); if (m_parser.supportsOffsets()) { int startFrame = m_createdFrames.indexOf(request.frame); - Trace::Call *call = 0; - QList frameCalls; + trace::Call *call = 0; + QList frameCalls; int frameIdx = startFrame; const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; @@ -358,12 +329,12 @@ void TraceLoader::searchPrev(const ApiTrace::SearchRequest &request) emit searchResult(request, ApiTrace::SearchResult_NotFound, 0); } -bool TraceLoader::searchCallsBackwards(const QList &calls, +bool TraceLoader::searchCallsBackwards(const QList &calls, int frameIdx, const ApiTrace::SearchRequest &request) { for (int i = calls.count() - 1; i >= 0; --i) { - Trace::Call *call = calls[i]; + trace::Call *call = calls[i]; if (callContains(call, request.text, request.cs)) { ApiTraceFrame *frame = m_createdFrames[frameIdx]; const QVector apiCalls = @@ -386,7 +357,7 @@ int TraceLoader::callInFrame(int callIdx) const { unsigned numCalls = 0; - for (int frameIdx = 0; frameIdx <= m_frameBookmarks.size(); ++frameIdx) { + for (int frameIdx = 0; frameIdx < m_frameBookmarks.size(); ++frameIdx) { const FrameBookmark &frameBookmark = m_frameBookmarks[frameIdx]; unsigned firstCall = numCalls; unsigned endCall = numCalls + frameBookmark.numberOfCalls; @@ -399,12 +370,12 @@ int TraceLoader::callInFrame(int callIdx) const return 0; } -bool TraceLoader::callContains(Trace::Call *call, +bool TraceLoader::callContains(trace::Call *call, const QString &str, Qt::CaseSensitivity sensitivity) { /* - * FIXME: do string comparison directly on Trace::Call + * FIXME: do string comparison directly on trace::Call */ ApiTraceCall *apiCall = apiCallFromTraceCall(call, m_helpHash, 0, this); @@ -433,7 +404,7 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) m_parser.setBookmark(frameBookmark.start); - Trace::Call *call; + trace::Call *call; int parsedCalls = 0; while ((call = m_parser.parse_call())) { ApiTraceCall *apiCall = @@ -452,7 +423,7 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) delete call; - if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { + if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) { break; }