23 const QString &fileName,
24 qxp::function_ref<
void(
const QQmlProfilerEventType &, QQmlProfilerEvent &&)> &&handler)
27 if (!file.open(QIODevice::ReadOnly)) {
28 qWarning() <<
"Cannot open file" << fileName <<
"for reading";
32 int currentEventIndex = -1;
34 QHash<
int, QQmlProfilerEventType> types;
36 QXmlStreamReader reader(&file);
37 while (!reader.atEnd()) {
38 if (reader.readNext() != QXmlStreamReader::StartElement)
41 const QStringView name = reader.name();
42 if (name ==
"event"_L1) {
43 currentEventIndex = reader.attributes().value(
"index"_L1).toInt();
44 }
else if (name ==
"mouseEvent"_L1 || name ==
"keyEvent"_L1) {
45 types[currentEventIndex] = QQmlProfilerEventType(
46 Message::Event, RangeType::MaximumRangeType, reader.readElementText().toInt());
47 }
else if (name ==
"range"_L1) {
48 const QXmlStreamAttributes attributes = reader.attributes();
49 const int typeIndex = attributes.value(
"eventIndex"_L1).toInt();
50 const auto type = types.constFind(typeIndex);
51 if (type != types.constEnd()) {
53 QQmlProfilerEvent(attributes.value(
"startTime"_L1).toLongLong(), typeIndex,
54 { attributes.value(
"type"_L1).toInt(),
55 attributes.value(
"data1"_L1).toInt(),
56 attributes.value(
"data2"_L1).toInt() }));
65 const QQmlProfilerEventType &type, QQmlProfilerEvent &&event)
67 QPacket stream(
connection()->currentDataStreamVersion());
68 stream << event.timestamp() << QQmlProfilerDefinitions::Message::Event
69 << type.detailType() << event.number<quint32>(0) << event.number<quint32>(1)
70 << event.number<quint32>(2);
71 sendMessage(stream.data());