From ed40bc699e44f810d27c7e50d396f7749c8cc9c2 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sun, 28 Aug 2011 17:11:02 -0400 Subject: [PATCH] Reduce the size of ApiTraceCall, ApiTraceEvent and ApiTraceFrame This gets down the memory usage down quite a bit. --- gui/apicalldelegate.cpp | 2 +- gui/apitrace.cpp | 4 ++-- gui/apitracecall.cpp | 21 +++++++++++++++------ gui/apitracecall.h | 24 ++++++++++++++---------- gui/apitracemodel.cpp | 4 ++-- gui/mainwindow.cpp | 12 ++++++------ gui/mainwindow.h | 2 +- gui/retracer.cpp | 6 +++--- gui/retracer.h | 4 ++-- 9 files changed, 46 insertions(+), 33 deletions(-) diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp index dc9dc94..11ed3a5 100644 --- a/gui/apicalldelegate.cpp +++ b/gui/apicalldelegate.cpp @@ -33,7 +33,7 @@ void ApiCallDelegate::paint(QPainter *painter, //QStyledItemDelegate::paint(painter, option, index); QStyle *style = QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &option, painter, 0); - if (!event->state().isEmpty()) { + if (event->hasState()) { QPixmap px = m_stateEmblem.pixmap(option.rect.height(), option.rect.height()); painter->drawPixmap(option.rect.topLeft(), px); diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index f3b95dc..2985d9d 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -212,10 +212,10 @@ ApiTraceCall * ApiTrace::callWithIndex(int idx) const ApiTraceState ApiTrace::defaultState() const { ApiTraceFrame *frame = frameAt(0); - if (!frame) + if (!frame || !frame->hasState()) return ApiTraceState(); - return frame->state(); + return *frame->state(); } void ApiTrace::callEdited(ApiTraceCall *call) diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 5c7d861..54e480d 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -535,41 +535,50 @@ void ApiTraceCallSignature::setHelpUrl(const QUrl &url) ApiTraceEvent::ApiTraceEvent() : m_type(ApiTraceEvent::None), + m_hasBinaryData(false), + m_binaryDataIndex(0), + m_state(0), m_staticText(0) { } ApiTraceEvent::ApiTraceEvent(Type t) : m_type(t), + m_hasBinaryData(false), + m_binaryDataIndex(0), + m_state(0), m_staticText(0) { } ApiTraceEvent::~ApiTraceEvent() { + delete m_state; delete m_staticText; } QVariantMap ApiTraceEvent::stateParameters() const { - return m_state.parameters(); + if (m_state) { + return m_state->parameters(); + } else { + return QVariantMap(); + } } -ApiTraceState ApiTraceEvent::state() const +ApiTraceState *ApiTraceEvent::state() const { return m_state; } -void ApiTraceEvent::setState(const ApiTraceState &state) +void ApiTraceEvent::setState(ApiTraceState *state) { m_state = state; } ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame, const Trace::Call *call) : ApiTraceEvent(ApiTraceEvent::Call), - m_parentFrame(parentFrame), - m_hasBinaryData(false), - m_binaryDataIndex(0) + m_parentFrame(parentFrame) { ApiTrace *trace = parentTrace(); diff --git a/gui/apitracecall.h b/gui/apitracecall.h index 89f3102..46e44b2 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -179,27 +179,33 @@ class ApiTraceEvent { public: enum Type { - None, - Call, - Frame + None = 0, + Call = 1 << 0, + Frame = 1 << 1 }; public: ApiTraceEvent(); ApiTraceEvent(Type t); virtual ~ApiTraceEvent(); - Type type() const { return m_type; } + Type type() const { return (Type)m_type; } virtual QStaticText staticText() const = 0; virtual int numChildren() const = 0; QVariantMap stateParameters() const; - ApiTraceState state() const; - void setState(const ApiTraceState &state); + ApiTraceState *state() const; + void setState(ApiTraceState *state); + bool hasState() const + { + return m_state && !m_state->isEmpty(); + } protected: - Type m_type; - ApiTraceState m_state; + int m_type : 4; + mutable bool m_hasBinaryData; + mutable int m_binaryDataIndex:8; + ApiTraceState *m_state; mutable QStaticText *m_staticText; }; @@ -253,8 +259,6 @@ private: mutable QString m_richText; mutable QString m_searchText; - mutable bool m_hasBinaryData; - mutable int m_binaryDataIndex; }; Q_DECLARE_METATYPE(ApiTraceCall*); diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index e60b176..5860cf9 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -42,7 +42,7 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const const QString stateText = tr("State info available."); if (itm->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(itm); - if (call->state().isEmpty()) + if (!call->hasState()) return QString::fromLatin1("%1) %2") .arg(call->index()) .arg(call->name()); @@ -56,7 +56,7 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const QString text = QObject::tr("%1) Frame ") .arg(frame->number); int binaryDataSize = frame->binaryDataSize() / 1024; - if (frame->state().isEmpty()) + if (!frame->hasState()) return QObject::tr( "%1 (binary data size = %2kB)") .arg(text) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index ba19b4d..5072db7 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -132,7 +132,7 @@ void MainWindow::callItemSelected(const QModelIndex &index) m_ui.detailsDock->hide(); m_ui.vertexDataDock->hide(); } - if (m_selectedEvent && !m_selectedEvent->state().isEmpty()) { + if (m_selectedEvent && m_selectedEvent->hasState()) { fillStateForFrame(); } else m_ui.stateDock->hide(); @@ -464,7 +464,7 @@ static void addSurfaceItem(const ApiSurface &surface, void MainWindow::fillStateForFrame() { - if (!m_selectedEvent || m_selectedEvent->state().isEmpty()) + if (!m_selectedEvent || !m_selectedEvent->hasState()) return; if (m_nonDefaultsLookupEvent) { @@ -480,7 +480,7 @@ void MainWindow::fillStateForFrame() defaultParams = defaultState.parameters(); } - const ApiTraceState &state = m_selectedEvent->state(); + const ApiTraceState &state = *m_selectedEvent->state(); m_ui.stateTreeWidget->clear(); QList items; variantMapToItems(state.parameters(), defaultParams, items); @@ -694,8 +694,8 @@ void MainWindow::initConnections() this, SLOT(replayFinished(const QString&))); connect(m_retracer, SIGNAL(error(const QString&)), this, SLOT(replayError(const QString&))); - connect(m_retracer, SIGNAL(foundState(const ApiTraceState&)), - this, SLOT(replayStateFound(const ApiTraceState&))); + connect(m_retracer, SIGNAL(foundState(ApiTraceState*)), + this, SLOT(replayStateFound(ApiTraceState*))); connect(m_retracer, SIGNAL(retraceErrors(const QList&)), this, SLOT(slotRetraceErrors(const QList&))); @@ -778,7 +778,7 @@ void MainWindow::initConnections() this, SLOT(slotErrorSelected(QTreeWidgetItem*))); } -void MainWindow::replayStateFound(const ApiTraceState &state) +void MainWindow::replayStateFound(ApiTraceState *state) { m_stateEvent->setState(state); m_model->stateSetOnEvent(m_stateEvent); diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 5cb2e76..f3e3181 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -43,7 +43,7 @@ private slots: void replayStart(); void replayStop(); void replayFinished(const QString &output); - void replayStateFound(const ApiTraceState &state); + void replayStateFound(ApiTraceState *state); void replayError(const QString &msg); void startedLoadingTrace(); void finishedLoadingTrace(); diff --git a/gui/retracer.cpp b/gui/retracer.cpp index 98a4db2..500d859 100644 --- a/gui/retracer.cpp +++ b/gui/retracer.cpp @@ -98,8 +98,8 @@ void Retracer::run() this, SIGNAL(finished(const QString&))); connect(retrace, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString&))); - connect(retrace, SIGNAL(foundState(const ApiTraceState&)), - this, SIGNAL(foundState(const ApiTraceState&))); + connect(retrace, SIGNAL(foundState(ApiTraceState*)), + this, SIGNAL(foundState(ApiTraceState*))); connect(retrace, SIGNAL(retraceErrors(const QList&)), this, SIGNAL(retraceErrors(const QList&))); @@ -155,7 +155,7 @@ void RetraceProcess::replayFinished() if (m_captureState) { bool ok = false; QVariantMap parsedJson = m_jsonParser->parse(output, &ok).toMap(); - ApiTraceState state(parsedJson); + ApiTraceState *state = new ApiTraceState(parsedJson); emit foundState(state); msg = tr("State fetched."); } else { diff --git a/gui/retracer.h b/gui/retracer.h index 1b5a4bd..70170f5 100644 --- a/gui/retracer.h +++ b/gui/retracer.h @@ -48,7 +48,7 @@ public slots: signals: void finished(const QString &output); void error(const QString &msg); - void foundState(const ApiTraceState &state); + void foundState(ApiTraceState *state); void retraceErrors(const QList &errors); private slots: @@ -89,7 +89,7 @@ public: signals: void finished(const QString &output); - void foundState(const ApiTraceState &state); + void foundState(ApiTraceState *state); void error(const QString &msg); void retraceErrors(const QList &errors); -- 2.43.0