From 5c7509dd0930f71197278b9709f89d359be8bf84 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 9 Dec 2013 12:11:48 +0100 Subject: [PATCH] QmlProfiler: Add another data state "ClearingData" This allows us to steer the timeline models in a more fine grained way and avoid duplicate processing of the same data. We don't need to rebuild everything on stateChanged of the model manager then. Task-number: QTCREATORBUG-10950 Change-Id: I2aa9a96a33c602f062fc3b644ac06280ba7cd45a Reviewed-by: Kai Koehne --- src/plugins/qmlprofiler/abstracttimelinemodel.cpp | 3 +-- src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp | 4 ++++ src/plugins/qmlprofiler/qmlprofilermodelmanager.h | 1 + src/plugins/qmlprofiler/qmlprofilertool.cpp | 2 ++ src/plugins/qmlprofiler/qmlprofilertraceview.cpp | 3 ++- 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmlprofiler/abstracttimelinemodel.cpp b/src/plugins/qmlprofiler/abstracttimelinemodel.cpp index ae5972cebd0..35b59e2172a 100644 --- a/src/plugins/qmlprofiler/abstracttimelinemodel.cpp +++ b/src/plugins/qmlprofiler/abstracttimelinemodel.cpp @@ -41,7 +41,6 @@ void AbstractTimelineModel::setModelManager(QmlProfilerModelManager *modelManage { m_modelManager = modelManager; connect(modelManager->simpleModel(),SIGNAL(changed()),this,SLOT(dataChanged())); - connect(modelManager,SIGNAL(stateChanged()),this,SLOT(dataChanged())); m_modelId = modelManager->registerModelProxy(); } @@ -85,7 +84,7 @@ void AbstractTimelineModel::dataChanged() case QmlProfilerDataState::ProcessingData: loadData(); break; - case QmlProfilerDataState::Empty: + case QmlProfilerDataState::ClearingData: clear(); break; default: diff --git a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp index d1be7cfdb38..1771091e922 100644 --- a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp +++ b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp @@ -99,7 +99,7 @@ void QmlProfilerEventsModelProxy::dataChanged() if (d->modelManager->state() == QmlProfilerDataState::ProcessingData) loadData(); - if (d->modelManager->state() == QmlProfilerDataState::Empty) + if (d->modelManager->state() == QmlProfilerDataState::ClearingData) clear(); } diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp index 82af434a312..6fd51ef7884 100644 --- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp @@ -57,6 +57,9 @@ void QmlProfilerDataState::setState(QmlProfilerDataState::State state) return; switch (state) { + case ClearingData: + QTC_ASSERT(m_state == Done || m_state == Empty, /**/); + break; case Empty: // if it's not empty, complain but go on QTC_ASSERT(m_modelManager->isEmpty(), /**/); @@ -345,6 +348,7 @@ QmlProfilerDataState::State QmlProfilerModelManager::state() const void QmlProfilerModelManager::clear() { + setState(QmlProfilerDataState::ClearingData); for (int i = 0; i < d->partialCounts.count(); i++) d->partialCounts[i] = 0; d->progress = 0; diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h index f814ec432c3..6b48e82a4df 100644 --- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h +++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h @@ -52,6 +52,7 @@ public: Empty, AcquiringData, ProcessingData, + ClearingData, Done }; diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 2f4afa09d7b..555d5572e37 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -522,6 +522,8 @@ void QmlProfilerTool::profilerDataModelStateChanged() { switch (d->m_profilerModelManager->state()) { case QmlProfilerDataState::Empty : + break; + case QmlProfilerDataState::ClearingData : clearDisplay(); break; case QmlProfilerDataState::AcquiringData : diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp index 395be216965..baa674bb8d7 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp @@ -474,7 +474,8 @@ void QmlProfilerTraceView::setAppKilled() void QmlProfilerTraceView::profilerDataModelStateChanged() { switch (d->m_modelManager->state()) { - case QmlProfilerDataState::Empty: + case QmlProfilerDataState::Empty: break; + case QmlProfilerDataState::ClearingData: emit enableToolbar(false); break; case QmlProfilerDataState::AcquiringData: break;