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)
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:
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);
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);
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()
#include <private/qdeclarativeexpression_p.h>
#include <private/qobject_p.h>
#include <private/qdeclarativetrace_p.h>
+#include <private/qdeclarativedebugtrace_p.h>
QT_BEGIN_NAMESPACE
return;
if (!updating) {
+ QDeclarativeBindingProfiler prof(parent->url.toString(), line, column);
updating = true;
QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(context->engine);