9bool operator==(
const QQmlProfilerEvent &event1,
const QQmlProfilerEvent &event2)
11 if (event1.timestamp() != event2.timestamp() || event1.typeIndex() != event2.typeIndex())
15 return event1.numbers<QVarLengthArray<qint64>>() == event2.numbers<QVarLengthArray<qint64>>();
79 event.m_timestamp = readNumber<qint64>(stream, (type >> TimestampOffset) & TypeMask);
80 event.m_typeIndex = readNumber<qint32>(stream, (type >> TypeIndexOffset) & TypeMask);
81 event.m_dataLength = readNumber<quint16>(stream, (type >> DataLengthOffset) & TypeMask);
83 uint bytesPerNumber = 1 << ((type >> DataOffset) & TypeMask);
85 if (event.m_dataLength * bytesPerNumber >
sizeof(event.m_data)) {
86 event.m_dataType =
static_cast<QQmlProfilerEvent::Type>((bytesPerNumber * 8)
87 | QQmlProfilerEvent::External);
88 event.m_data.external = malloc(event.m_dataLength * bytesPerNumber);
90 event.m_dataType =
static_cast<QQmlProfilerEvent::Type>(bytesPerNumber * 8);
93 switch (event.m_dataType) {
94 case QQmlProfilerEvent::Inline8Bit:
95 readNumbers<qint8>(stream, event.m_data.internal8bit, event.m_dataLength);
97 case QQmlProfilerEvent::External8Bit:
98 readNumbers<qint8>(stream,
static_cast<qint8 *>(event.m_data.external),
101 case QQmlProfilerEvent::Inline16Bit:
102 readNumbers<qint16>(stream, event.m_data.internal16bit, event.m_dataLength);
104 case QQmlProfilerEvent::External16Bit:
105 readNumbers<qint16>(stream,
static_cast<qint16 *>(event.m_data.external),
108 case QQmlProfilerEvent::Inline32Bit:
109 readNumbers<qint32>(stream, event.m_data.internal32bit, event.m_dataLength);
111 case QQmlProfilerEvent::External32Bit:
112 readNumbers<qint32>(stream,
static_cast<qint32 *>(event.m_data.external),
115 case QQmlProfilerEvent::Inline64Bit:
116 readNumbers<qint64>(stream, event.m_data.internal64bit, event.m_dataLength);
118 case QQmlProfilerEvent::External64Bit:
119 readNumbers<qint64>(stream,
static_cast<qint64 *>(event.m_data.external),
131 quint16 origBitsPerNumber)
133 qint8 type = OneByte;
135 for (quint16 i = 0; i < length;) {
136 if ((1 << type) == origBitsPerNumber / 8)
140 ok = (event.number<qint8>(i) == event.number<qint64>(i));
143 ok = (event.number<qint16>(i) == event.number<qint64>(i));
146 ok = (event.number<qint32>(i) == event.number<qint64>(i));
205 qint8 type = minimumType(event.m_timestamp);
208 type |= minimumType(event, event.m_dataLength, event.m_dataType) <<
DataOffset;
211 writeNumber(stream, event.m_timestamp, (type >> TimestampOffset) & TypeMask);
212 writeNumber(stream, event.m_typeIndex, (type >> TypeIndexOffset) & TypeMask);
213 writeNumber(stream, event.m_dataLength, (type >> DataLengthOffset) & TypeMask);
215 switch ((type >> DataOffset) & TypeMask) {
217 writeNumbers<qint8>(stream, event, event.m_dataLength);
220 writeNumbers<qint16>(stream, event, event.m_dataLength);
223 writeNumbers<qint32>(stream, event, event.m_dataLength);
226 writeNumbers<qint64>(stream, event, event.m_dataLength);