From e2dfa2ec912e22d838fcbe8ae019b6b3cfab3103 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Wed, 13 Apr 2011 01:35:03 -0400 Subject: [PATCH] Implement state diffing. Makes it possible to show only the parts of the state which differ from the defaults. very neat --- gui/apitrace.cpp | 9 ++++++++ gui/apitrace.h | 2 ++ gui/mainwindow.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++-- gui/mainwindow.h | 1 + gui/ui/mainwindow.ui | 9 +++++++- 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 03ff02e..592202f 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -181,4 +181,13 @@ ApiTraceCall * ApiTrace::callWithIndex(int idx) const return NULL; } +ApiTraceState ApiTrace::defaultState() const +{ + ApiTraceFrame *frame = frameAt(0); + if (!frame) + return ApiTraceState(); + + return frame->state(); +} + #include "apitrace.moc" diff --git a/gui/apitrace.h b/gui/apitrace.h index f1f6811..2bf916a 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -29,6 +29,8 @@ public: FrameMarker frameMarker() const; + ApiTraceState defaultState() const; + QList calls() const; ApiTraceCall *callAt(int idx) const; ApiTraceCall *callWithIndex(int idx) const; diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index f57ccc8..8269bfd 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -315,6 +315,10 @@ void MainWindow::fillStateForFrame() if (!m_selectedEvent || m_selectedEvent->state().isEmpty()) return; + bool nonDefaults = m_ui.nonDefaultsCB->isChecked(); + ApiTraceState defaultState = m_trace->defaultState(); + QVariantMap defaultParams = defaultState.parameters(); + const ApiTraceState &state = m_selectedEvent->state(); m_ui.stateTreeWidget->clear(); params = state.parameters(); @@ -324,6 +328,12 @@ void MainWindow::fillStateForFrame() QString val; variantToString(itr.value(), val); + if (nonDefaults) { + QString defaultValue; + variantToString(defaultParams[key], defaultValue); + if (defaultValue == val) + continue; + } //qDebug()<<"key = "<frameAt(0); + ApiTraceEvent *oldSelected = m_selectedEvent; + if (!firstFrame) + return; + m_selectedEvent = firstFrame; + lookupState(); + m_selectedEvent = oldSelected; + } + } + fillStateForFrame(); +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 73e3084..de413c0 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -56,6 +56,7 @@ private slots: void slotSearch(); void slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity); void slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity); + void fillState(bool nonDefaults); private: void initObjects(); diff --git a/gui/ui/mainwindow.ui b/gui/ui/mainwindow.ui index 09c164c..c0c6237 100644 --- a/gui/ui/mainwindow.ui +++ b/gui/ui/mainwindow.ui @@ -128,13 +128,20 @@ - 2 + 0 Parameters + + + + Only show non-defaults + + + -- 2.43.0