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:
void ApiTrace::addFrames(const QList<ApiTraceFrame*> &frames)
{
+ QList<ApiTraceCall*> calls;
int currentFrames = m_frames.count();
int numNewFrames = frames.count();
int currentCalls = m_calls.count();
int numNewCalls = 0;
foreach(ApiTraceFrame *frame, frames) {
- frame->setParentTrace(this);
+ Q_ASSERT(this == frame->parentTrace());
numNewCalls += frame->numChildren();
- m_calls += frame->calls();
+ calls += frame->calls();
}
+ m_calls.reserve(m_calls.count() + calls.count());
+ m_calls += calls;
emit endAddingFrames();
emit callsAdded(currentCalls, numNewCalls);
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);
ApiTraceState ApiTrace::defaultState() const
{
ApiTraceFrame *frame = frameAt(0);
- if (!frame)
+ if (!frame || !frame->hasState())
return ApiTraceState();
- return frame->state();
+ return *frame->state();
}
void ApiTrace::callEdited(ApiTraceCall *call)
return !m_errors.isEmpty();
}
+ApiTraceCallSignature * ApiTrace::signature(unsigned id)
+{
+ if (id >= m_signatures.count()) {
+ m_signatures.resize(id + 1);
+ return NULL;
+ } else {
+ return m_signatures[id];
+ }
+}
+
+void ApiTrace::addSignature(unsigned id, ApiTraceCallSignature *signature)
+{
+ m_signatures[id] = signature;
+}
+
#include "apitrace.moc"