forked from qt-creator/qt-creator
Timeline: Move modelId generation into aggregator
The way the notes model works requires every timeline model to have a different ID. Conversely no other kind of model actually needs an ID. Therefore it makes sense to have the TimelineModelAggregator manage the IDs as every timeline model will sooner or later be associated with an aggregator. Change-Id: Ib8b2c88ed883351d4e3e156dd13e1dd113c21808 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -30,7 +30,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
DebugMessagesModel::DebugMessagesModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
DebugMessagesModel::DebugMessagesModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, DebugMessage, MaximumRangeType, ProfileDebugMessages, parent),
|
||||
m_maximumMsgType(-1)
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@ class DebugMessagesModel : public QmlProfilerTimelineModel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DebugMessagesModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
DebugMessagesModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
int typeId(int index) const override;
|
||||
QRgb color(int index) const override;
|
||||
|
||||
@@ -57,7 +57,6 @@ FlameGraphModel::FlameGraphModel(QmlProfilerModelManager *modelManager,
|
||||
this, &FlameGraphModel::onTypeDetailsFinished);
|
||||
connect(modelManager->notesModel(), &Timeline::TimelineNotesModel::changed,
|
||||
this, [this](int typeId, int, int){loadNotes(typeId, true);});
|
||||
m_modelId = modelManager->registerModelProxy();
|
||||
m_acceptedFeatures = supportedFeatures();
|
||||
|
||||
modelManager->announceFeatures(m_acceptedFeatures,
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
InputEventsModel::InputEventsModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
InputEventsModel::InputEventsModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, Event, MaximumRangeType, ProfileInputEvents, parent),
|
||||
m_keyTypeId(-1), m_mouseTypeId(-1)
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
int b;
|
||||
};
|
||||
|
||||
InputEventsModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
InputEventsModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
bool accepted(const QmlEventType &type) const override;
|
||||
void loadEvent(const QmlEvent &event, const QmlEventType &type) override;
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
MemoryUsageModel::MemoryUsageModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
MemoryUsageModel::MemoryUsageModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, MemoryAllocation, MaximumRangeType, ProfileMemory, parent)
|
||||
{
|
||||
// Announce additional features. The base class already announces the main feature.
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
void update(qint64 amount);
|
||||
};
|
||||
|
||||
MemoryUsageModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
MemoryUsageModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
PixmapCacheModel::PixmapCacheModel(QmlProfilerModelManager *manager, QObject *parent) :
|
||||
PixmapCacheModel::PixmapCacheModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, PixmapCacheEvent, MaximumRangeType, ProfilePixmapCache,
|
||||
parent)
|
||||
{
|
||||
|
||||
@@ -94,7 +94,7 @@ public:
|
||||
qint64 cacheSize = 0;
|
||||
};
|
||||
|
||||
PixmapCacheModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
PixmapCacheModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerAnimationsModel::QmlProfilerAnimationsModel(QmlProfilerModelManager *manager,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, Event, MaximumRangeType, ProfileAnimations, parent)
|
||||
{
|
||||
m_minNextStartTimes[0] = m_minNextStartTimes[1] = 0;
|
||||
|
||||
@@ -49,7 +49,8 @@ public:
|
||||
int typeId;
|
||||
};
|
||||
|
||||
QmlProfilerAnimationsModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
QmlProfilerAnimationsModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
qint64 rowMaxValue(int rowNumber) const override;
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@ public:
|
||||
|
||||
QmlProfilerModelManager::State state = Empty;
|
||||
|
||||
int numRegisteredModels = 0;
|
||||
int numFinishedFinalizers = 0;
|
||||
|
||||
int numLoadedEvents = 0;
|
||||
@@ -193,11 +192,6 @@ int QmlProfilerModelManager::numEventTypes() const
|
||||
return d->eventTypes.count();
|
||||
}
|
||||
|
||||
int QmlProfilerModelManager::registerModelProxy()
|
||||
{
|
||||
return d->numRegisteredModels++;
|
||||
}
|
||||
|
||||
int QmlProfilerModelManager::numFinishedFinalizers() const
|
||||
{
|
||||
return d->numFinishedFinalizers;
|
||||
|
||||
@@ -76,7 +76,6 @@ public:
|
||||
int numEvents() const;
|
||||
int numEventTypes() const;
|
||||
|
||||
int registerModelProxy();
|
||||
void announceFeatures(quint64 features, EventLoader eventLoader, Finalizer finalizer);
|
||||
|
||||
int numFinishedFinalizers() const;
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerRangeModel::QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, MaximumMessage, range, featureFromRangeType(range), parent)
|
||||
{
|
||||
m_expandedRowTypes << -1;
|
||||
|
||||
@@ -56,7 +56,8 @@ public:
|
||||
int bindingLoopHead;
|
||||
};
|
||||
|
||||
QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range, QObject *parent = 0);
|
||||
QmlProfilerRangeModel(QmlProfilerModelManager *manager, RangeType range,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
Q_INVOKABLE int expandedRow(int index) const override;
|
||||
Q_INVOKABLE int collapsedRow(int index) const override;
|
||||
|
||||
@@ -70,7 +70,6 @@ QmlProfilerStatisticsModel::QmlProfilerStatisticsModel(QmlProfilerModelManager *
|
||||
this, &QmlProfilerStatisticsModel::modelManagerStateChanged);
|
||||
connect(modelManager->notesModel(), &Timeline::TimelineNotesModel::changed,
|
||||
this, &QmlProfilerStatisticsModel::notesChanged);
|
||||
modelManager->registerModelProxy();
|
||||
|
||||
m_acceptedTypes << Compiling << Creating << Binding << HandlingSignal << Javascript;
|
||||
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace QmlProfiler {
|
||||
|
||||
QmlProfilerTimelineModel::QmlProfilerTimelineModel(QmlProfilerModelManager *modelManager,
|
||||
Message message, RangeType rangeType,
|
||||
ProfileFeature mainFeature, QObject *parent) :
|
||||
TimelineModel(modelManager->registerModelProxy(), parent),
|
||||
m_message(message), m_rangeType(rangeType), m_mainFeature(mainFeature),
|
||||
ProfileFeature mainFeature,
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
TimelineModel(parent), m_message(message), m_rangeType(rangeType), m_mainFeature(mainFeature),
|
||||
m_modelManager(modelManager)
|
||||
{
|
||||
setDisplayName(tr(QmlProfilerModelManager::featureName(mainFeature)));
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "qmlprofiler_global.h"
|
||||
#include "qmlprofilermodelmanager.h"
|
||||
#include "timeline/timelinemodel.h"
|
||||
#include "timeline/timelinemodelaggregator.h"
|
||||
|
||||
namespace QmlProfiler {
|
||||
|
||||
@@ -39,7 +40,8 @@ class QMLPROFILER_EXPORT QmlProfilerTimelineModel : public Timeline::TimelineMod
|
||||
|
||||
public:
|
||||
QmlProfilerTimelineModel(QmlProfilerModelManager *modelManager, Message message,
|
||||
RangeType rangeType, ProfileFeature mainFeature, QObject *parent);
|
||||
RangeType rangeType, ProfileFeature mainFeature,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
QmlProfilerModelManager *modelManager() const;
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Q_STATIC_ASSERT(sizeof(StageLabels) ==
|
||||
SceneGraphTimelineModel::MaximumSceneGraphStage * sizeof(const char *));
|
||||
|
||||
SceneGraphTimelineModel::SceneGraphTimelineModel(QmlProfilerModelManager *manager,
|
||||
QObject *parent) :
|
||||
Timeline::TimelineModelAggregator *parent) :
|
||||
QmlProfilerTimelineModel(manager, SceneGraphFrame, MaximumRangeType, ProfileSceneGraph, parent)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -82,7 +82,8 @@ public:
|
||||
int glyphCount; // only used for one event type
|
||||
};
|
||||
|
||||
SceneGraphTimelineModel(QmlProfilerModelManager *manager, QObject *parent = 0);
|
||||
SceneGraphTimelineModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *parent);
|
||||
|
||||
int expandedRow(int index) const override;
|
||||
int collapsedRow(int index) const override;
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
DebugMessagesModelTest::DebugMessagesModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
DebugMessagesModel model;
|
||||
};
|
||||
|
||||
|
||||
@@ -37,10 +37,11 @@ FlameGraphModelTest::FlameGraphModelTest(QObject *parent) :
|
||||
{
|
||||
}
|
||||
|
||||
int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager)
|
||||
int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator)
|
||||
{
|
||||
// Notes only work with timeline models
|
||||
QmlProfilerRangeModel *rangeModel = new QmlProfilerRangeModel(manager, Javascript, manager);
|
||||
QmlProfilerRangeModel *rangeModel = new QmlProfilerRangeModel(manager, Javascript, aggregator);
|
||||
int rangeModelId = rangeModel->modelId();
|
||||
manager->notesModel()->addTimelineModel(rangeModel);
|
||||
|
||||
@@ -95,7 +96,7 @@ int FlameGraphModelTest::generateData(QmlProfilerModelManager *manager)
|
||||
void FlameGraphModelTest::initTestCase()
|
||||
{
|
||||
QCOMPARE(model.modelManager(), &manager);
|
||||
rangeModelId = generateData(&manager);
|
||||
rangeModelId = generateData(&manager, &aggregator);
|
||||
QCOMPARE(manager.state(), QmlProfilerModelManager::Done);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
|
||||
#include <qmlprofiler/flamegraphmodel.h>
|
||||
#include <qmlprofiler/qmlprofilermodelmanager.h>
|
||||
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlProfiler {
|
||||
@@ -37,7 +40,8 @@ class FlameGraphModelTest : public QObject
|
||||
Q_OBJECT
|
||||
public:
|
||||
FlameGraphModelTest(QObject *parent = nullptr);
|
||||
static int generateData(QmlProfilerModelManager *manager);
|
||||
static int generateData(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator);
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
@@ -50,6 +54,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
FlameGraphModel model;
|
||||
int rangeModelId = -1;
|
||||
};
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
FlameGraphViewTest::FlameGraphViewTest(QObject *parent) : QObject(parent), view(&manager)
|
||||
FlameGraphViewTest::FlameGraphViewTest(QObject *parent)
|
||||
: QObject(parent), view(&manager)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -42,7 +43,7 @@ void FlameGraphViewTest::initTestCase()
|
||||
{
|
||||
connect(&view, &QmlProfilerEventsView::showFullRange,
|
||||
this, [this](){ manager.restrictToRange(-1, -1); });
|
||||
FlameGraphModelTest::generateData(&manager);
|
||||
FlameGraphModelTest::generateData(&manager, &aggregator);
|
||||
QCOMPARE(manager.state(), QmlProfilerModelManager::Done);
|
||||
view.resize(500, 500);
|
||||
view.show();
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
|
||||
#include <qmlprofiler/flamegraphview.h>
|
||||
#include <qmlprofiler/qmlprofilermodelmanager.h>
|
||||
|
||||
#include <timeline/timelinemodelaggregator.h>
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace QmlProfiler {
|
||||
@@ -46,6 +49,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
FlameGraphView view;
|
||||
};
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ static InputEventType inputType(int i)
|
||||
}
|
||||
|
||||
InputEventsModelTest::InputEventsModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
keyTypeId = manager.numEventTypes();
|
||||
manager.addEventType(QmlEventType(Event, MaximumRangeType, Key));
|
||||
|
||||
@@ -51,6 +51,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
InputEventsModel model;
|
||||
|
||||
int mouseTypeId = -1;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
MemoryUsageModelTest::MemoryUsageModelTest(QObject *parent) : QObject(parent),
|
||||
manager(nullptr), model(&manager)
|
||||
model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
MemoryUsageModel model;
|
||||
|
||||
int heapPageTypeId = -1;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
PixmapCacheModelTest::PixmapCacheModelTest(QObject *parent) : QObject(parent),
|
||||
manager(nullptr), model(&manager)
|
||||
model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
PixmapCacheModel model;
|
||||
|
||||
int eventTypeIndices[2 * MaximumPixmapEventType];
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
QmlProfilerAnimationsModelTest::QmlProfilerAnimationsModelTest(QObject *parent) :
|
||||
QObject(parent), manager(nullptr), model(&manager)
|
||||
QObject(parent), model(&manager, &aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
QmlProfilerAnimationsModel model;
|
||||
};
|
||||
|
||||
|
||||
@@ -37,12 +37,13 @@ namespace Internal {
|
||||
|
||||
class DummyModel : public QmlProfilerRangeModel {
|
||||
public:
|
||||
DummyModel(QmlProfilerModelManager *manager);
|
||||
DummyModel(QmlProfilerModelManager *manager, Timeline::TimelineModelAggregator *aggregator);
|
||||
void loadData();
|
||||
};
|
||||
|
||||
DummyModel::DummyModel(QmlProfilerModelManager *manager) :
|
||||
QmlProfilerRangeModel(manager, Binding)
|
||||
DummyModel::DummyModel(QmlProfilerModelManager *manager,
|
||||
Timeline::TimelineModelAggregator *aggregator) :
|
||||
QmlProfilerRangeModel(manager, Binding, aggregator)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -90,8 +91,9 @@ void QmlProfilerBindingLoopsRenderPassTest::testUpdate()
|
||||
inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
QmlProfilerModelManager manager(nullptr);
|
||||
DummyModel model(&manager);
|
||||
QmlProfilerModelManager manager;
|
||||
Timeline::TimelineModelAggregator aggregator;
|
||||
DummyModel model(&manager, &aggregator);
|
||||
renderer.setModel(&model);
|
||||
result = inst->update(&renderer, &parentState, 0, 0, 0, true, 1);
|
||||
QCOMPARE(result, nullState);
|
||||
|
||||
Reference in New Issue
Block a user