diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2016-06-06 19:51:55 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2016-06-10 12:43:05 +0000 |
commit | e10bc709bcde23a730ba390ceae33e84cc885266 (patch) | |
tree | ca6006c9c1d833d38aa1fab61354527205c82ac8 /src/plugins/qmlprofiler/qmlprofilertracefile.cpp | |
parent | 5718f12af5ad983924a19a6033026b16df89fd2b (diff) |
QmlProfiler: Provide a sane ctor for QmlEventType and use it
... in turn, make its members private, so that we don't accidentally
change them.
Change-Id: Ibc65b406ee341d33f69647ed1b19e1e34f5cd535
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'src/plugins/qmlprofiler/qmlprofilertracefile.cpp')
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilertracefile.cpp | 119 |
1 files changed, 60 insertions, 59 deletions
diff --git a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp index 534c74c04b..3b8ea4ff8c 100644 --- a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp @@ -290,19 +290,23 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) QTC_ASSERT(stream.name() == _("eventData"), return); int typeIndex = -1; - QmlEventType type = { - QString(), // displayname - QmlEventLocation(), - MaximumMessage, - Painting, // type - QmlBinding, // bindingType, set for backwards compatibility - QString(), // details - }; - const QmlEventType defaultEvent = type; + QPair<Message, RangeType> messageAndRange(MaximumMessage, MaximumRangeType); + int detailType = -1; + QString displayName; + QString data; QString filename; int line = 0, column = 0; + auto clearType = [&](){ + messageAndRange = QPair<Message, RangeType>(MaximumMessage, MaximumRangeType); + detailType = -1; + displayName.clear(); + data.clear(); + filename.clear(); + line = column = 0; + }; + while (!stream.atEnd() && !stream.hasError()) { if (isCanceled()) return; @@ -314,7 +318,7 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) case QXmlStreamReader::StartElement: { if (elementName == _("event")) { updateProgress(stream.device()); - type = defaultEvent; + clearType(); const QXmlStreamAttributes attributes = stream.attributes(); if (attributes.hasAttribute(_("index"))) { @@ -333,14 +337,12 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) const QString readData = stream.text().toString(); if (elementName == _("displayname")) { - type.displayName = readData; + displayName = readData; break; } if (elementName == _("type")) { - QPair<Message, RangeType> enums = qmlTypeAsEnum(readData); - type.message = enums.first; - type.rangeType = enums.second; + messageAndRange = qmlTypeAsEnum(readData); break; } @@ -360,20 +362,19 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) } if (elementName == _("details")) { - type.data = readData; + data = readData; break; } if (elementName == _("animationFrame")) { - type.detailType = readData.toInt(); + detailType = readData.toInt(); // new animation frames used to be saved as ranges of range type Painting with // binding type 4 (which was called "AnimationFrame" to make everything even more // confusing), even though they clearly aren't ranges. Convert that to something // sane here. - if (type.detailType == 4) { - type.message = Event; - type.rangeType = MaximumRangeType; - type.detailType = AnimationFrame; + if (detailType == 4) { + messageAndRange = QPair<Message, RangeType>(Event, MaximumRangeType); + detailType = AnimationFrame; } } @@ -384,7 +385,7 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) elementName == _("mouseEvent") || elementName == _("keyEvent") || elementName == _("level")) { - type.detailType = readData.toInt(); + detailType = readData.toInt(); break; } @@ -395,9 +396,8 @@ void QmlProfilerFileReader::loadEventTypes(QXmlStreamReader &stream) if (typeIndex >= 0) { if (typeIndex >= m_eventTypes.size()) m_eventTypes.resize(typeIndex + 1); - type.location = QmlEventLocation(filename, line, column); - filename.clear(); - line = column = 0; + QmlEventType type(messageAndRange.first, messageAndRange.second, detailType, + QmlEventLocation(filename, line, column), data, displayName); m_eventTypes[typeIndex] = type; ProfileFeature feature = type.feature(); if (feature != MaximumProfileFeature) @@ -624,41 +624,42 @@ void QmlProfilerFileWriter::saveQtd(QIODevice *device) stream.writeStartElement(_("event")); stream.writeAttribute(_("index"), QString::number(typeIndex)); - stream.writeTextElement(_("displayname"), type.displayName); - stream.writeTextElement(_("type"), qmlTypeAsString(type.message, type.rangeType)); - if (!type.location.filename().isEmpty()) { - stream.writeTextElement(_("filename"), type.location.filename()); - stream.writeTextElement(_("line"), QString::number(type.location.line())); - stream.writeTextElement(_("column"), QString::number(type.location.column())); + stream.writeTextElement(_("displayname"), type.displayName()); + stream.writeTextElement(_("type"), qmlTypeAsString(type.message(), type.rangeType())); + const QmlEventLocation location(type.location()); + if (!location.filename().isEmpty()) { + stream.writeTextElement(_("filename"), location.filename()); + stream.writeTextElement(_("line"), QString::number(location.line())); + stream.writeTextElement(_("column"), QString::number(location.column())); } - if (!type.data.isEmpty()) - stream.writeTextElement(_("details"), type.data); + if (!type.data().isEmpty()) + stream.writeTextElement(_("details"), type.data()); - if (type.rangeType == Binding) { - stream.writeTextElement(_("bindingType"), QString::number(type.detailType)); - } else if (type.message == Event) { - switch (type.detailType) { + if (type.rangeType() == Binding) { + stream.writeTextElement(_("bindingType"), QString::number(type.detailType())); + } else if (type.message() == Event) { + switch (type.detailType()) { case AnimationFrame: - stream.writeTextElement(_("animationFrame"), QString::number(type.detailType)); + stream.writeTextElement(_("animationFrame"), QString::number(type.detailType())); break; case Key: - stream.writeTextElement(_("keyEvent"), QString::number(type.detailType)); + stream.writeTextElement(_("keyEvent"), QString::number(type.detailType())); break; case Mouse: - stream.writeTextElement(_("mouseEvent"), QString::number(type.detailType)); + stream.writeTextElement(_("mouseEvent"), QString::number(type.detailType())); break; default: break; } - } else if (type.message == PixmapCacheEvent) { - stream.writeTextElement(_("cacheEventType"), QString::number(type.detailType)); - } else if (type.message == SceneGraphFrame) { - stream.writeTextElement(_("sgEventType"), QString::number(type.detailType)); - } else if (type.message == MemoryAllocation) { - stream.writeTextElement(_("memoryEventType"), QString::number(type.detailType)); - } else if (type.message == DebugMessage) { - stream.writeTextElement(_("level"), QString::number(type.detailType)); + } else if (type.message() == PixmapCacheEvent) { + stream.writeTextElement(_("cacheEventType"), QString::number(type.detailType())); + } else if (type.message() == SceneGraphFrame) { + stream.writeTextElement(_("sgEventType"), QString::number(type.detailType())); + } else if (type.message() == MemoryAllocation) { + stream.writeTextElement(_("memoryEventType"), QString::number(type.detailType())); + } else if (type.message() == DebugMessage) { + stream.writeTextElement(_("level"), QString::number(type.detailType())); } stream.writeEndElement(); incrementProgress(); @@ -673,13 +674,13 @@ void QmlProfilerFileWriter::saveQtd(QIODevice *device) if (isCanceled()) return; - if (type.rangeType != MaximumRangeType && event.rangeStage() == RangeStart) { + if (type.rangeType() != MaximumRangeType && event.rangeStage() == RangeStart) { stack.push(event); return; } stream.writeStartElement(_("range")); - if (type.rangeType != MaximumRangeType && event.rangeStage() == RangeEnd) { + if (type.rangeType() != MaximumRangeType && event.rangeStage() == RangeEnd) { QmlEvent start = stack.pop(); stream.writeAttribute(_("startTime"), QString::number(start.timestamp())); stream.writeAttribute(_("duration"), @@ -690,14 +691,14 @@ void QmlProfilerFileWriter::saveQtd(QIODevice *device) stream.writeAttribute(_("eventIndex"), QString::number(event.typeIndex())); - if (type.message == Event) { - if (type.detailType == AnimationFrame) { + if (type.message() == Event) { + if (type.detailType() == AnimationFrame) { // special: animation event stream.writeAttribute(_("framerate"), QString::number(event.number<qint32>(0))); stream.writeAttribute(_("animationcount"), QString::number(event.number<qint32>(1))); stream.writeAttribute(_("thread"), QString::number(event.number<qint32>(2))); - } else if (type.detailType == Key || type.detailType == Mouse) { + } else if (type.detailType() == Key || type.detailType() == Mouse) { // special: input event stream.writeAttribute(_("type"), QString::number(event.number<qint32>(0))); stream.writeAttribute(_("data1"), QString::number(event.number<qint32>(1))); @@ -706,18 +707,18 @@ void QmlProfilerFileWriter::saveQtd(QIODevice *device) } // special: pixmap cache event - if (type.message == PixmapCacheEvent) { - if (type.detailType == PixmapSizeKnown) { + if (type.message() == PixmapCacheEvent) { + if (type.detailType() == PixmapSizeKnown) { stream.writeAttribute(_("width"), QString::number(event.number<qint32>(0))); stream.writeAttribute(_("height"), QString::number(event.number<qint32>(1))); } - if (type.detailType == PixmapReferenceCountChanged || - type.detailType == PixmapCacheCountChanged) + if (type.detailType() == PixmapReferenceCountChanged + || type.detailType() == PixmapCacheCountChanged) stream.writeAttribute(_("refCount"), QString::number(event.number<qint32>(2))); } - if (type.message == SceneGraphFrame) { + if (type.message() == SceneGraphFrame) { // special: scenegraph frame events for (int i = 0; i < 5; ++i) { qint64 number = event.number<qint64>(i); @@ -729,10 +730,10 @@ void QmlProfilerFileWriter::saveQtd(QIODevice *device) } // special: memory allocation event - if (type.message == MemoryAllocation) + if (type.message() == MemoryAllocation) stream.writeAttribute(_("amount"), QString::number(event.number<qint64>(0))); - if (type.message == DebugMessage) + if (type.message() == DebugMessage) stream.writeAttribute(_("text"), event.string()); stream.writeEndElement(); |