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();
33 LoaderThread::LoaderThread(QObject *parent)
35 m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
39 void LoaderThread::run()
41 QList<ApiTraceFrame*> frames;
42 ApiTraceFrame *currentFrame = 0;
45 if (p.open(m_fileName.toLatin1().constData())) {
47 call = p.parse_call();
51 currentFrame = new ApiTraceFrame();
52 currentFrame->number = frameCount;
55 ApiTraceCall *apiCall =
56 apiCallFromTraceCall(call);
57 apiCall->parentFrame = currentFrame;
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"