Declarative: Fix compiler warnings.
[profile/ivi/qtdeclarative.git] / src / declarative / debugger / qdeclarativedebugtrace.cpp
index befc3ea..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
 
@@ -62,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;
 }
 
@@ -74,9 +82,26 @@ QDeclarativeDebugTrace::QDeclarativeDebugTrace()
         // 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())
@@ -119,12 +144,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);
 }
 
@@ -133,7 +164,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);
 }
 
@@ -142,7 +173,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);
 }
 
@@ -151,7 +182,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);
 }
 
@@ -160,7 +191,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);
 }
 
@@ -169,7 +200,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);
 }
 
@@ -178,17 +209,34 @@ 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)
 */
 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());
@@ -200,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());
@@ -218,12 +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