Declarative: Fix compiler warnings.
[profile/ivi/qtdeclarative.git] / src / declarative / debugger / qdeclarativedebugtrace.cpp
index 738be9d..aed7866 100644 (file)
 #include <QtCore/qdatastream.h>
 #include <QtCore/qurl.h>
 #include <QtCore/qtimer.h>
+#include <QtCore/qthread.h>
+#include <QtCore/qcoreapplication.h>
+
+// this contains QUnifiedTimer
+#include <private/qabstractanimation_p.h>
+
+QT_BEGIN_NAMESPACE
 
 Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance);
 
 // convert to a QByteArray that can be sent to the debug client
 // use of QDataStream can skew results if m_deferredSend == false
-//     (see tst_qperformancetimer::trace() benchmark)
+//     (see tst_qdeclarativedebugtrace::trace() benchmark)
 QByteArray QDeclarativeDebugData::toByteArray() const
 {
     QByteArray data;
@@ -60,31 +67,56 @@ 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;
 }
 
 QDeclarativeDebugTrace::QDeclarativeDebugTrace()
-: QDeclarativeDebugService(QLatin1String("CanvasFrameRate")),
-  m_enabled(false), m_deferredSend(true)
+    : QDeclarativeDebugService(QLatin1String("CanvasFrameRate")),
+      m_enabled(false), m_deferredSend(true), m_messageReceived(false)
 {
     m_timer.start();
+    if (status() == Enabled) {
+        // wait for first message indicating whether to trace or not
+        while (!m_messageReceived)
+            waitForMessage();
+
+        QUnifiedTimer::instance()->registerProfilerCallback( &animationFrame );
+    }
+}
+
+QDeclarativeDebugTrace::~QDeclarativeDebugTrace()
+{
+}
+
+void QDeclarativeDebugTrace::addEngine(QDeclarativeEngine *)
+{
+    // just make sure that the service is properly registered
+    traceInstance();
+}
+
+void QDeclarativeDebugTrace::removeEngine(QDeclarativeEngine *)
+{
+
 }
 
 void QDeclarativeDebugTrace::addEvent(EventType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled()) 
+    if (QDeclarativeDebugService::isDebuggingEnabled())
         traceInstance()->addEventImpl(t);
 }
 
 void QDeclarativeDebugTrace::startRange(RangeType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled()) 
+    if (QDeclarativeDebugService::isDebuggingEnabled())
         traceInstance()->startRangeImpl(t);
 }
 
 void QDeclarativeDebugTrace::rangeData(RangeType t, const QString &data)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled()) 
+    if (QDeclarativeDebugService::isDebuggingEnabled())
         traceInstance()->rangeDataImpl(t, data);
 }
 
@@ -108,16 +140,22 @@ void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QUrl &fileName, in
 
 void QDeclarativeDebugTrace::endRange(RangeType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled()) 
+    if (QDeclarativeDebugService::isDebuggingEnabled())
         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.elapsed(), (int)Event, (int)event, QString(), -1};
+    QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, 0, 0};
     processMessage(ed);
 }
 
@@ -126,7 +164,7 @@ void QDeclarativeDebugTrace::startRangeImpl(RangeType range)
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (int)RangeStart, (int)range, QString(), -1};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, 0, 0};
     processMessage(rd);
 }
 
@@ -135,7 +173,7 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QString &rData
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (int)RangeData, (int)range, rData, -1};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, 0, 0};
     processMessage(rd);
 }
 
@@ -144,7 +182,7 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &rData)
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (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);
 }
 
@@ -153,7 +191,7 @@ void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &f
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (int)RangeLocation, (int)range, fileName, line};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, 0, 0};
     processMessage(rd);
 }
 
@@ -162,7 +200,7 @@ void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &file
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (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);
 }
 
@@ -171,17 +209,34 @@ void QDeclarativeDebugTrace::endRangeImpl(RangeType range)
     if (status() != Enabled || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.elapsed(), (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)
 */
 void QDeclarativeDebugTrace::processMessage(const QDeclarativeDebugData &message)
 {
-    if (m_deferredSend)
+    QMutexLocker locker(&m_mutex);
+    if (m_deferredSend
+            || (QThread::currentThread() != QCoreApplication::instance()->thread()))
         m_data.append(message);
     else
         sendMessage(message.toByteArray());
@@ -193,6 +248,7 @@ void QDeclarativeDebugTrace::processMessage(const QDeclarativeDebugData &message
 void QDeclarativeDebugTrace::sendMessages()
 {
     if (m_deferredSend) {
+        QMutexLocker locker(&m_mutex);
         //### this is a suboptimal way to send batched messages
         for (int i = 0; i < m_data.count(); ++i)
             sendMessage(m_data.at(i).toByteArray());
@@ -211,8 +267,21 @@ void QDeclarativeDebugTrace::messageReceived(const QByteArray &message)
     QByteArray rwData = message;
     QDataStream stream(&rwData, QIODevice::ReadOnly);
 
-    stream >> m_enabled;
+    bool enabled;
+    stream >> enabled;
+
+    m_messageReceived = true;
 
-    if (!m_enabled)
-        sendMessages();
+    if (m_enabled != enabled) {
+        if (enabled) {
+            m_enabled = true;
+            addEvent(StartTrace);
+        } else {
+            addEvent(EndTrace);
+            m_enabled = false;
+            sendMessages();
+        }
+    }
 }
+
+QT_END_NAMESPACE