#include <QThread>
ApiTrace::ApiTrace()
- : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers),
- m_needsSaving(false)
+ : m_needsSaving(false)
{
m_loader = new TraceLoader();
SIGNAL(frameContentsLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,quint64)),
this,
SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector<ApiTraceCall*>,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)),
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();
return m_fileName;
}
-ApiTrace::FrameMarker ApiTrace::frameMarker() const
-{
- return m_frameMarker;
-}
-
-QList<ApiTraceFrame*> ApiTrace::frames() const
+const QList<ApiTraceFrame*> & ApiTrace::frames() const
{
return m_frames;
}
bool ApiTrace::hasErrors() const
{
- return !m_errors.isEmpty();
+ return !m_errors.isEmpty() || !m_queuedErrors.isEmpty();
}
void ApiTrace::loadFrame(ApiTraceFrame *frame)
}
}
+void ApiTrace::guessedApi(int api)
+{
+ m_api = static_cast<trace::API>(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);
+ }
}
}
const QVector<ApiTraceCall*> &calls,
quint64 binaryDataSize)
{
- Q_ASSERT(frame->numChildrenToLoad() == calls.size());
+ Q_ASSERT(frame->numChildrenToLoad() >= calls.size());
if (!frame->isLoaded()) {
emit beginLoadingFrame(frame, calls.size());
void ApiTrace::findFrameStart(ApiTraceFrame *frame)
{
+ if (!frame)
+ return;
+
if (frame->isLoaded()) {
emit foundFrameStart(frame);
} else {
void ApiTrace::findFrameEnd(ApiTraceFrame *frame)
{
+ if (!frame)
+ return;
+
if (frame->isLoaded()) {
emit foundFrameEnd(frame);
} else {
{
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()