switch (marker) {
case FrameMarker_SwapBuffers:
- return call->name().contains(QLatin1String("SwapBuffers")) ||
- call->name() == QLatin1String("CGLFlushDrawable") ||
- call->name() == QLatin1String("glFrameTerminatorGREMEDY");
+ return call->flags() & trace::CALL_FLAG_END_FRAME;
case FrameMarker_Flush:
return call->name() == QLatin1String("glFlush");
case FrameMarker_Finish:
void ApiTrace::loadFrame(ApiTraceFrame *frame)
{
- Q_ASSERT(!frame->isLoaded());
- emit requestFrame(frame);
+ if (!isFrameLoading(frame)) {
+ Q_ASSERT(!frame->isLoaded());
+ m_loadingFrames.insert(frame);
+ emit requestFrame(frame);
+ }
}
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);
+ }
}
}
quint64 binaryDataSize)
{
Q_ASSERT(frame->numChildrenToLoad() == calls.size());
- emit beginLoadingFrame(frame, calls.size());
- frame->setCalls(calls, binaryDataSize);
- emit endLoadingFrame(frame);
+
+ if (!frame->isLoaded()) {
+ emit beginLoadingFrame(frame, calls.size());
+ frame->setCalls(calls, binaryDataSize);
+ emit endLoadingFrame(frame);
+ m_loadingFrames.remove(frame);
+ }
if (!m_queuedErrors.isEmpty()) {
QList< QPair<ApiTraceFrame*, ApiTraceError> >::iterator itr;
{
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()
}
emit changed(call);
} else {
- emit requestFrame(frame);
+ loadFrame(frame);
m_queuedErrors.append(qMakePair(frame, error));
}
}
+bool ApiTrace::isFrameLoading(ApiTraceFrame *frame) const
+{
+ return m_loadingFrames.contains(frame);
+}
+
+void ApiTrace::bindThumbnailsToFrames(const QList<QImage> &thumbnails)
+{
+ QList<ApiTraceFrame *> frames = m_frames;
+
+ QList<QImage>::const_iterator thumbnail = thumbnails.begin();
+
+ foreach (ApiTraceFrame *frame, frames) {
+ if (thumbnail != thumbnails.end()) {
+ frame->setThumbnail(*thumbnail);
+
+ ++thumbnail;
+
+ emit changed(frame);
+ }
+ }
+}
+
#include "apitrace.moc"