1 #include "loaderthread.h"
3 #include "trace_parser.hpp"
11 #define FRAMES_TO_CACHE 100
14 apiCallFromTraceCall(const Trace::Call *call,
15 const QHash<QString, QUrl> &helpHash)
17 ApiTraceCall *apiCall = new ApiTraceCall();
18 apiCall->name = QString::fromStdString(call->sig->name);
19 apiCall->index = call->no;
21 QString argumentsText;
22 for (int i = 0; i < call->sig->arg_names.size(); ++i) {
24 QString::fromStdString(call->sig->arg_names[i]);
27 VariantVisitor retVisitor;
28 call->ret->visit(retVisitor);
29 apiCall->returnValue = retVisitor.variant();
31 for (int i = 0; i < call->args.size(); ++i) {
32 VariantVisitor argVisitor;
33 call->args[i]->visit(argVisitor);
34 apiCall->argValues += argVisitor.variant();
37 apiCall->helpUrl = helpHash.value(apiCall->name);
39 //force generation of the internal state
40 apiCall->filterText();
44 LoaderThread::LoaderThread(QObject *parent)
46 m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
50 void LoaderThread::run()
52 QList<ApiTraceFrame*> frames;
53 ApiTraceFrame *currentFrame = 0;
56 QHash<QString, QUrl> helpHash;
59 QFile file(":/resources/glreference.tsv");
60 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
62 while (!file.atEnd()) {
63 line = file.readLine();
64 QString function = line.section('\t', 0, 0).trimmed();
65 QUrl url = QUrl(line.section('\t', 1, 1).trimmed());
66 //qDebug()<<"function = "<<function<<", url = "<<url.toString();
67 helpHash.insert(function, url);
70 qWarning() << "Couldn't open reference file "
76 if (p.open(m_fileName.toLatin1().constData())) {
78 call = p.parse_call();
82 currentFrame = new ApiTraceFrame();
83 currentFrame->number = frameCount;
86 ApiTraceCall *apiCall =
87 apiCallFromTraceCall(call, helpHash);
88 apiCall->parentFrame = currentFrame;
89 currentFrame->calls.append(apiCall);
90 if (ApiTrace::isCallAFrameMarker(apiCall,
92 frames.append(currentFrame);
94 if (frames.count() >= FRAMES_TO_CACHE) {
95 emit parsedFrames(frames);
99 call = p.parse_call();
102 //last frames won't have markers
103 // it's just a bunch of Delete calls for every object
104 // after the last SwapBuffers
106 frames.append(currentFrame);
109 if (frames.count()) {
110 emit parsedFrames(frames);
114 void LoaderThread::loadFile(const QString &fileName)
116 m_fileName = fileName;
120 ApiTrace::FrameMarker LoaderThread::frameMarker() const
122 return m_frameMarker;
125 void LoaderThread::setFrameMarker(ApiTrace::FrameMarker marker)
127 Q_ASSERT(!isRunning());
128 m_frameMarker = marker;
131 #include "loaderthread.moc"