X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=d6a9e41375c2cda6ef5f39eb43084e21d2b35cc0;hb=ebf971eec6c3a5f98885cc418e04690ba213b645;hp=9a68e63d56eb0ee3db5233bf327ac481527a50bb;hpb=20b1f6dc3783cec612fe3712c4b6c1ca65d4a5f4;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 9a68e63..d6a9e41 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -1,31 +1,46 @@ #include "apitrace.h" -#include "loaderthread.h" +#include "traceloader.h" #include "saverthread.h" #include +#include ApiTrace::ApiTrace() : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers), m_needsSaving(false) { - m_loader = new LoaderThread(this); - connect(m_loader, SIGNAL(parsedFrames(const QList)), + m_loader = new TraceLoader(); + connect(this, SIGNAL(loadTrace(QString)), + m_loader, SLOT(loadTrace(QString))); + connect(m_loader, SIGNAL(framesLoaded(const QList)), this, SLOT(addFrames(const QList))); - connect(m_loader, SIGNAL(started()), + connect(m_loader, SIGNAL(frameLoaded(int,QVector,quint64)), + this, SLOT(fillFrame(int,QVector,quint64))); + + connect(m_loader, SIGNAL(startedParsing()), this, SIGNAL(startedLoadingTrace())); - connect(m_loader, SIGNAL(finished()), + connect(m_loader, SIGNAL(parsed(int)), + this, SIGNAL(loaded(int))); + connect(m_loader, SIGNAL(finishedParsing()), this, SIGNAL(finishedLoadingTrace())); + m_saver = new SaverThread(this); connect(m_saver, SIGNAL(traceSaved()), this, SLOT(slotSaved())); connect(m_saver, SIGNAL(traceSaved()), this, SIGNAL(saved())); + + m_loaderThread = new QThread(); + m_loader->moveToThread(m_loaderThread); + m_loaderThread->start(); } ApiTrace::~ApiTrace() { + m_loaderThread->quit(); + m_loaderThread->deleteLater(); qDeleteAll(m_calls); qDeleteAll(m_frames); delete m_loader; @@ -118,10 +133,6 @@ void ApiTrace::setFileName(const QString &name) if (m_fileName != name) { m_fileName = name; - if (m_loader->isRunning()) { - m_loader->terminate(); - m_loader->wait(); - } m_frames.clear(); m_calls.clear(); m_errors.clear(); @@ -129,7 +140,8 @@ void ApiTrace::setFileName(const QString &name) m_needsSaving = false; emit invalidated(); - m_loader->loadFile(m_fileName); +// m_loader->loadTrace(m_fileName); + emit loadTrace(m_fileName); } } @@ -157,7 +169,7 @@ void ApiTrace::addFrames(const QList &frames) int currentCalls = m_calls.count(); int numNewCalls = 0; foreach(ApiTraceFrame *frame, frames) { - Q_ASSERT(this == frame->parentTrace()); + frame->setParentTrace(this); numNewCalls += frame->numChildren(); calls += frame->calls(); } @@ -290,34 +302,9 @@ bool ApiTrace::hasErrors() const return !m_errors.isEmpty(); } -ApiTraceCallSignature * ApiTrace::signature(unsigned id) -{ - if (id >= m_signatures.count()) { - m_signatures.resize(id + 1); - return NULL; - } else { - return m_signatures[id]; - } -} - -void ApiTrace::addSignature(unsigned id, ApiTraceCallSignature *signature) -{ - m_signatures[id] = signature; -} - -ApiTraceEnumSignature * ApiTrace::enumSignature(unsigned id) -{ - if (id >= m_enumSignatures.count()) { - m_enumSignatures.resize(id + 1); - return NULL; - } else { - return m_enumSignatures[id]; - } -} - -void ApiTrace::addEnumSignature(unsigned id, ApiTraceEnumSignature *signature) +void ApiTrace::fillFrame(int frameIdx, const QVector &calls, + quint64 binaryDataSize) { - m_enumSignatures[id] = signature; } #include "apitrace.moc"