From 1d31b6c50225d78792de17a6b2fbc75f7ea406f1 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Tue, 26 Apr 2011 22:30:25 -0400 Subject: [PATCH] Cleanup the ApiTraceFrame a bit. in preparation for figuring out the amount of data downloaded by the gpu in a frame. --- gui/apitrace.cpp | 8 ++++---- gui/apitracecall.cpp | 30 ++++++++++++++++++++++++++++-- gui/apitracecall.h | 11 ++++++++++- gui/apitracemodel.cpp | 12 ++++++------ gui/loaderthread.cpp | 2 +- gui/mainwindow.cpp | 22 ++++++++++++---------- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 4c96c71..376b73f 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -106,7 +106,7 @@ int ApiTrace::numCallsInFrame(int idx) const { const ApiTraceFrame *frame = frameAt(idx); if (frame) - return frame->calls.count(); + return frame->numChildren(); else return 0; } @@ -155,8 +155,8 @@ void ApiTrace::addFrames(const QList &frames) int numNewCalls = 0; foreach(ApiTraceFrame *frame, frames) { frame->setParentTrace(this); - numNewCalls += frame->calls.count(); - m_calls += frame->calls; + numNewCalls += frame->numChildren(); + m_calls += frame->calls(); } emit endAddingFrames(); @@ -178,7 +178,7 @@ void ApiTrace::detectFrames() currentFrame->number = m_frames.count(); } apiCall->setParentFrame(currentFrame); - currentFrame->calls.append(apiCall); + currentFrame->addCall(apiCall); if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { m_frames.append(currentFrame); diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 6a4088c..5901811 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -516,12 +516,13 @@ int ApiTraceCall::numChildren() const int ApiTraceFrame::numChildren() const { - return calls.count(); + return m_calls.count(); } ApiTraceFrame::ApiTraceFrame() : ApiTraceEvent(ApiTraceEvent::Frame), - m_parentTrace(0) + m_parentTrace(0), + m_binaryDataSize(0) { } @@ -894,3 +895,28 @@ ApiTrace * ApiTraceCall::parentTrace() const return NULL; } +void ApiTraceFrame::addCall(ApiTraceCall *call) +{ + m_calls.append(call); +} + +QList ApiTraceFrame::calls() const +{ + return m_calls; +} + +ApiTraceCall * ApiTraceFrame::call(int idx) const +{ + return m_calls.value(idx); +} + +int ApiTraceFrame::callIndex(ApiTraceCall *call) const +{ + return m_calls.indexOf(call); +} + +bool ApiTraceFrame::isEmpty() const +{ + return m_calls.isEmpty(); +} + diff --git a/gui/apitracecall.h b/gui/apitracecall.h index b5a3604..d8005ca 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -239,15 +239,24 @@ class ApiTraceFrame : public ApiTraceEvent public: ApiTraceFrame(); int number; - QList calls; + + bool isEmpty() const; ApiTrace *parentTrace() const; void setParentTrace(ApiTrace *trace); int numChildren() const; QStaticText staticText() const; + + int callIndex(ApiTraceCall *call) const; + ApiTraceCall *call(int idx) const; + void addCall(ApiTraceCall *call); + QList calls() const; + private: ApiTrace *m_parentTrace; + quint64 m_binaryDataSize; + QList m_calls; }; Q_DECLARE_METATYPE(ApiTraceFrame*); diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index debf5c5..7366ae5 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -108,7 +108,7 @@ QModelIndex ApiTraceModel::index(int row, int column, return QModelIndex(); } ApiTraceFrame *frame = static_cast(event); - ApiTraceCall *call = frame->calls.value(row); + ApiTraceCall *call = frame->call(row); if (call) return createIndex(row, column, call); else @@ -129,7 +129,7 @@ bool ApiTraceModel::hasChildren(const QModelIndex &parent) const ApiTraceEvent *event = item(parent); if (event && event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); - return !frame->calls.isEmpty(); + return !frame->isEmpty(); } else return false; } else { @@ -163,7 +163,7 @@ int ApiTraceModel::rowCount(const QModelIndex &parent) const ApiTraceFrame *frame = static_cast(event); if (frame) - return frame->calls.count(); + return frame->numChildren(); return 0; } @@ -244,7 +244,7 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event) if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); ApiTraceFrame *frame = call->parentFrame(); - int row = frame->calls.indexOf(call); + int row = frame->callIndex(call); QModelIndex index = createIndex(row, 0, call); emit dataChanged(index, index); } else if (event->type() == ApiTraceEvent::Frame) { @@ -271,7 +271,7 @@ QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const ApiTraceFrame *frame = call->parentFrame(); Q_ASSERT(frame); - int row = frame->calls.indexOf(call); + int row = frame->callIndex(call); if (row < 0) { qDebug() << "Couldn't find call num "<index()<<" inside parent!"; return QModelIndex(); @@ -295,7 +295,7 @@ void ApiTraceModel::callChanged(ApiTraceCall *call) trace->save(); ApiTraceFrame *frame = call->parentFrame(); - int row = frame->calls.indexOf(call); + int row = frame->callIndex(call); QModelIndex index = createIndex(row, 0, call); emit dataChanged(index, index); } diff --git a/gui/loaderthread.cpp b/gui/loaderthread.cpp index 57f6ed7..de5e3f8 100644 --- a/gui/loaderthread.cpp +++ b/gui/loaderthread.cpp @@ -65,7 +65,7 @@ void LoaderThread::run() ApiTraceCall *apiCall = apiCallFromTraceCall(call, helpHash); apiCall->setParentFrame(currentFrame); - currentFrame->calls.append(apiCall); + currentFrame->addCall(apiCall); if (ApiTrace::isCallAFrameMarker(apiCall, m_frameMarker)) { frames.append(currentFrame); diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 64802ef..4416975 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -260,12 +260,12 @@ void MainWindow::replayTrace(bool dumpState) } else if (m_selectedEvent->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(m_selectedEvent); - if (frame->calls.isEmpty()) { + if (frame->isEmpty()) { //XXX i guess we could still get the current state qDebug()<<"tried to get a state for an empty frame"; return; } - index = frame->calls.first()->index(); + index = frame->calls().first()->index(); } else { qDebug()<<"Unknown event type"; return; @@ -825,7 +825,7 @@ void MainWindow::slotSearchNext(const QString &str, else { Q_ASSERT(event->type() == ApiTraceCall::Frame); ApiTraceFrame *frame = static_cast(event); - call = frame->calls.value(0); + call = frame->call(0); } if (!call) { @@ -876,7 +876,7 @@ void MainWindow::slotSearchPrev(const QString &str, else { Q_ASSERT(event->type() == ApiTraceCall::Frame); ApiTraceFrame *frame = static_cast(event); - call = frame->calls.value(0); + call = frame->call(0); } if (!call) { @@ -982,14 +982,15 @@ void MainWindow::slotSaved() void MainWindow::slotGoFrameStart() { ApiTraceFrame *frame = currentFrame(); - if (!frame || frame->calls.isEmpty()) { + if (!frame || frame->isEmpty()) { return; } QList::const_iterator itr; + QList calls = frame->calls(); - itr = frame->calls.constBegin(); - while (itr != frame->calls.constEnd()) { + itr = calls.constBegin(); + while (itr != calls.constEnd()) { ApiTraceCall *call = *itr; QModelIndex idx = m_proxyModel->indexForCall(call); if (idx.isValid()) { @@ -1003,12 +1004,13 @@ void MainWindow::slotGoFrameStart() void MainWindow::slotGoFrameEnd() { ApiTraceFrame *frame = currentFrame(); - if (!frame || frame->calls.isEmpty()) { + if (!frame || frame->isEmpty()) { return; } QList::const_iterator itr; + QList calls = frame->calls(); - itr = frame->calls.constEnd(); + itr = calls.constEnd(); do { --itr; ApiTraceCall *call = *itr; @@ -1017,7 +1019,7 @@ void MainWindow::slotGoFrameEnd() m_ui.callView->setCurrentIndex(idx); break; } - } while (itr != frame->calls.constBegin()); + } while (itr != calls.constBegin()); } ApiTraceFrame * MainWindow::currentFrame() const -- 2.43.0