X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=a69ce2fff0ef25a2f0293e392e273f9b4ecc1b4d;hb=940cdb8b143455fe2fc002ffd50f5e2ffcaf1260;hp=c94688eaa09327bb98684515dc9fc462f8473aac;hpb=18d094ea673e246a01dc318fd4d2dfd50ca2d630;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index c94688e..a69ce2f 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(); @@ -23,6 +22,8 @@ ApiTrace::ApiTrace() SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector,quint64)), this, SLOT(loaderFrameLoaded(ApiTraceFrame*,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,31 +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->name().contains(QLatin1String("SwapBuffers")) || - call->name() == QLatin1String("CGLFlushDrawable") || - call->name() == QLatin1String("glFrameTerminatorGREMEDY"); - 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(); @@ -112,12 +88,7 @@ QString ApiTrace::fileName() const return m_fileName; } -ApiTrace::FrameMarker ApiTrace::frameMarker() const -{ - return m_frameMarker; -} - -QList ApiTrace::frames() const +const QList & ApiTrace::frames() const { return m_frames; } @@ -259,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) @@ -271,11 +242,23 @@ 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() { - ApiTraceFrame *firstFrame = m_frames[0]; - if (firstFrame && !firstFrame->isLoaded()) { - loadFrame(firstFrame); + if (!m_frames.isEmpty()) { + ApiTraceFrame *firstFrame = m_frames[0]; + if (firstFrame && !firstFrame->isLoaded()) { + loadFrame(firstFrame); + } } } @@ -410,6 +393,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 +405,9 @@ void ApiTrace::findFrameStart(ApiTraceFrame *frame) void ApiTrace::findFrameEnd(ApiTraceFrame *frame) { + if (!frame) + return; + if (frame->isLoaded()) { emit foundFrameEnd(frame); } else { @@ -452,7 +441,7 @@ int ApiTrace::callInFrame(int callIdx) const { unsigned numCalls = 0; - for (int frameIdx = 0; frameIdx <= m_frames.size(); ++frameIdx) { + for (int frameIdx = 0; frameIdx < m_frames.size(); ++frameIdx) { const ApiTraceFrame *frame = m_frames[frameIdx]; unsigned numCallsInFrame = frame->isLoaded() ? frame->numChildren() @@ -498,4 +487,21 @@ bool ApiTrace::isFrameLoading(ApiTraceFrame *frame) const return m_loadingFrames.contains(frame); } +void ApiTrace::bindThumbnailsToFrames(const QList &thumbnails) +{ + QList frames = m_frames; + + QList::const_iterator thumbnail = thumbnails.begin(); + + foreach (ApiTraceFrame *frame, frames) { + if (thumbnail != thumbnails.end()) { + frame->setThumbnail(*thumbnail); + + ++thumbnail; + + emit changed(frame); + } + } +} + #include "apitrace.moc"