aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristiaan Janssen <christiaan.janssen@nokia.com>2011-10-07 14:51:07 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-11 13:21:14 +0200
commit483b85ab599d5cee7614a84b6c73e275076bd52f (patch)
tree5b4cbf6692293c71138eafabe9f1c15f2fb4e720 /src
parentae271cbe7867f8eec9d8382e91d4c026453fb1de (diff)
QmlProfiler: tracking animations
Change-Id: I78fa5ed5385dfe1715c9d05a5e63eb7185870e61 Reviewed-on: http://codereview.qt-project.org/6254 Reviewed-by: Kai Koehne <kai.koehne@nokia.com> Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/debugger/qdeclarativedebugtrace.cpp50
-rw-r--r--src/declarative/debugger/qdeclarativedebugtrace_p.h6
2 files changed, 49 insertions, 7 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugtrace.cpp b/src/declarative/debugger/qdeclarativedebugtrace.cpp
index 76e4e23ff6..f9eb171b44 100644
--- a/src/declarative/debugger/qdeclarativedebugtrace.cpp
+++ b/src/declarative/debugger/qdeclarativedebugtrace.cpp
@@ -47,6 +47,9 @@
#include <QtCore/qthread.h>
#include <QtCore/qcoreapplication.h>
+// this contains QUnifiedTimer
+#include <private/qabstractanimation_p.h>
+
QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance);
@@ -64,6 +67,9 @@ QByteArray QDeclarativeDebugData::toByteArray() const
ds << detailData;
if (messageType == (int)QDeclarativeDebugTrace::RangeLocation)
ds << detailData << line;
+ if (messageType == (int)QDeclarativeDebugTrace::Event &&
+ detailType == (int)QDeclarativeDebugTrace::AnimationFrame)
+ ds << framerate << animationcount;
return data;
}
@@ -76,9 +82,17 @@ QDeclarativeDebugTrace::QDeclarativeDebugTrace()
// wait for first message indicating whether to trace or not
while (!m_messageReceived)
waitForMessage();
+
+ QUnifiedTimer::instance()->registerProfilerCallback( &animationFrame );
}
}
+QDeclarativeDebugTrace::~QDeclarativeDebugTrace()
+{
+ // unregister the callback
+ QUnifiedTimer::instance()->registerProfilerCallback( 0 );
+}
+
void QDeclarativeDebugTrace::addEngine(QDeclarativeEngine * /*engine*/)
{
// just make sure that the service is properly registered
@@ -87,6 +101,7 @@ void QDeclarativeDebugTrace::addEngine(QDeclarativeEngine * /*engine*/)
void QDeclarativeDebugTrace::removeEngine(QDeclarativeEngine */*engine*/)
{
+
}
void QDeclarativeDebugTrace::addEvent(EventType t)
@@ -131,12 +146,18 @@ void QDeclarativeDebugTrace::endRange(RangeType t)
traceInstance()->endRangeImpl(t);
}
+void QDeclarativeDebugTrace::animationFrame(qint64 delta)
+{
+ Q_ASSERT(QDeclarativeDebugService::isDebuggingEnabled());
+ traceInstance()->animationFrameImpl(delta);
+}
+
void QDeclarativeDebugTrace::addEventImpl(EventType event)
{
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1};
+ QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, 0, 0};
processMessage(ed);
}
@@ -145,7 +166,7 @@ void QDeclarativeDebugTrace::startRangeImpl(RangeType range)
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, 0, 0};
processMessage(rd);
}
@@ -154,7 +175,7 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QString &rData
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, 0, 0};
processMessage(rd);
}
@@ -163,7 +184,7 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &rData)
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, 0, 0};
processMessage(rd);
}
@@ -172,7 +193,7 @@ void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &f
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, 0, 0};
processMessage(rd);
}
@@ -181,7 +202,7 @@ void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &file
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, 0, 0};
processMessage(rd);
}
@@ -190,10 +211,25 @@ void QDeclarativeDebugTrace::endRangeImpl(RangeType range)
if (status() != Enabled || !m_enabled)
return;
- QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1};
+ QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, 0, 0};
processMessage(rd);
}
+void QDeclarativeDebugTrace::animationFrameImpl(qint64 delta)
+{
+ if (status() != Enabled || !m_enabled)
+ return;
+
+ int animCount = QUnifiedTimer::instance()->runningAnimationCount();
+
+ if (animCount > 0 && delta > 0) {
+ // trim fps to integer
+ int fps = 1000 / delta;
+ QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, QString(), -1, fps, animCount};
+ processMessage(ed);
+ }
+}
+
/*
Either send the message directly, or queue up
a list of messages to send later (via sendMessages)
diff --git a/src/declarative/debugger/qdeclarativedebugtrace_p.h b/src/declarative/debugger/qdeclarativedebugtrace_p.h
index 06c4311b2b..7633c21abc 100644
--- a/src/declarative/debugger/qdeclarativedebugtrace_p.h
+++ b/src/declarative/debugger/qdeclarativedebugtrace_p.h
@@ -70,6 +70,8 @@ struct QDeclarativeDebugData
//###
QString detailData; //used by RangeData and RangeLocation
int line; //used by RangeLocation
+ int framerate; //used by animation events
+ int animationcount; //used by animation events
QByteArray toByteArray() const;
};
@@ -95,6 +97,7 @@ public:
FramePaint,
Mouse,
Key,
+ AnimationFrame,
MaximumEventType
};
@@ -120,8 +123,10 @@ public:
static void rangeLocation(RangeType, const QString &, int);
static void rangeLocation(RangeType, const QUrl &, int);
static void endRange(RangeType);
+ static void animationFrame(qint64);
QDeclarativeDebugTrace();
+ ~QDeclarativeDebugTrace();
protected:
virtual void messageReceived(const QByteArray &);
private:
@@ -132,6 +137,7 @@ private:
void rangeLocationImpl(RangeType, const QString &, int);
void rangeLocationImpl(RangeType, const QUrl &, int);
void endRangeImpl(RangeType);
+ void animationFrameImpl(qint64);
void processMessage(const QDeclarativeDebugData &);
void sendMessages();
QElapsedTimer m_timer;