forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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,
|
||||||
|
@@ -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> ¬es)
|
void QmlProfilerFileWriter::setNotes(const QVector<QmlNote> ¬es)
|
||||||
@@ -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"));
|
||||||
|
@@ -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> ¬es);
|
void setNotes(const QVector<QmlNote> ¬es);
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user