aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2016-06-06 19:51:55 +0200
committerUlf Hermann <ulf.hermann@qt.io>2016-06-10 12:43:05 +0000
commite10bc709bcde23a730ba390ceae33e84cc885266 (patch)
treeca6006c9c1d833d38aa1fab61354527205c82ac8 /src/plugins/qmlprofiler/qmlprofilertracefile.cpp
parent5718f12af5ad983924a19a6033026b16df89fd2b (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.cpp119
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();