QmlProfiler: Use data replay feature for saving traces

This removes the last access to the master event list, which allows
us to also remove the accessor function.

Change-Id: I0e70c2eb23d2b11aa8b131c03eb3adfad1a9b9e7
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
Ulf Hermann
2016-04-29 14:43:32 +02:00
parent 4a1e5a637a
commit 914e1e1fe1
5 changed files with 14 additions and 24 deletions

View File

@@ -126,12 +126,6 @@ QmlProfilerDataModel::~QmlProfilerDataModel()
delete d; delete d;
} }
const QVector<QmlEvent> &QmlProfilerDataModel::events() const
{
Q_D(const QmlProfilerDataModel);
return d->eventList;
}
const QVector<QmlEventType> &QmlProfilerDataModel::eventTypes() const const QVector<QmlEventType> &QmlProfilerDataModel::eventTypes() const
{ {
Q_D(const QmlProfilerDataModel); Q_D(const QmlProfilerDataModel);

View File

@@ -45,7 +45,6 @@ public:
QmlProfilerModelManager *parent); QmlProfilerModelManager *parent);
~QmlProfilerDataModel(); ~QmlProfilerDataModel();
const QVector<QmlEvent> &events() const;
const QVector<QmlEventType> &eventTypes() const; const QVector<QmlEventType> &eventTypes() const;
void setData(qint64 traceStart, qint64 traceEnd, const QVector<QmlEventType> &types, void setData(qint64 traceStart, qint64 traceEnd, const QVector<QmlEventType> &types,
const QVector<QmlEvent> &events); const QVector<QmlEvent> &events);

View File

@@ -302,7 +302,7 @@ void QmlProfilerModelManager::save(const QString &filename)
QmlProfilerFileWriter *writer = new QmlProfilerFileWriter(this); QmlProfilerFileWriter *writer = new QmlProfilerFileWriter(this);
writer->setTraceTime(traceTime()->startTime(), traceTime()->endTime(), writer->setTraceTime(traceTime()->startTime(), traceTime()->endTime(),
traceTime()->duration()); traceTime()->duration());
writer->setData(d->model->eventTypes(), d->model->events()); writer->setData(d->model);
writer->setNotes(d->notesModel->notes()); writer->setNotes(d->notesModel->notes());
connect(writer, &QObject::destroyed, this, &QmlProfilerModelManager::saveFinished, connect(writer, &QObject::destroyed, this, &QmlProfilerModelManager::saveFinished,

View File

@@ -504,11 +504,9 @@ void QmlProfilerFileWriter::setTraceTime(qint64 startTime, qint64 endTime, qint6
m_measuredTime = measuredTime; m_measuredTime = measuredTime;
} }
void QmlProfilerFileWriter::setData(const QVector<QmlEventType> &types, void QmlProfilerFileWriter::setData(const QmlProfilerDataModel *model)
const QVector<QmlEvent> &events)
{ {
m_eventTypes = types; m_model = model;
m_events = events;
} }
void QmlProfilerFileWriter::setNotes(const QVector<QmlNote> &notes) void QmlProfilerFileWriter::setNotes(const QVector<QmlNote> &notes)
@@ -524,8 +522,8 @@ void QmlProfilerFileWriter::setFuture(QFutureInterface<void> *future)
void QmlProfilerFileWriter::save(QIODevice *device) void QmlProfilerFileWriter::save(QIODevice *device)
{ {
if (m_future) { if (m_future) {
m_future->setProgressRange(0, m_future->setProgressRange(
qMax(m_eventTypes.size() + m_events.size() + m_notes.size(), 1)); 0, qMax(m_model->eventTypes().size() + m_model->count() + m_notes.size(), 1));
m_future->setProgressValue(0); m_future->setProgressValue(0);
m_newProgressValue = 0; m_newProgressValue = 0;
} }
@@ -544,11 +542,12 @@ void QmlProfilerFileWriter::save(QIODevice *device)
stream.writeStartElement(_("eventData")); stream.writeStartElement(_("eventData"));
stream.writeAttribute(_("totalTime"), QString::number(m_measuredTime)); stream.writeAttribute(_("totalTime"), QString::number(m_measuredTime));
for (int typeIndex = 0; typeIndex < m_eventTypes.size(); ++typeIndex) { const QVector<QmlEventType> &eventTypes = m_model->eventTypes();
for (int typeIndex = 0; typeIndex < eventTypes.size(); ++typeIndex) {
if (isCanceled()) if (isCanceled())
return; return;
const QmlEventType &type = m_eventTypes[typeIndex]; const QmlEventType &type = eventTypes[typeIndex];
stream.writeStartElement(_("event")); stream.writeStartElement(_("event"));
stream.writeAttribute(_("index"), QString::number(typeIndex)); stream.writeAttribute(_("index"), QString::number(typeIndex));
@@ -596,15 +595,14 @@ void QmlProfilerFileWriter::save(QIODevice *device)
stream.writeStartElement(_("profilerDataModel")); stream.writeStartElement(_("profilerDataModel"));
QStack<QmlEvent> stack; QStack<QmlEvent> stack;
for (int rangeIndex = 0; rangeIndex < m_events.size(); ++rangeIndex) { m_model->replayEvents(-1, -1, [this, &stack, &stream](const QmlEvent &event,
const QmlEventType &type) {
if (isCanceled()) if (isCanceled())
return; return;
const QmlEvent &event = m_events[rangeIndex];
const QmlEventType &type = m_eventTypes[event.typeIndex()];
if (type.rangeType != MaximumRangeType && event.rangeStage() == RangeStart) { if (type.rangeType != MaximumRangeType && event.rangeStage() == RangeStart) {
stack.push(event); stack.push(event);
continue; return;
} }
stream.writeStartElement(_("range")); stream.writeStartElement(_("range"));
@@ -666,7 +664,7 @@ void QmlProfilerFileWriter::save(QIODevice *device)
stream.writeEndElement(); stream.writeEndElement();
incrementProgress(); incrementProgress();
} });
stream.writeEndElement(); // profilerDataModel stream.writeEndElement(); // profilerDataModel
stream.writeStartElement(_("noteData")); stream.writeStartElement(_("noteData"));

View File

@@ -88,7 +88,7 @@ public:
explicit QmlProfilerFileWriter(QObject *parent = 0); explicit QmlProfilerFileWriter(QObject *parent = 0);
void setTraceTime(qint64 startTime, qint64 endTime, qint64 measturedTime); void setTraceTime(qint64 startTime, qint64 endTime, qint64 measturedTime);
void setData(const QVector<QmlEventType> &types, const QVector<QmlEvent> &events); void setData(const QmlProfilerDataModel *model);
void setNotes(const QVector<QmlNote> &notes); void setNotes(const QVector<QmlNote> &notes);
void setFuture(QFutureInterface<void> *future); void setFuture(QFutureInterface<void> *future);
@@ -101,8 +101,7 @@ private:
qint64 m_startTime, m_endTime, m_measuredTime; qint64 m_startTime, m_endTime, m_measuredTime;
QFutureInterface<void> *m_future; QFutureInterface<void> *m_future;
QVector<QmlEventType> m_eventTypes; const QmlProfilerDataModel *m_model;
QVector<QmlEvent> m_events;
QVector<QmlNote> m_notes; QVector<QmlNote> m_notes;
int m_newProgressValue; int m_newProgressValue;
}; };