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(call);
19 apiCall->setHelpUrl(helpHash.value(apiCall->name()));
24 LoaderThread::LoaderThread(QObject *parent)
26 m_frameMarker(ApiTrace::FrameMarker_SwapBuffers)
30 void LoaderThread::run()
32 QList<ApiTraceFrame*> frames;
33 ApiTraceFrame *currentFrame = 0;
36 QHash<QString, QUrl> helpHash;
39 QFile file(":/resources/glreference.tsv");
40 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
42 while (!file.atEnd()) {
43 line = file.readLine();
44 QString function = line.section('\t', 0, 0).trimmed();
45 QUrl url = QUrl(line.section('\t', 1, 1).trimmed());
46 //qDebug()<<"function = "<<function<<", url = "<<url.toString();
47 helpHash.insert(function, url);
50 qWarning() << "Couldn't open reference file "
56 if (p.open(m_fileName.toLatin1().constData())) {
57 Trace::Call *call = p.parse_call();
61 currentFrame = new ApiTraceFrame();
62 currentFrame->number = frameCount;
65 ApiTraceCall *apiCall =
66 apiCallFromTraceCall(call, helpHash);
67 apiCall->setParentFrame(currentFrame);
68 currentFrame->addCall(apiCall);
69 if (ApiTrace::isCallAFrameMarker(apiCall,
71 frames.append(currentFrame);
73 if (frames.count() >= FRAMES_TO_CACHE) {
74 emit parsedFrames(frames);
79 call = p.parse_call();
82 //last frames won't have markers
83 // it's just a bunch of Delete calls for every object
84 // after the last SwapBuffers
86 frames.append(currentFrame);
90 emit parsedFrames(frames);
94 void LoaderThread::loadFile(const QString &fileName)
96 m_fileName = fileName;
100 ApiTrace::FrameMarker LoaderThread::frameMarker() const
102 return m_frameMarker;
105 void LoaderThread::setFrameMarker(ApiTrace::FrameMarker marker)
107 Q_ASSERT(!isRunning());
108 m_frameMarker = marker;
111 #include "loaderthread.moc"