1 #include "loaderthread.h"
3 #include "trace_parser.hpp"
5 #define FRAMES_TO_CACHE 100
8 apiCallFromTraceCall(const Trace::Call *call)
10 ApiTraceCall *apiCall = new ApiTraceCall();
11 apiCall->name = QString::fromStdString(call->sig->name);
13 QString argumentsText;
14 for (int i = 0; i < call->sig->arg_names.size(); ++i) {
16 QString::fromStdString(call->sig->arg_names[i]);
19 VariantVisitor retVisitor;
20 call->ret->visit(retVisitor);
21 apiCall->returnValue = retVisitor.variant();
23 for (int i = 0; i < call->args.size(); ++i) {
24 VariantVisitor argVisitor;
25 call->args[i]->visit(argVisitor);
26 apiCall->argValues += argVisitor.variant();
32 LoaderThread::LoaderThread(QObject *parent)
34 m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
38 void LoaderThread::run()
40 QList<ApiTraceFrame*> frames;
41 ApiTraceFrame *currentFrame = 0;
44 if (p.open(m_fileName.toLatin1().constData())) {
46 call = p.parse_call();
50 currentFrame = new ApiTraceFrame();
51 currentFrame->number = frameCount;
54 ApiTraceCall *apiCall =
55 apiCallFromTraceCall(call);
56 apiCall->parentFrame = currentFrame;
57 apiCall->index = currentFrame->calls.count();
58 currentFrame->calls.append(apiCall);
59 if (ApiTrace::isCallAFrameMarker(apiCall,
61 frames.append(currentFrame);
63 if (frames.count() >= FRAMES_TO_CACHE) {
64 emit parsedFrames(frames);
68 call = p.parse_call();
71 //last frames won't have markers
72 // it's just a bunch of Delete calls for every object
73 // after the last SwapBuffers
75 frames.append(currentFrame);
79 emit parsedFrames(frames);
83 void LoaderThread::loadFile(const QString &fileName)
85 m_fileName = fileName;
89 ApiTrace::FrameMarker LoaderThread::frameMarker() const
94 void LoaderThread::setFrameMarker(ApiTrace::FrameMarker marker)
96 Q_ASSERT(!isRunning());
97 m_frameMarker = marker;
100 #include "loaderthread.moc"