Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / declarative / debugger / qdeclarativedebugtrace.cpp
index b497f6a..ce94ed3 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the QtDeclarative module of the Qt Toolkit.
 **
@@ -35,6 +34,7 @@
 **
 **
 **
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
@@ -52,7 +52,7 @@
 
 QT_BEGIN_NAMESPACE
 
-Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance);
+Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance)
 
 // convert to a QByteArray that can be sent to the debug client
 // use of QDataStream can skew results
@@ -66,7 +66,7 @@ QByteArray QDeclarativeDebugData::toByteArray() const
     if (messageType == (int)QDeclarativeDebugTrace::RangeData)
         ds << detailData;
     if (messageType == (int)QDeclarativeDebugTrace::RangeLocation)
-        ds << detailData << line;
+        ds << detailData << line << column;
     if (messageType == (int)QDeclarativeDebugTrace::Event &&
             detailType == (int)QDeclarativeDebugTrace::AnimationFrame)
         ds << framerate << animationcount;
@@ -74,11 +74,12 @@ QByteArray QDeclarativeDebugData::toByteArray() const
 }
 
 QDeclarativeDebugTrace::QDeclarativeDebugTrace()
-    : QDeclarativeDebugService(QLatin1String("CanvasFrameRate")),
+    : QDeclarativeDebugService(QLatin1String("CanvasFrameRate"), 1),
       m_enabled(false), m_messageReceived(false)
 {
     m_timer.start();
-    if (status() == Enabled) {
+
+    if (registerService() == Enabled) {
         // wait for first message indicating whether to trace or not
         while (!m_messageReceived)
             waitForMessage();
@@ -91,131 +92,156 @@ QDeclarativeDebugTrace::~QDeclarativeDebugTrace()
 {
 }
 
-void QDeclarativeDebugTrace::addEngine(QDeclarativeEngine *)
+void QDeclarativeDebugTrace::initialize()
 {
     // just make sure that the service is properly registered
     traceInstance();
 }
 
-void QDeclarativeDebugTrace::removeEngine(QDeclarativeEngine *)
+bool QDeclarativeDebugTrace::startProfiling()
 {
+    return traceInstance()->startProfilingImpl();
+}
 
+bool QDeclarativeDebugTrace::stopProfiling()
+{
+    return traceInstance()->stopProfilingImpl();
 }
 
 void QDeclarativeDebugTrace::addEvent(EventType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->addEventImpl(t);
+    traceInstance()->addEventImpl(t);
 }
 
 void QDeclarativeDebugTrace::startRange(RangeType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->startRangeImpl(t);
+    traceInstance()->startRangeImpl(t);
 }
 
 void QDeclarativeDebugTrace::rangeData(RangeType t, const QString &data)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->rangeDataImpl(t, data);
+    traceInstance()->rangeDataImpl(t, data);
 }
 
 void QDeclarativeDebugTrace::rangeData(RangeType t, const QUrl &data)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->rangeDataImpl(t, data);
+    traceInstance()->rangeDataImpl(t, data);
 }
 
-void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QString &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QString &fileName, int line, int column)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->rangeLocationImpl(t, fileName, line);
+    traceInstance()->rangeLocationImpl(t, fileName, line, column);
 }
 
-void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QUrl &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QUrl &fileName, int line, int column)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->rangeLocationImpl(t, fileName, line);
+    traceInstance()->rangeLocationImpl(t, fileName, line, column);
 }
 
 void QDeclarativeDebugTrace::endRange(RangeType t)
 {
-    if (QDeclarativeDebugService::isDebuggingEnabled())
-        traceInstance()->endRangeImpl(t);
+    traceInstance()->endRangeImpl(t);
 }
 
 void QDeclarativeDebugTrace::animationFrame(qint64 delta)
 {
-    Q_ASSERT(QDeclarativeDebugService::isDebuggingEnabled());
     traceInstance()->animationFrameImpl(delta);
 }
 
+void QDeclarativeDebugTrace::sendProfilingData()
+{
+    traceInstance()->sendMessages();
+}
+
+bool QDeclarativeDebugTrace::startProfilingImpl()
+{
+    bool success = false;
+    if (!profilingEnabled()) {
+        setProfilingEnabled(true);
+        addEventImpl(StartTrace);
+        success = true;
+    }
+    return success;
+}
+
+bool QDeclarativeDebugTrace::stopProfilingImpl()
+{
+    bool success = false;
+    if (profilingEnabled()) {
+        addEventImpl(EndTrace);
+        setProfilingEnabled(false);
+        success = true;
+    }
+    return success;
+}
+
 void QDeclarativeDebugTrace::addEventImpl(EventType event)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, 0, 0};
+    QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, -1, 0, 0};
     processMessage(ed);
 }
 
 void QDeclarativeDebugTrace::startRangeImpl(RangeType range)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, -1, 0, 0};
     processMessage(rd);
 }
 
 void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QString &rData)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, -1, 0, 0};
     processMessage(rd);
 }
 
 void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &rData)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, -1, 0, 0};
     processMessage(rd);
 }
 
-void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &fileName, int line, int column)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, column, 0, 0};
     processMessage(rd);
 }
 
-void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &fileName, int line, int column)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, column, 0, 0};
     processMessage(rd);
 }
 
 void QDeclarativeDebugTrace::endRangeImpl(RangeType range)
 {
-    if (status() != Enabled || !m_enabled)
+    if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, -1, 0, 0};
     processMessage(rd);
 }
 
 void QDeclarativeDebugTrace::animationFrameImpl(qint64 delta)
 {
-    if (status() != Enabled || !m_enabled)
+    Q_ASSERT(QDeclarativeDebugService::isDebuggingEnabled());
+    if (!m_enabled)
         return;
 
     int animCount = QUnifiedTimer::instance()->runningAnimationCount();
@@ -223,7 +249,7 @@ void QDeclarativeDebugTrace::animationFrameImpl(qint64 delta)
     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};
+        QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, QString(), -1, -1, fps, animCount};
         processMessage(ed);
     }
 }
@@ -238,15 +264,26 @@ void QDeclarativeDebugTrace::processMessage(const QDeclarativeDebugData &message
     m_data.append(message);
 }
 
+bool QDeclarativeDebugTrace::profilingEnabled()
+{
+    return m_enabled;
+}
+
+void QDeclarativeDebugTrace::setProfilingEnabled(bool enable)
+{
+    m_enabled = enable;
+}
+
 /*
     Send the messages queued up by processMessage
 */
 void QDeclarativeDebugTrace::sendMessages()
 {
     QMutexLocker locker(&m_mutex);
-    //### this is a suboptimal way to send batched messages
+    QList<QByteArray> messages;
     for (int i = 0; i < m_data.count(); ++i)
-        sendMessage(m_data.at(i).toByteArray());
+        messages << m_data.at(i).toByteArray();
+    QDeclarativeDebugService::sendMessages(messages);
     m_data.clear();
 
     //indicate completion
@@ -266,15 +303,11 @@ void QDeclarativeDebugTrace::messageReceived(const QByteArray &message)
 
     m_messageReceived = true;
 
-    if (m_enabled != enabled) {
-        if (enabled) {
-            m_enabled = true;
-            addEventImpl(StartTrace);
-        } else {
-            addEventImpl(EndTrace);
-            m_enabled = false;
+    if (enabled) {
+        startProfilingImpl();
+    } else {
+        if (stopProfilingImpl())
             sendMessages();
-        }
     }
 }