From: Christiaan Janssen Date: Fri, 7 Oct 2011 12:51:07 +0000 (+0200) Subject: QmlProfiler: tracking animations X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=483b85ab599d5cee7614a84b6c73e275076bd52f;p=konrad%2Fqtdeclarative.git QmlProfiler: tracking animations Change-Id: I78fa5ed5385dfe1715c9d05a5e63eb7185870e61 Reviewed-on: http://codereview.qt-project.org/6254 Reviewed-by: Kai Koehne Sanity-Review: Qt Sanity Bot --- diff --git a/src/declarative/debugger/qdeclarativedebugtrace.cpp b/src/declarative/debugger/qdeclarativedebugtrace.cpp index 76e4e23..f9eb171 100644 --- a/src/declarative/debugger/qdeclarativedebugtrace.cpp +++ b/src/declarative/debugger/qdeclarativedebugtrace.cpp @@ -47,6 +47,9 @@ #include #include +// this contains QUnifiedTimer +#include + 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 06c4311..7633c21 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;