summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libs/qmldebug/qmlprofilereventtypes.h61
-rw-r--r--src/libs/qmldebug/qmlprofilertraceclient.cpp40
-rw-r--r--src/libs/qmldebug/qmlprofilertraceclient.h42
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp10
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerdatamodel.cpp17
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerdatamodel.h13
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp25
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.h9
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventview.cpp22
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventview.h2
-rw-r--r--src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp16
-rw-r--r--src/plugins/qmlprofiler/qmlprofilermodelmanager.h6
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerpainteventsmodelproxy.cpp6
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.cpp19
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.h2
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertracefile.cpp194
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertracefile.h13
-rw-r--r--src/plugins/qmlprofiler/singlecategorytimelinemodel.cpp11
-rw-r--r--src/plugins/qmlprofiler/singlecategorytimelinemodel.h4
-rw-r--r--src/plugins/qmlprofiler/singlecategorytimelinemodel_p.h3
20 files changed, 285 insertions, 230 deletions
diff --git a/src/libs/qmldebug/qmlprofilereventtypes.h b/src/libs/qmldebug/qmlprofilereventtypes.h
index 59e9987c57..d44ce22892 100644
--- a/src/libs/qmldebug/qmlprofilereventtypes.h
+++ b/src/libs/qmldebug/qmlprofilereventtypes.h
@@ -30,19 +30,43 @@
#ifndef QMLPROFILEREVENTTYPES_H
#define QMLPROFILEREVENTTYPES_H
+#include <QtGlobal>
+
namespace QmlDebug {
-enum QmlEventType {
- Painting,
+enum Message {
+ Event,
+ RangeStart,
+ RangeData,
+ RangeLocation,
+ RangeEnd,
+ Complete,
+ PixmapCacheEvent,
+ SceneGraphFrame,
+
+ MaximumMessage
+};
+
+enum EventType {
+ FramePaint, // unused
+ Mouse,
+ Key,
+ AnimationFrame, // new Qt5 paint events
+ EndTrace,
+ StartTrace,
+
+ MaximumEventType
+};
+
+enum RangeType {
+ Painting, // old Qt4 paint events
Compiling,
Creating,
Binding,
HandlingSignal,
Javascript,
- PixmapCacheEvent,
- SceneGraphFrameEvent,
- MaximumQmlEventType
+ MaximumRangeType
};
enum BindingType {
@@ -50,11 +74,36 @@ enum BindingType {
V8Binding,
OptimizedBinding,
QPainterEvent,
- AnimationFrame,
MaximumBindingType
};
+enum PixmapEventType {
+ PixmapSizeKnown,
+ PixmapReferenceCountChanged,
+ PixmapCacheCountChanged,
+ PixmapLoadingStarted,
+ PixmapLoadingFinished,
+ PixmapLoadingError,
+
+ MaximumPixmapEventType
+};
+
+enum SceneGraphFrameType {
+ SceneGraphRendererFrame,
+ SceneGraphAdaptationLayerFrame,
+ SceneGraphContextFrame,
+ SceneGraphRenderLoopFrame,
+ SceneGraphTexturePrepare,
+ SceneGraphTextureDeletion,
+ SceneGraphPolishAndSync,
+ SceneGraphWindowsRenderShow,
+ SceneGraphWindowsAnimations,
+ SceneGraphWindowsPolishFrame,
+
+ MaximumSceneGraphFrameType
+};
+
enum AnimationThread {
GuiThread,
RenderThread,
diff --git a/src/libs/qmldebug/qmlprofilertraceclient.cpp b/src/libs/qmldebug/qmlprofilertraceclient.cpp
index ffbac4902f..1442cc63db 100644
--- a/src/libs/qmldebug/qmlprofilertraceclient.cpp
+++ b/src/libs/qmldebug/qmlprofilertraceclient.cpp
@@ -39,18 +39,18 @@ public:
, maximumTime(0)
, recording(false)
{
- ::memset(rangeCount, 0, MaximumQmlEventType * sizeof(int));
+ ::memset(rangeCount, 0, MaximumRangeType * sizeof(int));
}
void sendRecordingStatus();
QmlProfilerTraceClient *q;
qint64 inProgressRanges;
- QStack<qint64> rangeStartTimes[MaximumQmlEventType];
- QStack<QStringList> rangeDatas[MaximumQmlEventType];
- QStack<QmlEventLocation> rangeLocations[MaximumQmlEventType];
+ QStack<qint64> rangeStartTimes[MaximumRangeType];
+ QStack<QStringList> rangeDatas[MaximumRangeType];
+ QStack<QmlEventLocation> rangeLocations[MaximumRangeType];
QStack<BindingType> bindingTypes;
- int rangeCount[MaximumQmlEventType];
+ int rangeCount[MaximumRangeType];
qint64 maximumTime;
bool recording;
};
@@ -86,8 +86,8 @@ QmlProfilerTraceClient::~QmlProfilerTraceClient()
void QmlProfilerTraceClient::clearData()
{
- ::memset(d->rangeCount, 0, MaximumQmlEventType * sizeof(int));
- for (int eventType = 0; eventType < MaximumQmlEventType; eventType++) {
+ ::memset(d->rangeCount, 0, MaximumRangeType * sizeof(int));
+ for (int eventType = 0; eventType < MaximumRangeType; eventType++) {
d->rangeDatas[eventType].clear();
d->rangeLocations[eventType].clear();
d->rangeStartTimes[eventType].clear();
@@ -175,8 +175,8 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
stream >> threadId;
else
threadId = 0;
- emit rangedEvent(QmlDebug::Painting, QmlDebug::AnimationFrame, time, 0,
- QStringList(), QmlDebug::QmlEventLocation(), frameRate, animationCount, threadId,0,0);
+ emit rangedEvent(Event, MaximumRangeType, AnimationFrame, time, 0, QStringList(),
+ QmlDebug::QmlEventLocation(), frameRate, animationCount, threadId,0,0);
d->maximumTime = qMax(time, d->maximumTime);
} else if (event == StartTrace) {
emit this->traceStarted(time);
@@ -198,8 +198,9 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
}
while (count<5)
params[count++] = 0;
- emit rangedEvent(SceneGraphFrameEvent, sgEventType,time, 0, QStringList(),
- QmlDebug::QmlEventLocation(), params[0], params[1], params[2], params[3], params[4]);
+ emit rangedEvent(SceneGraphFrame, QmlDebug::MaximumRangeType, sgEventType,time, 0,
+ QStringList(), QmlDebug::QmlEventLocation(), params[0], params[1],
+ params[2], params[3], params[4]);
} else if (messageType == PixmapCacheEvent) {
int pixEvTy, width = 0, height = 0, refcount = 0;
QString pixUrl;
@@ -210,14 +211,15 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
stream >> width >> height;
refcount = 1;
}
- emit rangedEvent(QmlDebug::PixmapCacheEvent, pixEvTy, time, 0, QStringList(),
- QmlDebug::QmlEventLocation(pixUrl,0,0), width, height, refcount, 0, 0);
+ emit rangedEvent(QmlDebug::PixmapCacheEvent, QmlDebug::MaximumRangeType, pixEvTy, time, 0,
+ QStringList(), QmlDebug::QmlEventLocation(pixUrl,0,0), width, height,
+ refcount, 0, 0);
d->maximumTime = qMax(time, d->maximumTime);
} else {
int range;
stream >> range;
- if (range >= MaximumQmlEventType)
+ if (range >= MaximumRangeType)
return;
if (messageType == RangeStart) {
@@ -226,7 +228,7 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
++d->rangeCount[range];
// read binding type
- if ((QmlEventType)range == Binding) {
+ if ((RangeType)range == Binding) {
int bindingType = (int)QmlBinding;
if (!stream.atEnd())
stream >> bindingType;
@@ -270,12 +272,12 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data)
qint64 startTime = d->rangeStartTimes[range].pop();
BindingType bindingType = QmlBinding;
- if ((QmlEventType)range == Binding)
+ if ((RangeType)range == Binding)
bindingType = d->bindingTypes.pop();
- if ((QmlEventType)range == Painting)
+ if ((RangeType)range == Painting)
bindingType = QPainterEvent;
- emit rangedEvent((QmlEventType)range, bindingType, startTime, time - startTime, data,
- location, 0, 0, 0, 0, 0);
+ emit rangedEvent(MaximumMessage, (RangeType)range, bindingType, startTime,
+ time - startTime, data, location, 0, 0, 0, 0, 0);
if (d->rangeCount[range] == 0) {
int count = d->rangeDatas[range].count() +
d->rangeStartTimes[range].count() +
diff --git a/src/libs/qmldebug/qmlprofilertraceclient.h b/src/libs/qmldebug/qmlprofilertraceclient.h
index 6b9d4f9b5a..1912652e92 100644
--- a/src/libs/qmldebug/qmlprofilertraceclient.h
+++ b/src/libs/qmldebug/qmlprofilertraceclient.h
@@ -53,41 +53,6 @@ public:
QmlProfilerTraceClient(QmlDebugConnection *client);
~QmlProfilerTraceClient();
- enum EventType {
- FramePaint,
- Mouse,
- Key,
- AnimationFrame,
- EndTrace,
- StartTrace,
-
- MaximumEventType
- };
-
- enum Message {
- Event,
- RangeStart,
- RangeData,
- RangeLocation,
- RangeEnd,
- Complete,
- PixmapCacheEvent,
- SceneGraphFrame,
-
- MaximumMessage
- };
-
- enum PixmapEventType {
- PixmapSizeKnown,
- PixmapReferenceCountChanged,
- PixmapCacheCountChanged,
- PixmapLoadingStarted,
- PixmapLoadingFinished,
- PixmapLoadingError,
-
- MaximumPixmapEventType
- };
-
bool isEnabled() const;
bool isRecording() const;
void setRecording(bool);
@@ -102,9 +67,10 @@ signals:
void event(int event, qint64 time);
void traceFinished( qint64 time );
void traceStarted( qint64 time );
- void rangedEvent(int type, int bindingType, qint64 startTime, qint64 length,
- const QStringList &data, const QmlDebug::QmlEventLocation &location,
- qint64 param1, qint64 param2, qint64 param3, qint64 param4, qint64 param5);
+ void rangedEvent(QmlDebug::Message, QmlDebug::RangeType, int detailType, qint64 startTime,
+ qint64 length, const QStringList &data,
+ const QmlDebug::QmlEventLocation &location, qint64 param1, qint64 param2,
+ qint64 param3, qint64 param4, qint64 param5);
void recordingChanged(bool arg);
void enabledChanged();
diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp
index ad57a88ed9..828707828d 100644
--- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp
@@ -175,11 +175,13 @@ void QmlProfilerClientManager::connectClientSignals()
connect(d->qmlclientplugin.data(), SIGNAL(complete(qint64)),
this, SLOT(qmlComplete(qint64)));
connect(d->qmlclientplugin.data(),
- SIGNAL(rangedEvent(int,int,qint64,qint64,QStringList,QmlDebug::QmlEventLocation,
- qint64,qint64,qint64,qint64,qint64)),
+ SIGNAL(rangedEvent(QmlDebug::Message,QmlDebug::RangeType,int,qint64,qint64,
+ QStringList,QmlDebug::QmlEventLocation,qint64,qint64,qint64,
+ qint64,qint64)),
d->modelManager,
- SLOT(addQmlEvent(int,int,qint64,qint64,QStringList,QmlDebug::QmlEventLocation,
- qint64,qint64,qint64,qint64,qint64)));
+ SLOT(addQmlEvent(QmlDebug::Message,QmlDebug::RangeType,int,qint64,qint64,
+ QStringList,QmlDebug::QmlEventLocation,qint64,qint64,qint64,qint64,
+ qint64)));
connect(d->qmlclientplugin.data(), SIGNAL(traceFinished(qint64)),
d->modelManager->traceTime(), SLOT(setEndTime(qint64)));
connect(d->qmlclientplugin.data(), SIGNAL(traceStarted(qint64)),
diff --git a/src/plugins/qmlprofiler/qmlprofilerdatamodel.cpp b/src/plugins/qmlprofiler/qmlprofilerdatamodel.cpp
index c4c364ccb7..39ba49baa2 100644
--- a/src/plugins/qmlprofiler/qmlprofilerdatamodel.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerdatamodel.cpp
@@ -55,7 +55,7 @@ QString getInitialDetails(const QmlProfilerDataModel::QmlEventData &event);
QmlDebug::QmlEventLocation getLocation(const QmlProfilerDataModel::QmlEventData &event)
{
QmlDebug::QmlEventLocation eventLocation = event.location;
- if ((event.eventType == QmlDebug::Creating || event.eventType == QmlDebug::Compiling)
+ if ((event.rangeType == QmlDebug::Creating || event.rangeType == QmlDebug::Compiling)
&& eventLocation.filename.isEmpty()) {
eventLocation.filename = getInitialDetails(event);
eventLocation.line = 1;
@@ -169,7 +169,7 @@ void QmlProfilerDataModel::complete()
// request further details from files
//
- if (event->eventType != QmlDebug::Binding && event->eventType != QmlDebug::HandlingSignal)
+ if (event->rangeType != QmlDebug::Binding && event->rangeType != QmlDebug::HandlingSignal)
continue;
// This skips anonymous bindings in Qt4.8 (we don't have valid location data for them)
@@ -189,7 +189,8 @@ void QmlProfilerDataModel::complete()
QmlProfilerBaseModel::complete();
}
-void QmlProfilerDataModel::addQmlEvent(int type, int bindingType, qint64 startTime,
+void QmlProfilerDataModel::addQmlEvent(QmlDebug::Message message, QmlDebug::RangeType rangeType,
+ int detailType, qint64 startTime,
qint64 duration, const QStringList &data,
const QmlDebug::QmlEventLocation &location,
qint64 ndata1, qint64 ndata2, qint64 ndata3,
@@ -197,7 +198,7 @@ void QmlProfilerDataModel::addQmlEvent(int type, int bindingType, qint64 startTi
{
Q_D(QmlProfilerDataModel);
QString displayName;
- if (type == QmlDebug::Painting && bindingType == QmlDebug::AnimationFrame) {
+ if (message == QmlDebug::Event && detailType == QmlDebug::AnimationFrame) {
displayName = tr("Animations");
} else {
displayName = QString::fromLatin1("%1:%2").arg(
@@ -205,8 +206,8 @@ void QmlProfilerDataModel::addQmlEvent(int type, int bindingType, qint64 startTi
QString::number(location.line));
}
- QmlEventData eventData = {displayName, type, bindingType, startTime, duration, data, location,
- ndata1, ndata2, ndata3, ndata4, ndata5};
+ QmlEventData eventData = {displayName, message, rangeType, detailType, startTime, duration,
+ data, location, ndata1, ndata2, ndata3, ndata4, ndata5};
d->eventList.append(eventData);
d->modelManager->modelProxyCountUpdated(d->modelId, startTime,
@@ -219,8 +220,8 @@ QString QmlProfilerDataModel::getHashString(const QmlProfilerDataModel::QmlEvent
event.location.filename,
QString::number(event.location.line),
QString::number(event.location.column),
- QString::number(event.eventType),
- QString::number(event.bindingType));
+ QString::number((event.message << 8) | event.rangeType),
+ QString::number(event.detailType));
}
qint64 QmlProfilerDataModel::lastTimeMark() const
diff --git a/src/plugins/qmlprofiler/qmlprofilerdatamodel.h b/src/plugins/qmlprofiler/qmlprofilerdatamodel.h
index 400faaee14..ec426afc13 100644
--- a/src/plugins/qmlprofiler/qmlprofilerdatamodel.h
+++ b/src/plugins/qmlprofiler/qmlprofilerdatamodel.h
@@ -30,6 +30,7 @@
#ifndef QMLPROFILERDATAMODEL_H
#define QMLPROFILERDATAMODEL_H
+#include <qmldebug/qmlprofilereventtypes.h>
#include "qmlprofilerbasemodel.h"
namespace QmlProfiler {
@@ -40,8 +41,9 @@ class QMLPROFILER_EXPORT QmlProfilerDataModel : public QmlProfilerBaseModel
public:
struct QmlEventData {
QString displayName;
- int eventType;
- int bindingType;
+ QmlDebug::Message message;
+ QmlDebug::RangeType rangeType;
+ int detailType; // can be EventType, BindingType, PixmapEventType or SceneGraphFrameType
qint64 startTime;
qint64 duration;
QStringList data;
@@ -60,9 +62,10 @@ public:
virtual void clear();
virtual bool isEmpty() const;
virtual void complete();
- void addQmlEvent(int type, int bindingType, qint64 startTime, qint64 duration,
- const QStringList &data, const QmlDebug::QmlEventLocation &location,
- qint64 ndata1, qint64 ndata2, qint64 ndata3, qint64 ndata4, qint64 ndata5);
+ void addQmlEvent(QmlDebug::Message message, QmlDebug::RangeType rangeType, int bindingType,
+ qint64 startTime, qint64 duration, const QStringList &data,
+ const QmlDebug::QmlEventLocation &location, qint64 ndata1, qint64 ndata2,
+ qint64 ndata3, qint64 ndata4, qint64 ndata5);
static QString getHashString(const QmlProfilerDataModel::QmlEventData &event);
qint64 lastTimeMark() const;
diff --git a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp
index 9ffac56271..485f2973f0 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.cpp
@@ -58,7 +58,7 @@ public:
int modelId;
- QList<QmlDebug::QmlEventType> acceptedTypes;
+ QList<QmlDebug::RangeType> acceptedTypes;
QSet<QString> eventsInBindingLoop;
};
@@ -80,7 +80,7 @@ QmlProfilerEventsModelProxy::~QmlProfilerEventsModelProxy()
delete d;
}
-void QmlProfilerEventsModelProxy::setEventTypeAccepted(QmlDebug::QmlEventType type, bool accepted)
+void QmlProfilerEventsModelProxy::setEventTypeAccepted(QmlDebug::RangeType type, bool accepted)
{
if (accepted && !d->acceptedTypes.contains(type))
d->acceptedTypes << type;
@@ -88,7 +88,7 @@ void QmlProfilerEventsModelProxy::setEventTypeAccepted(QmlDebug::QmlEventType ty
d->acceptedTypes.removeOne(type);
}
-bool QmlProfilerEventsModelProxy::eventTypeAccepted(QmlDebug::QmlEventType type) const
+bool QmlProfilerEventsModelProxy::eventTypeAccepted(QmlDebug::RangeType type) const
{
return d->acceptedTypes.contains(type);
}
@@ -144,7 +144,7 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
for (int i = 0; i < eventList.size(); ++i) {
const QmlProfilerDataModel::QmlEventData *event = &eventList[i];
- if (!d->acceptedTypes.contains((QmlDebug::QmlEventType)event->eventType))
+ if (!d->acceptedTypes.contains(event->rangeType))
continue;
if (checkRanges) {
@@ -161,8 +161,9 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
hash,
event->data.join(QLatin1String(" ")),
event->location,
- event->eventType,
- event->bindingType,
+ event->message,
+ event->rangeType,
+ event->detailType,
event->duration,
1, //calls
event->duration, //minTime
@@ -257,7 +258,8 @@ void QmlProfilerEventsModelProxy::loadData(qint64 rangeStart, qint64 rangeEnd)
rootEventName, // hash
tr("Main Program"), //event.details,
rootEventLocation, // location
- (int)QmlDebug::Binding, // event type
+ QmlDebug::MaximumMessage,
+ QmlDebug::Binding, // event type
0, // binding type
qmlTime + 1,
1, //calls
@@ -347,6 +349,7 @@ void QmlProfilerEventParentsModelProxy::loadData()
QString rootEventName = tr("<program>");
QmlProfilerDataModel::QmlEventData rootEvent = {
rootEventName,
+ QmlDebug::MaximumMessage,
QmlDebug::Binding,
0,
0,
@@ -370,7 +373,7 @@ void QmlProfilerEventParentsModelProxy::loadData()
const QVector<QmlProfilerDataModel::QmlEventData> eventList = simpleModel->getEvents();
foreach (const QmlProfilerDataModel::QmlEventData &event, eventList) {
// whitelist
- if (!m_eventsModel->eventTypeAccepted((QmlDebug::QmlEventType)event.eventType))
+ if (!m_eventsModel->eventTypeAccepted(event.rangeType))
continue;
// level computation
@@ -407,7 +410,7 @@ void QmlProfilerEventParentsModelProxy::loadData()
m_data[eventHash].insert(parentHash, QmlEventRelativesData());
QmlEventRelativesData *parent = &(m_data[eventHash][parentHash]);
parent->displayName = parentEvent->displayName;
- parent->eventType = parentEvent->eventType;
+ parent->rangeType = parentEvent->rangeType;
parent->duration = event.duration;
parent->calls = 1;
parent->details = parentEvent->data.join(QLatin1String(""));
@@ -450,7 +453,7 @@ void QmlProfilerEventChildrenModelProxy::loadData()
const QVector<QmlProfilerDataModel::QmlEventData> eventList = simpleModel->getEvents();
foreach (const QmlProfilerDataModel::QmlEventData &event, eventList) {
// whitelist
- if (!m_eventsModel->eventTypeAccepted((QmlDebug::QmlEventType)event.eventType))
+ if (!m_eventsModel->eventTypeAccepted(event.rangeType))
continue;
// level computation
@@ -480,7 +483,7 @@ void QmlProfilerEventChildrenModelProxy::loadData()
m_data[parentHash].insert(eventHash, QmlEventRelativesData());
QmlEventRelativesData *child = &(m_data[parentHash][eventHash]);
child->displayName = event.displayName;
- child->eventType = event.eventType;
+ child->rangeType = event.rangeType;
child->duration = event.duration;
child->calls = 1;
child->details = event.data.join(QLatin1String(""));
diff --git a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.h b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.h
index cc57a096f5..c716664092 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.h
+++ b/src/plugins/qmlprofiler/qmlprofilereventsmodelproxy.h
@@ -53,7 +53,8 @@ public:
QString eventHashStr;
QString details;
QmlDebug::QmlEventLocation location;
- int eventType;
+ QmlDebug::Message message;
+ QmlDebug::RangeType rangeType;
int bindingType;
qint64 duration;
@@ -70,8 +71,8 @@ public:
QmlProfilerEventsModelProxy(QmlProfilerModelManager *modelManager, QObject *parent = 0);
~QmlProfilerEventsModelProxy();
- void setEventTypeAccepted(QmlDebug::QmlEventType type, bool accepted);
- bool eventTypeAccepted(QmlDebug::QmlEventType) const;
+ void setEventTypeAccepted(QmlDebug::RangeType type, bool accepted);
+ bool eventTypeAccepted(QmlDebug::RangeType) const;
const QList<QmlEventStats> getData() const;
int count() const;
@@ -104,7 +105,7 @@ class QmlProfilerEventRelativesModelProxy : public QObject
public:
struct QmlEventRelativesData {
QString displayName;
- int eventType;
+ QmlDebug::RangeType rangeType;
qint64 duration;
qint64 calls;
QString details;
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
index ed8d6bb1c8..47616c12d5 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
@@ -561,9 +561,9 @@ void QmlProfilerEventsMainView::parseModelProxy()
newRow << new EventsViewItem(event.displayName);
if (d->m_fieldShown[Type]) {
- QString typeString = QmlProfilerEventsMainView::nameForType(event.eventType);
+ QString typeString = QmlProfilerEventsMainView::nameForType(event.rangeType);
QString toolTipText;
- if (event.eventType == Binding) {
+ if (event.rangeType == Binding) {
if (event.bindingType == (int)OptimizedBinding) {
typeString = typeString + QLatin1Char(' ') + tr("(Opt)");
toolTipText = tr("Binding is evaluated by the optimized engine.");
@@ -645,17 +645,17 @@ void QmlProfilerEventsMainView::parseModelProxy()
}
}
-QString QmlProfilerEventsMainView::nameForType(int typeNumber)
+QString QmlProfilerEventsMainView::nameForType(QmlDebug::RangeType typeNumber)
{
switch (typeNumber) {
- case 0: return QmlProfilerEventsMainView::tr("Paint");
- case 1: return QmlProfilerEventsMainView::tr("Compile");
- case 2: return QmlProfilerEventsMainView::tr("Create");
- case 3: return QmlProfilerEventsMainView::tr("Binding");
- case 4: return QmlProfilerEventsMainView::tr("Signal");
- case 5: return QmlProfilerEventsMainView::tr("JavaScript");
+ case QmlDebug::Painting: return QmlProfilerEventsMainView::tr("Paint");
+ case QmlDebug::Compiling: return QmlProfilerEventsMainView::tr("Compile");
+ case QmlDebug::Creating: return QmlProfilerEventsMainView::tr("Create");
+ case QmlDebug::Binding: return QmlProfilerEventsMainView::tr("Binding");
+ case QmlDebug::HandlingSignal: return QmlProfilerEventsMainView::tr("Signal");
+ case QmlDebug::Javascript: return QmlProfilerEventsMainView::tr("JavaScript");
+ default: return QString();
}
- return QString();
}
void QmlProfilerEventsMainView::getStatisticsInRange(qint64 rangeStart, qint64 rangeEnd)
@@ -867,7 +867,7 @@ void QmlProfilerEventRelativesView::rebuildTree(QmlProfilerEventRelativesModelPr
// maybe we should store the data in this proxy and get it here
// no indirections at this level of abstraction!
newRow << new EventsViewItem(event.displayName);
- newRow << new EventsViewItem(QmlProfilerEventsMainView::nameForType(event.eventType));
+ newRow << new EventsViewItem(QmlProfilerEventsMainView::nameForType(event.rangeType));
newRow << new EventsViewItem(QmlProfilerBaseModel::formatTime(event.duration));
newRow << new EventsViewItem(QString::number(event.calls));
newRow << new EventsViewItem(event.details);
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.h b/src/plugins/qmlprofiler/qmlprofilereventview.h
index 492fdbf4f4..22ee7cdd95 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.h
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.h
@@ -119,7 +119,7 @@ public:
void copyTableToClipboard() const;
void copyRowToClipboard() const;
- static QString nameForType(int typeNumber);
+ static QString nameForType(QmlDebug::RangeType typeNumber);
void getStatisticsInRange(qint64 rangeStart, qint64 rangeEnd);
QString selectedEventHash() const;
diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
index e22eb097a8..d62015b023 100644
--- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
@@ -249,8 +249,9 @@ void QmlProfilerModelManager::newTimeEstimation(qint64 estimation)
d->estimatedTime = estimation;
}
-void QmlProfilerModelManager::addQmlEvent(int type,
- int bindingType,
+void QmlProfilerModelManager::addQmlEvent(QmlDebug::Message message,
+ QmlDebug::RangeType rangeType,
+ int detailType,
qint64 startTime,
qint64 length,
const QStringList &data,
@@ -266,7 +267,8 @@ void QmlProfilerModelManager::addQmlEvent(int type,
d->traceTime->setStartTime(startTime);
QTC_ASSERT(state() == QmlProfilerDataState::AcquiringData, /**/);
- d->model->addQmlEvent(type, bindingType, startTime, length, data, location, ndata1, ndata2, ndata3, ndata4, ndata5);
+ d->model->addQmlEvent(message, rangeType, detailType, startTime, length, data, location,
+ ndata1, ndata2, ndata3, ndata4, ndata5);
}
void QmlProfilerModelManager::addV8Event(int depth, const QString &function, const QString &filename,
@@ -353,10 +355,12 @@ void QmlProfilerModelManager::load()
QmlProfilerFileReader reader;
connect(&reader, SIGNAL(error(QString)), this, SIGNAL(error(QString)));
- connect(&reader, SIGNAL(rangedEvent(int,int,qint64,qint64,QStringList,QmlDebug::QmlEventLocation,
+ connect(&reader, SIGNAL(rangedEvent(QmlDebug::Message,QmlDebug::RangeType,int,qint64,qint64,
+ QStringList,QmlDebug::QmlEventLocation,
qint64, qint64, qint64, qint64, qint64)),
- this, SLOT(addQmlEvent(int,int,qint64,qint64,QStringList,QmlDebug::QmlEventLocation,
- qint64, qint64, qint64, qint64, qint64)));
+ this, SLOT(addQmlEvent(QmlDebug::Message,QmlDebug::RangeType,int,qint64,qint64,
+ QStringList,QmlDebug::QmlEventLocation,
+ qint64, qint64, qint64, qint64, qint64)));
connect(&reader, SIGNAL(traceStartTime(qint64)), traceTime(), SLOT(setStartTime(qint64)));
connect(&reader, SIGNAL(traceEndTime(qint64)), traceTime(), SLOT(setEndTime(qint64)));
reader.setV8DataModel(d->v8Model);
diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h
index 1be9abd973..ebee32057f 100644
--- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h
+++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h
@@ -33,6 +33,7 @@
#include "qmlprofiler_global.h"
#include <qmldebug/qmlprofilereventlocation.h>
+#include <qmldebug/qmlprofilereventtypes.h>
#include <utils/fileinprojectfinder.h>
#include <QObject>
@@ -138,8 +139,9 @@ public slots:
void clear();
void prepareForWriting();
- void addQmlEvent(int type, int bindingType, qint64 startTime, qint64 length,
- const QStringList &data, const QmlDebug::QmlEventLocation &location,
+ void addQmlEvent(QmlDebug::Message message, QmlDebug::RangeType rangeType, int bindingType,
+ qint64 startTime, qint64 length, const QStringList &data,
+ const QmlDebug::QmlEventLocation &location,
qint64 ndata1, qint64 ndata2, qint64 ndata3, qint64 ndata4, qint64 ndata5);
void addV8Event(int depth, const QString &function,const QString &filename, int lineNumber,
double totalTime, double selfTime);
diff --git a/src/plugins/qmlprofiler/qmlprofilerpainteventsmodelproxy.cpp b/src/plugins/qmlprofiler/qmlprofilerpainteventsmodelproxy.cpp
index c4aa50ea74..963abbaf97 100644
--- a/src/plugins/qmlprofiler/qmlprofilerpainteventsmodelproxy.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerpainteventsmodelproxy.cpp
@@ -63,7 +63,7 @@ private:
PaintEventsModelProxy::PaintEventsModelProxy(QObject *parent)
: SingleCategoryTimelineModel(new PaintEventsModelProxyPrivate,
QLatin1String("PaintEventsModelProxy"), tr("Painting"),
- QmlDebug::Painting, parent)
+ QmlDebug::Event, QmlDebug::MaximumRangeType, parent)
{
Q_D(PaintEventsModelProxy);
d->seenForeignPaintEvent = false;
@@ -84,7 +84,7 @@ void PaintEventsModelProxy::clear()
bool PaintEventsModelProxy::eventAccepted(const QmlProfilerDataModel::QmlEventData &event) const
{
return SingleCategoryTimelineModel::eventAccepted(event) &&
- event.bindingType == QmlDebug::AnimationFrame;
+ event.detailType== QmlDebug::AnimationFrame;
}
void PaintEventsModelProxy::loadData()
@@ -103,7 +103,7 @@ void PaintEventsModelProxy::loadData()
foreach (const QmlProfilerDataModel::QmlEventData &event, referenceList) {
if (!eventAccepted(event)) {
- if (event.eventType == QmlDebug::Painting)
+ if (event.rangeType == QmlDebug::Painting)
d->seenForeignPaintEvent = true;
continue;
}
diff --git a/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.cpp b/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.cpp
index c945b7155c..5fe7288ec6 100644
--- a/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.cpp
@@ -92,7 +92,7 @@ void BasicTimelineModel::clear()
void BasicTimelineModel::BasicTimelineModelPrivate::prepare()
{
categorySpan.clear();
- for (int i = 0; i < QmlDebug::MaximumQmlEventType; i++) {
+ for (int i = 0; i < QmlDebug::MaximumRangeType; i++) {
CategorySpan newCategory = {false, 1, 1, i};
categorySpan << newCategory;
}
@@ -100,11 +100,8 @@ void BasicTimelineModel::BasicTimelineModelPrivate::prepare()
bool BasicTimelineModel::eventAccepted(const QmlProfilerDataModel::QmlEventData &event) const
{
- // only accept Qt4.x Painting events
- if (event.eventType == QmlDebug::Painting)
- return (event.bindingType == QmlDebug::QPainterEvent);
-
- return (event.eventType <= QmlDebug::Javascript);
+ // Accept all range types. Qt5 paint events aren't ranges
+ return (event.rangeType != QmlDebug::MaximumRangeType);
}
void BasicTimelineModel::loadData()
@@ -126,7 +123,7 @@ void BasicTimelineModel::loadData()
foreach (const QmlProfilerDataModel::QmlEventData &event, eventList) {
if (!eventAccepted(event))
continue;
- if (event.eventType == QmlDebug::Painting)
+ if (event.rangeType == QmlDebug::Painting)
d->seenPaintEvent = true;
QString eventHash = QmlProfilerDataModel::getHashString(event);
@@ -139,7 +136,7 @@ void BasicTimelineModel::loadData()
event.displayName,
event.data.join(QLatin1String(" ")),
event.location,
- (QmlDebug::QmlEventType)event.eventType,
+ event.rangeType,
lastEventId++ // event id
};
d->eventDict << rangeEventData;
@@ -190,7 +187,7 @@ void BasicTimelineModel::BasicTimelineModelPrivate::computeNestingContracted()
QList<int> nestingLevels;
QList< QHash<int, qint64> > endtimesPerNestingLevel;
- for (i = 0; i < QmlDebug::MaximumQmlEventType; i++) {
+ for (i = 0; i < QmlDebug::MaximumRangeType; i++) {
nestingLevels << QmlDebug::Constants::QML_MIN_LEVEL;
QHash<int, qint64> dummyHash;
dummyHash[QmlDebug::Constants::QML_MIN_LEVEL] = 0;
@@ -247,8 +244,8 @@ void BasicTimelineModel::BasicTimelineModelPrivate::findBindingLoops()
BasicTimelineModel::QmlRangeEventData data = eventDict.at(event->eventId);
- static QVector<QmlDebug::QmlEventType> acceptedTypes =
- QVector<QmlDebug::QmlEventType>() << QmlDebug::Binding << QmlDebug::HandlingSignal;
+ static QVector<QmlDebug::RangeType> acceptedTypes =
+ QVector<QmlDebug::RangeType>() << QmlDebug::Binding << QmlDebug::HandlingSignal;
if (!acceptedTypes.contains(data.eventType))
continue;
diff --git a/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.h b/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.h
index b79172502f..a01797f871 100644
--- a/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.h
+++ b/src/plugins/qmlprofiler/qmlprofilertimelinemodelproxy.h
@@ -53,7 +53,7 @@ public:
QString displayName;
QString details;
QmlDebug::QmlEventLocation location;
- QmlDebug::QmlEventType eventType;
+ QmlDebug::RangeType eventType;
int eventId; // separate
};
diff --git a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
index f058708ffb..b36ac78880 100644
--- a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
@@ -43,17 +43,33 @@ using namespace QmlDebug;
const char PROFILER_FILE_VERSION[] = "1.02";
-const char TYPE_PAINTING_STR[] = "Painting";
-const char TYPE_COMPILING_STR[] = "Compiling";
-const char TYPE_CREATING_STR[] = "Creating";
-const char TYPE_BINDING_STR[] = "Binding";
-const char TYPE_HANDLINGSIGNAL_STR[] = "HandlingSignal";
-const char TYPE_PIXMAPCACHE_STR[] = "PixmapCache";
-const char TYPE_SCENEGRAPH_STR[] = "SceneGraph";
+static const char *RANGE_TYPE_STRINGS[] = {
+ "Painting",
+ "Compiling",
+ "Creating",
+ "Binding",
+ "HandlingSignal",
+ "Javascript"
+};
+
+Q_STATIC_ASSERT(sizeof(RANGE_TYPE_STRINGS) == QmlDebug::MaximumRangeType * sizeof(const char *));
+
+static const char *MESSAGE_STRINGS[] = {
+ // So far only pixmap and scenegraph are used. The others are padding.
+ "Event",
+ "RangeStart",
+ "RangeData",
+ "RangeLocation",
+ "RangeEnd",
+ "Complete",
+ "PixmapCache",
+ "SceneGraph"
+};
+
+Q_STATIC_ASSERT(sizeof(MESSAGE_STRINGS) == QmlDebug::MaximumMessage * sizeof(const char *));
#define _(X) QLatin1String(X)
-
//
// "be strict in your output but tolerant in your inputs"
//
@@ -61,59 +77,44 @@ const char TYPE_SCENEGRAPH_STR[] = "SceneGraph";
namespace QmlProfiler {
namespace Internal {
-static QmlEventType qmlEventTypeAsEnum(const QString &typeString)
+static QPair<QmlDebug::Message, QmlDebug::RangeType> qmlTypeAsEnum(const QString &typeString)
{
- if (typeString == _(TYPE_PAINTING_STR)) {
- return Painting;
- } else if (typeString == _(TYPE_COMPILING_STR)) {
- return Compiling;
- } else if (typeString == _(TYPE_CREATING_STR)) {
- return Creating;
- } else if (typeString == _(TYPE_BINDING_STR)) {
- return Binding;
- } else if (typeString == _(TYPE_HANDLINGSIGNAL_STR)) {
- return HandlingSignal;
- } else if (typeString == _(TYPE_PIXMAPCACHE_STR)) {
- return PixmapCacheEvent;
- } else if (typeString == _(TYPE_SCENEGRAPH_STR)) {
- return SceneGraphFrameEvent;
- } else {
+ QPair<QmlDebug::Message, QmlDebug::RangeType> ret(QmlDebug::MaximumMessage,
+ QmlDebug::MaximumRangeType);
+
+ for (int i = 0; i < QmlDebug::MaximumMessage; ++i) {
+ if (typeString == _(MESSAGE_STRINGS[i])) {
+ ret.first = static_cast<QmlDebug::Message>(i);
+ break;
+ }
+ }
+
+ for (int i = 0; i < QmlDebug::MaximumRangeType; ++i) {
+ if (typeString == _(RANGE_TYPE_STRINGS[i])) {
+ ret.second = static_cast<QmlDebug::RangeType>(i);
+ break;
+ }
+ }
+
+ if (ret.first == QmlDebug::MaximumMessage && ret.second == QmlDebug::MaximumRangeType) {
bool isNumber = false;
int type = typeString.toUInt(&isNumber);
- if (isNumber)
- return (QmlEventType)type;
- else
- return MaximumQmlEventType;
+ if (isNumber && type < QmlDebug::MaximumRangeType)
+ // Allow saving ranges as numbers, but not messages.
+ ret.second = static_cast<QmlDebug::RangeType>(type);
}
+
+ return ret;
}
-static QString qmlEventTypeAsString(QmlEventType typeEnum)
+static QString qmlTypeAsString(QmlDebug::Message message, QmlDebug::RangeType rangeType)
{
- switch (typeEnum) {
- case Painting:
- return _(TYPE_PAINTING_STR);
- break;
- case Compiling:
- return _(TYPE_COMPILING_STR);
- break;
- case Creating:
- return _(TYPE_CREATING_STR);
- break;
- case Binding:
- return _(TYPE_BINDING_STR);
- break;
- case HandlingSignal:
- return _(TYPE_HANDLINGSIGNAL_STR);
- break;
- case PixmapCacheEvent:
- return _(TYPE_PIXMAPCACHE_STR);
- break;
- case SceneGraphFrameEvent:
- return _(TYPE_SCENEGRAPH_STR);
- break;
- default:
- return QString::number((int)typeEnum);
- }
+ if (rangeType < QmlDebug::MaximumRangeType)
+ return _(RANGE_TYPE_STRINGS[rangeType]);
+ else if (message != QmlDebug::MaximumMessage)
+ return _(MESSAGE_STRINGS[message]);
+ else
+ return QString::number((int)rangeType);
}
@@ -195,6 +196,7 @@ void QmlProfilerFileReader::loadEventData(QXmlStreamReader &stream)
QString(), // displayname
QString(), // filename
QString(), // details
+ MaximumMessage,
Painting, // type
QmlBinding, // bindingType, set for backwards compatibility
0, // line
@@ -233,7 +235,9 @@ void QmlProfilerFileReader::loadEventData(QXmlStreamReader &stream)
}
if (elementName == _("type")) {
- event.type = qmlEventTypeAsEnum(readData);
+ QPair<QmlDebug::Message, QmlDebug::RangeType> enums = qmlTypeAsEnum(readData);
+ event.message = enums.first;
+ event.rangeType = enums.second;
break;
}
@@ -257,11 +261,23 @@ void QmlProfilerFileReader::loadEventData(QXmlStreamReader &stream)
break;
}
+ if (elementName == _("animationFrame")) {
+ event.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 (event.detailType == 4) {
+ event.message = Event;
+ event.rangeType = MaximumRangeType;
+ event.detailType = AnimationFrame;
+ }
+ }
+
if (elementName == _("bindingType") ||
- elementName == _("animationFrame") ||
elementName == _("cacheEventType") ||
elementName == _("sgEventType")) {
- event.bindingType = readData.toInt();
+ event.detailType = readData.toInt();
break;
}
@@ -370,10 +386,11 @@ void QmlProfilerFileReader::processQmlEvents()
QmlEvent &event = m_qmlEvents[eventIndex];
- emit rangedEvent(event.type, event.bindingType, range.startTime, range.duration,
- QStringList(event.details),
+ emit rangedEvent(event.message, event.rangeType, event.detailType, range.startTime,
+ range.duration, QStringList(event.details),
QmlEventLocation(event.filename, event.line, event.column),
- range.numericData1,range.numericData2, range.numericData3, range.numericData4, range.numericData5);
+ range.numericData1,range.numericData2, range.numericData3,
+ range.numericData4, range.numericData5);
}
}
@@ -385,7 +402,9 @@ QmlProfilerFileWriter::QmlProfilerFileWriter(QObject *parent) :
m_measuredTime(0),
m_v8Model(0)
{
- m_acceptedTypes << QmlDebug::Compiling << QmlDebug::Creating << QmlDebug::Binding << QmlDebug::HandlingSignal;
+ m_acceptedRangeTypes << QmlDebug::Compiling << QmlDebug::Creating << QmlDebug::Binding
+ << QmlDebug::HandlingSignal << QmlDebug::Javascript;
+ m_acceptedMessages << QmlDebug::SceneGraphFrame << QmlDebug::PixmapCacheEvent;
}
void QmlProfilerFileWriter::setTraceTime(qint64 startTime, qint64 endTime, qint64 measuredTime)
@@ -405,14 +424,16 @@ void QmlProfilerFileWriter::setQmlEvents(const QVector<QmlProfilerDataModel::Qml
foreach (const QmlProfilerDataModel::QmlEventData &event, events) {
const QString hashStr = QmlProfilerDataModel::getHashString(event);
if (!m_qmlEvents.contains(hashStr)) {
- QmlEvent e = { event.displayName,
- event.location.filename,
- event.data.join(_("")),
- static_cast<QmlDebug::QmlEventType>(event.eventType),
- event.bindingType,
- event.location.line,
- event.location.column
- };
+ QmlEvent e = {
+ event.displayName,
+ event.location.filename,
+ event.data.join(_("")),
+ event.message,
+ event.rangeType,
+ event.detailType,
+ event.location.line,
+ event.location.column
+ };
m_qmlEvents.insert(hashStr, e);
}
@@ -451,21 +472,21 @@ void QmlProfilerFileWriter::save(QIODevice *device)
stream.writeStartElement(_("event"));
stream.writeAttribute(_("index"), keys[eventIter.key()]);
stream.writeTextElement(_("displayname"), event.displayName);
- stream.writeTextElement(_("type"), qmlEventTypeAsString(event.type));
+ stream.writeTextElement(_("type"), qmlTypeAsString(event.message, event.rangeType));
if (!event.filename.isEmpty()) {
stream.writeTextElement(_("filename"), event.filename);
stream.writeTextElement(_("line"), QString::number(event.line));
stream.writeTextElement(_("column"), QString::number(event.column));
}
stream.writeTextElement(_("details"), event.details);
- if (event.type == Binding)
- stream.writeTextElement(_("bindingType"), QString::number(event.bindingType));
- if (event.type == Painting && event.bindingType == AnimationFrame)
- stream.writeTextElement(_("animationFrame"), QString::number(event.bindingType));
- if (event.type == PixmapCacheEvent)
- stream.writeTextElement(_("cacheEventType"), QString::number(event.bindingType));
- if (event.type == SceneGraphFrameEvent)
- stream.writeTextElement(_("sgEventType"), QString::number(event.bindingType));
+ if (event.rangeType == Binding)
+ stream.writeTextElement(_("bindingType"), QString::number(event.detailType));
+ if (event.message == Event && event.detailType == AnimationFrame)
+ stream.writeTextElement(_("animationFrame"), QString::number(event.detailType));
+ if (event.message == PixmapCacheEvent)
+ stream.writeTextElement(_("cacheEventType"), QString::number(event.detailType));
+ if (event.message == SceneGraphFrame)
+ stream.writeTextElement(_("sgEventType"), QString::number(event.detailType));
stream.writeEndElement();
}
stream.writeEndElement(); // eventData
@@ -486,27 +507,25 @@ void QmlProfilerFileWriter::save(QIODevice *device)
QmlEvent event = m_qmlEvents.value(eventHash);
// special: animation event
- if (event.type == QmlDebug::Painting && event.bindingType == QmlDebug::AnimationFrame) {
-
+ if (event.message == QmlDebug::Event && event.detailType == QmlDebug::AnimationFrame) {
stream.writeAttribute(_("framerate"), QString::number(range.numericData1));
stream.writeAttribute(_("animationcount"), QString::number(range.numericData2));
stream.writeAttribute(_("thread"), QString::number(range.numericData3));
}
// special: pixmap cache event
- if (event.type == QmlDebug::PixmapCacheEvent) {
- // pixmap image size
- if (event.bindingType == 0) {
+ if (event.message == QmlDebug::PixmapCacheEvent) {
+ if (event.detailType == PixmapSizeKnown) {
stream.writeAttribute(_("width"), QString::number(range.numericData1));
stream.writeAttribute(_("height"), QString::number(range.numericData2));
}
- // reference count (1) / cache size changed (2)
- if (event.bindingType == 1 || event.bindingType == 2)
+ if (event.detailType == PixmapReferenceCountChanged ||
+ event.detailType == PixmapCacheCountChanged)
stream.writeAttribute(_("refCount"), QString::number(range.numericData3));
}
- if (event.type == QmlDebug::SceneGraphFrameEvent) {
+ if (event.message == QmlDebug::SceneGraphFrame) {
// special: scenegraph frame events
if (range.numericData1 > 0)
stream.writeAttribute(_("timing1"), QString::number(range.numericData1));
@@ -542,7 +561,8 @@ void QmlProfilerFileWriter::calculateMeasuredTime(const QVector<QmlProfilerDataM
foreach (const QmlProfilerDataModel::QmlEventData &event, events) {
// whitelist
- if (!m_acceptedTypes.contains(event.eventType))
+ if (!m_acceptedRangeTypes.contains(event.rangeType) &&
+ !m_acceptedMessages.contains(event.message))
continue;
// level computation
diff --git a/src/plugins/qmlprofiler/qmlprofilertracefile.h b/src/plugins/qmlprofiler/qmlprofilertracefile.h
index 0ecf73bfc3..b0f81ed5d2 100644
--- a/src/plugins/qmlprofiler/qmlprofilertracefile.h
+++ b/src/plugins/qmlprofiler/qmlprofilertracefile.h
@@ -52,8 +52,9 @@ struct QmlEvent {
QString displayName;
QString filename;
QString details;
- QmlDebug::QmlEventType type;
- int bindingType;
+ QmlDebug::Message message;
+ QmlDebug::RangeType rangeType;
+ int detailType;
int line;
int column;
};
@@ -85,8 +86,9 @@ signals:
void traceStartTime(qint64 traceStartTime);
void traceEndTime(qint64 traceStartTime);
- void rangedEvent(int type, int bindingType, qint64 startTime, qint64 length,
- const QStringList &data, const QmlDebug::QmlEventLocation &location,
+ void rangedEvent(QmlDebug::Message message, QmlDebug::RangeType rangeType, int detailType,
+ qint64 startTime, qint64 length, const QStringList &data,
+ const QmlDebug::QmlEventLocation &location,
qint64 param1, qint64 param2, qint64 param3, qint64 param4, qint64 param5);
void error(const QString &error);
@@ -124,7 +126,8 @@ private:
QV8ProfilerDataModel *m_v8Model;
QHash<QString,QmlEvent> m_qmlEvents;
QVector<QPair<Range, QString> > m_ranges;
- QVector <int> m_acceptedTypes;
+ QVector<QmlDebug::RangeType> m_acceptedRangeTypes;
+ QVector<QmlDebug::Message> m_acceptedMessages;
};
diff --git a/src/plugins/qmlprofiler/singlecategorytimelinemodel.cpp b/src/plugins/qmlprofiler/singlecategorytimelinemodel.cpp
index 61b1da3cc0..58139d8f15 100644
--- a/src/plugins/qmlprofiler/singlecategorytimelinemodel.cpp
+++ b/src/plugins/qmlprofiler/singlecategorytimelinemodel.cpp
@@ -33,14 +33,15 @@
namespace QmlProfiler {
SingleCategoryTimelineModel::SingleCategoryTimelineModel(SingleCategoryTimelineModelPrivate *dd,
- const QString &name, const QString &label, QmlDebug::QmlEventType eventType,
- QObject *parent) :
+ const QString &name, const QString &label, QmlDebug::Message message,
+ QmlDebug::RangeType rangeType, QObject *parent) :
AbstractTimelineModel(dd, name, parent)
{
Q_D(SingleCategoryTimelineModel);
d->expanded = false;
d->label = label;
- d->eventType = eventType;
+ d->message = message;
+ d->rangeType = rangeType;
}
/////////////////// QML interface
@@ -48,7 +49,7 @@ SingleCategoryTimelineModel::SingleCategoryTimelineModel(SingleCategoryTimelineM
bool SingleCategoryTimelineModel::eventAccepted(const QmlProfilerDataModel::QmlEventData &event) const
{
Q_D(const SingleCategoryTimelineModel);
- return (event.eventType == d->eventType);
+ return (event.rangeType == d->rangeType && event.message == d->message);
}
bool SingleCategoryTimelineModel::expanded(int categoryIndex) const
@@ -84,7 +85,7 @@ int SingleCategoryTimelineModel::getEventType(int index) const
{
Q_D(const SingleCategoryTimelineModel);
Q_UNUSED(index);
- return (int)d->eventType;
+ return (d->message << 8) + d->rangeType;
}
int SingleCategoryTimelineModel::getEventCategory(int index) const
diff --git a/src/plugins/qmlprofiler/singlecategorytimelinemodel.h b/src/plugins/qmlprofiler/singlecategorytimelinemodel.h
index 005f7c2a6d..1e3d3290fc 100644
--- a/src/plugins/qmlprofiler/singlecategorytimelinemodel.h
+++ b/src/plugins/qmlprofiler/singlecategorytimelinemodel.h
@@ -52,8 +52,8 @@ public:
protected:
class SingleCategoryTimelineModelPrivate;
SingleCategoryTimelineModel(SingleCategoryTimelineModelPrivate *dd, const QString &name,
- const QString &label, QmlDebug::QmlEventType eventType,
- QObject *parent);
+ const QString &label, QmlDebug::Message message,
+ QmlDebug::RangeType rangeType, QObject *parent);
Q_DECLARE_PRIVATE(SingleCategoryTimelineModel)
};
diff --git a/src/plugins/qmlprofiler/singlecategorytimelinemodel_p.h b/src/plugins/qmlprofiler/singlecategorytimelinemodel_p.h
index b0045c2352..857cd31214 100644
--- a/src/plugins/qmlprofiler/singlecategorytimelinemodel_p.h
+++ b/src/plugins/qmlprofiler/singlecategorytimelinemodel_p.h
@@ -40,7 +40,8 @@ class SingleCategoryTimelineModel::SingleCategoryTimelineModelPrivate :
public:
bool expanded;
QString label;
- QmlDebug::QmlEventType eventType;
+ QmlDebug::Message message;
+ QmlDebug::RangeType rangeType;
};
}