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;
}
const QVector<QmlEvent> &QmlProfilerDataModel::events() const
{
Q_D(const QmlProfilerDataModel);
return d->eventList;
}
const QVector<QmlEventType> &QmlProfilerDataModel::eventTypes() const
{
Q_D(const QmlProfilerDataModel);

View File

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

View File

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

View File

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

View File

@@ -88,7 +88,7 @@ public:
explicit QmlProfilerFileWriter(QObject *parent = 0);
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 setFuture(QFutureInterface<void> *future);
@@ -101,8 +101,7 @@ private:
qint64 m_startTime, m_endTime, m_measuredTime;
QFutureInterface<void> *m_future;
QVector<QmlEventType> m_eventTypes;
QVector<QmlEvent> m_events;
const QmlProfilerDataModel *m_model;
QVector<QmlNote> m_notes;
int m_newProgressValue;
};