switch (marker) {
case FrameMarker_SwapBuffers:
- return call->name().contains(QLatin1String("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:
{
const ApiTraceFrame *frame = frameAt(idx);
if (frame)
- return frame->calls.count();
+ return frame->numChildren();
else
return 0;
}
}
m_frames.clear();
m_calls.clear();
+ m_errors.clear();
+ m_editedCalls.clear();
+ m_needsSaving = false;
emit invalidated();
m_loader->loadFile(m_fileName);
void ApiTrace::addFrames(const QList<ApiTraceFrame*> &frames)
{
+ QList<ApiTraceCall*> calls;
int currentFrames = m_frames.count();
int numNewFrames = frames.count();
+
+ emit beginAddingFrames(currentFrames, numNewFrames);
+
m_frames += frames;
int currentCalls = m_calls.count();
int numNewCalls = 0;
foreach(ApiTraceFrame *frame, frames) {
- frame->setParentTrace(this);
- numNewCalls += frame->calls.count();
- m_calls += frame->calls;
+ Q_ASSERT(this == frame->parentTrace());
+ numNewCalls += frame->numChildren();
+ calls += frame->calls();
}
+ m_calls.reserve(m_calls.count() + calls.count());
+ m_calls += calls;
- emit framesAdded(currentFrames, numNewFrames);
+ emit endAddingFrames();
emit callsAdded(currentCalls, numNewCalls);
}
if (m_calls.isEmpty())
return;
+ emit beginAddingFrames(0, m_frames.count());
+
ApiTraceFrame *currentFrame = 0;
foreach(ApiTraceCall *apiCall, m_calls) {
if (!currentFrame) {
- currentFrame = new ApiTraceFrame();
- currentFrame->setParentTrace(this);
+ currentFrame = new ApiTraceFrame(this);
currentFrame->number = m_frames.count();
}
apiCall->setParentFrame(currentFrame);
- currentFrame->calls.append(apiCall);
+ currentFrame->addCall(apiCall);
if (ApiTrace::isCallAFrameMarker(apiCall,
m_frameMarker)) {
m_frames.append(currentFrame);
m_frames.append(currentFrame);
currentFrame = 0;
}
- emit framesAdded(0, m_frames.count());
+ emit endAddingFrames();
}
ApiTraceCall * ApiTrace::callWithIndex(int idx) const
return m_saver->isRunning();
}
+void ApiTrace::callError(ApiTraceCall *call)
+{
+ Q_ASSERT(call);
+
+ if (call->hasError())
+ m_errors.insert(call);
+ else
+ m_errors.remove(call);
+
+ emit changed(call);
+}
+
+bool ApiTrace::hasErrors() const
+{
+ return !m_errors.isEmpty();
+}
+
+ApiTraceCallSignature * ApiTrace::signature(const QString &callName)
+{
+ return m_signatures[callName];
+}
+
+void ApiTrace::addSignature(ApiTraceCallSignature *signature)
+{
+ m_signatures.insert(signature->name(), signature);
+}
+
#include "apitrace.moc"