QmlProfiler: profiling compiled v8 bindings
authorChristiaan Janssen <christiaan.janssen@nokia.com>
Fri, 13 Jan 2012 14:41:59 +0000 (15:41 +0100)
committerQt by Nokia <qt-info@nokia.com>
Wed, 1 Feb 2012 06:02:30 +0000 (07:02 +0100)
Change-Id: I8c61b3805244595de6e1c7fbed7ed23440fe0a82
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
src/declarative/debugger/qdeclarativedebugtrace.cpp
src/declarative/debugger/qdeclarativedebugtrace_p.h
src/declarative/qml/qdeclarativebinding.cpp
src/declarative/qml/v4/qv4bindings.cpp
src/declarative/qml/v8/qv8bindings.cpp

index ce94ed3..dc4a919 100644 (file)
@@ -54,6 +54,22 @@ QT_BEGIN_NAMESPACE
 
 Q_GLOBAL_STATIC(QDeclarativeDebugTrace, traceInstance)
 
+QDeclarativeBindingProfiler::QDeclarativeBindingProfiler(const QString &url, int line, int column)
+{
+    QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Binding);
+    QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding, url, line, column);
+}
+
+QDeclarativeBindingProfiler::~QDeclarativeBindingProfiler()
+{
+    QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Binding);
+}
+
+void QDeclarativeBindingProfiler::addDetail(const QString &details)
+{
+    QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::Binding, details);
+}
+
 // convert to a QByteArray that can be sent to the debug client
 // use of QDataStream can skew results
 //     (see tst_qdeclarativedebugtrace::trace() benchmark)
index aa7a7bf..e0d04aa 100644 (file)
@@ -83,6 +83,14 @@ Q_DECLARE_TYPEINFO(QDeclarativeDebugData, Q_MOVABLE_TYPE);
 class QUrl;
 class QDeclarativeEngine;
 
+// RAII
+class Q_AUTOTEST_EXPORT QDeclarativeBindingProfiler {
+public:
+    QDeclarativeBindingProfiler(const QString &url, int line, int column);
+    ~QDeclarativeBindingProfiler();
+    void addDetail(const QString &details);
+};
+
 class Q_DECLARATIVE_EXPORT QDeclarativeDebugTrace : public QDeclarativeDebugService
 {
 public:
index 910a73c..9c31774 100644 (file)
@@ -332,22 +332,6 @@ QDeclarativeBinding::EvaluateFlags QDeclarativeBinding::evaluateFlags() const
     return d->requiresThisObject()?RequiresThisObject:None;
 }
 
-
-class QDeclarativeBindingProfiler {
-public:
-    QDeclarativeBindingProfiler(QDeclarativeBinding *bind)
-    {
-        QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Binding);
-        QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::Binding, bind->expression());
-        QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding, bind->sourceFile(), bind->lineNumber(), bind->columnNumber());
-    }
-
-    ~QDeclarativeBindingProfiler()
-    {
-        QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Binding);
-    }
-};
-
 void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags)
 {
     Q_D(QDeclarativeBinding);
@@ -361,7 +345,8 @@ void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags)
     trace.addDetail("Column", d->columnNumber);
 
     if (!d->updating) {
-        QDeclarativeBindingProfiler prof(this);
+        QDeclarativeBindingProfiler prof(d->url, d->line, d->column);
+        prof.addDetail(expression());
         d->updating = true;
 
         QDeleteWatcher watcher(d);
index 5f71809..e646198 100644 (file)
@@ -242,12 +242,12 @@ void QV4Bindings::Binding::setEnabled(bool e, QDeclarativePropertyPrivate::Write
 
 void QV4Bindings::Binding::update(QDeclarativePropertyPrivate::WriteFlags flags)
 {
-    QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Binding);
+    QString bindingUrl;
     if (parent->context())
-        QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding,
-                                              parent->context()->url, line, column);
+        bindingUrl = parent->context()->url.toString();
+
+    QDeclarativeBindingProfiler prof(bindingUrl, line, column);
     parent->run(this, flags);
-    QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Binding);
 }
 
 void QV4Bindings::Binding::destroy()
index 86baa2d..112808c 100644 (file)
@@ -49,6 +49,7 @@
 #include <private/qdeclarativeexpression_p.h>
 #include <private/qobject_p.h>
 #include <private/qdeclarativetrace_p.h>
+#include <private/qdeclarativedebugtrace_p.h>
 
 QT_BEGIN_NAMESPACE
 
@@ -86,6 +87,7 @@ void QV8Bindings::Binding::update(QDeclarativePropertyPrivate::WriteFlags flags)
         return;
 
     if (!updating) {
+        QDeclarativeBindingProfiler prof(parent->url.toString(), line, column);
         updating = true;
         QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(context->engine);