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);
12 apiCall->index = call->no;
14 QString argumentsText;
15 for (int i = 0; i < call->sig->arg_names.size(); ++i) {
17 QString::fromStdString(call->sig->arg_names[i]);
20 VariantVisitor retVisitor;
21 call->ret->visit(retVisitor);
22 apiCall->returnValue = retVisitor.variant();
24 for (int i = 0; i < call->args.size(); ++i) {
25 VariantVisitor argVisitor;
26 call->args[i]->visit(argVisitor);
27 apiCall->argValues += argVisitor.variant();
30 //force generation of the internal state
31 apiCall->filterText();
35 LoaderThread::LoaderThread(QObject *parent)
37 m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
41 void LoaderThread::run()
43 QList<ApiTraceFrame*> frames;
44 ApiTraceFrame *currentFrame = 0;
47 if (p.open(m_fileName.toLatin1().constData())) {
49 call = p.parse_call();
53 currentFrame = new ApiTraceFrame();
54 currentFrame->number = frameCount;
57 ApiTraceCall *apiCall =
58 apiCallFromTraceCall(call);
59 apiCall->parentFrame = currentFrame;
60 currentFrame->calls.append(apiCall);
61 if (ApiTrace::isCallAFrameMarker(apiCall,
63 frames.append(currentFrame);
65 if (frames.count() >= FRAMES_TO_CACHE) {
66 emit parsedFrames(frames);
70 call = p.parse_call();
73 //last frames won't have markers
74 // it's just a bunch of Delete calls for every object
75 // after the last SwapBuffers
77 frames.append(currentFrame);
81 emit parsedFrames(frames);
85 void LoaderThread::loadFile(const QString &fileName)
87 m_fileName = fileName;
91 ApiTrace::FrameMarker LoaderThread::frameMarker() const
96 void LoaderThread::setFrameMarker(ApiTrace::FrameMarker marker)
98 Q_ASSERT(!isRunning());
99 m_frameMarker = marker;
102 #include "loaderthread.moc"