X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=db5741790c213ca85946cbc60fbf4d16739c22d3;hb=d9d9d22837705de6a2c42ad3f9b23223a2b98fe0;hp=89385b9c58cfe200f4ba80e4cd4eec15bad2574b;hpb=345004400ed10ab9cada2d7fd41bfb8ad7463f7f;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 89385b9..db57417 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -8,8 +8,7 @@ #include ApiTrace::ApiTrace() - : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers), - m_needsSaving(false) + : m_needsSaving(false) { m_loader = new TraceLoader(); @@ -20,9 +19,11 @@ ApiTrace::ApiTrace() connect(m_loader, SIGNAL(framesLoaded(const QList)), this, SLOT(addFrames(const QList))); connect(m_loader, - SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector,quint64)), + SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector, QVector,quint64)), this, - SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector,quint64))); + SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector,QVector,quint64))); + connect(m_loader, SIGNAL(guessedApi(int)), + this, SLOT(guessedApi(int))); connect(m_loader, SIGNAL(finishedParsing()), this, SLOT(finishedParsing())); connect(this, SIGNAL(loaderSearch(ApiTrace::SearchRequest)), @@ -73,29 +74,6 @@ ApiTrace::~ApiTrace() delete m_saver; } -bool ApiTrace::isCallAFrameMarker(const ApiTraceCall *call, - ApiTrace::FrameMarker marker) -{ - if (!call) { - return false; - } - - switch (marker) { - case FrameMarker_SwapBuffers: - return call->flags() & trace::CALL_FLAG_END_FRAME; - case FrameMarker_Flush: - return call->name() == QLatin1String("glFlush"); - case FrameMarker_Finish: - return call->name() == QLatin1String("glFinish"); - case FrameMarker_Clear: - return call->name() == QLatin1String("glClear"); - } - - Q_ASSERT(!"unknown frame marker"); - - return false; -} - bool ApiTrace::isEmpty() const { return m_frames.isEmpty(); @@ -110,11 +88,6 @@ QString ApiTrace::fileName() const return m_fileName; } -ApiTrace::FrameMarker ApiTrace::frameMarker() const -{ - return m_frameMarker; -} - const QList & ApiTrace::frames() const { return m_frames; @@ -134,7 +107,7 @@ int ApiTrace::numCallsInFrame(int idx) const { const ApiTraceFrame *frame = frameAt(idx); if (frame) { - return frame->numChildren(); + return frame->numTotalCalls(); } else { return 0; } @@ -257,7 +230,7 @@ bool ApiTrace::isSaving() const bool ApiTrace::hasErrors() const { - return !m_errors.isEmpty(); + return !m_errors.isEmpty() || !m_queuedErrors.isEmpty(); } void ApiTrace::loadFrame(ApiTraceFrame *frame) @@ -269,6 +242,16 @@ void ApiTrace::loadFrame(ApiTraceFrame *frame) } } +void ApiTrace::guessedApi(int api) +{ + m_api = static_cast(api); +} + +trace::API ApiTrace::api() const +{ + return m_api; +} + void ApiTrace::finishedParsing() { if (!m_frames.isEmpty()) { @@ -280,14 +263,15 @@ void ApiTrace::finishedParsing() } void ApiTrace::loaderFrameLoaded(ApiTraceFrame *frame, + const QVector &topLevelItems, const QVector &calls, quint64 binaryDataSize) { - Q_ASSERT(frame->numChildrenToLoad() == calls.size()); + Q_ASSERT(frame->numChildrenToLoad() >= calls.size()); if (!frame->isLoaded()) { emit beginLoadingFrame(frame, calls.size()); - frame->setCalls(calls, binaryDataSize); + frame->setCalls(topLevelItems, calls, binaryDataSize); emit endLoadingFrame(frame); m_loadingFrames.remove(frame); } @@ -410,6 +394,9 @@ void ApiTrace::loaderSearchResult(const ApiTrace::SearchRequest &request, void ApiTrace::findFrameStart(ApiTraceFrame *frame) { + if (!frame) + return; + if (frame->isLoaded()) { emit foundFrameStart(frame); } else { @@ -419,6 +406,9 @@ void ApiTrace::findFrameStart(ApiTraceFrame *frame) void ApiTrace::findFrameEnd(ApiTraceFrame *frame) { + if (!frame) + return; + if (frame->isLoaded()) { emit foundFrameEnd(frame); } else { @@ -455,7 +445,7 @@ int ApiTrace::callInFrame(int callIdx) const for (int frameIdx = 0; frameIdx < m_frames.size(); ++frameIdx) { const ApiTraceFrame *frame = m_frames[frameIdx]; unsigned numCallsInFrame = frame->isLoaded() - ? frame->numChildren() + ? frame->numTotalCalls() : frame->numChildrenToLoad(); unsigned firstCall = numCalls; unsigned endCall = numCalls + numCallsInFrame;