aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativevme.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml/qdeclarativevme.cpp')
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp60
1 files changed, 56 insertions, 4 deletions
diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp
index aa31cad4f2..4f4e57c8d2 100644
--- a/src/declarative/qml/qdeclarativevme.cpp
+++ b/src/declarative/qml/qdeclarativevme.cpp
@@ -121,6 +121,11 @@ void QDeclarativeVME::init(QDeclarativeContextData *ctxt, QDeclarativeCompiledDa
bindValues.allocate(i->init.bindingsSize);
parserStatus.allocate(i->init.parserStatusSize);
+#ifdef QML_ENABLE_TRACE
+ parserStatusData.allocate(i->init.parserStatusSize);
+ rootComponent = comp;
+#endif
+
rootContext = 0;
engine = ctxt->engine;
}
@@ -155,6 +160,11 @@ bool QDeclarativeVME::initDeferred(QObject *object)
objects.push(object);
+#ifdef QML_ENABLE_TRACE
+ parserStatusData.allocate(i->deferInit.parserStatusSize);
+ rootComponent = comp;
+#endif
+
rootContext = 0;
engine = ctxt->engine;
@@ -177,6 +187,11 @@ QObject *QDeclarativeVME::execute(QList<QDeclarativeError> *errors, const Interr
{
Q_ASSERT(states.count() >= 1);
+#ifdef QML_ENABLE_TRACE
+ QDeclarativeTrace trace("VME Execute");
+ trace.addDetail("URL", rootComponent->url);
+#endif
+
QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(states.at(0).context->engine);
ActiveVMERestorer restore(this, ep);
@@ -715,6 +730,10 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors,
QObject *target = objects.top();
QDeclarativeParserStatus *status = reinterpret_cast<QDeclarativeParserStatus *>(reinterpret_cast<char *>(target) + instr.castValue);
parserStatus.push(status);
+#ifdef QML_ENABLE_TRACE
+ Q_ASSERT(QObjectPrivate::get(target)->declarativeData);
+ parserStatusData.push(static_cast<QDeclarativeData *>(QObjectPrivate::get(target)->declarativeData));
+#endif
status->d = &parserStatus.top();
status->classBegin();
@@ -735,7 +754,8 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors,
QML_NEXT_INSTR(StoreBinding);
QDeclarativeBinding *bind = new QDeclarativeBinding(PRIMITIVES.at(instr.value), true,
- context, CTXT, COMP->name, instr.line);
+ context, CTXT, COMP->name, instr.line,
+ instr.column);
bindValues.push(bind);
bind->m_mePtr = &bindValues.top();
bind->setTarget(target, instr.property, CTXT);
@@ -753,7 +773,8 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors,
QML_NEXT_INSTR(StoreBindingOnAlias);
QDeclarativeBinding *bind = new QDeclarativeBinding(PRIMITIVES.at(instr.value), true,
- context, CTXT, COMP->name, instr.line);
+ context, CTXT, COMP->name, instr.line,
+ instr.column);
bindValues.push(bind);
bind->m_mePtr = &bindValues.top();
bind->setTarget(target, instr.property, CTXT);
@@ -776,7 +797,8 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors,
QML_NEXT_INSTR(StoreV4Binding);
QDeclarativeAbstractBinding *binding =
- CTXT->v4bindings->configBinding(instr.value, target, scope, property, instr.line);
+ CTXT->v4bindings->configBinding(instr.value, target, scope, property,
+ instr.line, instr.column);
bindValues.push(binding);
binding->m_mePtr = &bindValues.top();
binding->addToObject(target, property);
@@ -793,7 +815,8 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors,
QDeclarativeAbstractBinding *binding =
CTXT->v8bindings->configBinding(instr.value, target, scope,
- instr.property, instr.line);
+ instr.property, instr.line,
+ instr.column);
bindValues.push(binding);
binding->m_mePtr = &bindValues.top();
binding->addToObject(target, QDeclarativePropertyPrivate::bindingIndex(instr.property));
@@ -1019,6 +1042,9 @@ void QDeclarativeVME::reset()
lists.deallocate();
bindValues.deallocate();
parserStatus.deallocate();
+#ifdef QML_ENABLE_TRACE
+ parserStatusData.deallocate();
+#endif
finalizeCallbacks.clear();
states.clear();
rootContext = 0;
@@ -1158,9 +1184,17 @@ QDeclarativeContextData *QDeclarativeVME::complete(const Interrupt &interrupt)
if (!engine)
return 0;
+ QDeclarativeTrace trace("VME Complete");
+#ifdef QML_ENABLE_TRACE
+ trace.addDetail("URL", rootComponent->url);
+#endif
+
ActiveVMERestorer restore(this, QDeclarativeEnginePrivate::get(engine));
QRecursionWatcher<QDeclarativeVME, &QDeclarativeVME::recursion> watcher(this);
+ {
+ QDeclarativeTrace trace("VME Binding Enable");
+ trace.event("begin binding eval");
while (!bindValues.isEmpty()) {
QDeclarativeAbstractBinding *b = bindValues.pop();
@@ -1174,12 +1208,23 @@ QDeclarativeContextData *QDeclarativeVME::complete(const Interrupt &interrupt)
return 0;
}
bindValues.deallocate();
+ }
+ {
+ QDeclarativeTrace trace("VME Component Complete");
while (!parserStatus.isEmpty()) {
QDeclarativeParserStatus *status = parserStatus.pop();
+#ifdef QML_ENABLE_TRACE
+ QDeclarativeData *data = parserStatusData.pop();
+#endif
if (status && status->d) {
status->d = 0;
+#ifdef QML_ENABLE_TRACE
+ QDeclarativeTrace trace("Component complete");
+ trace.addDetail("URL", data->outerContext->url);
+ trace.addDetail("Line", data->lineNumber);
+#endif
status->componentComplete();
}
@@ -1187,7 +1232,10 @@ QDeclarativeContextData *QDeclarativeVME::complete(const Interrupt &interrupt)
return 0;
}
parserStatus.deallocate();
+ }
+ {
+ QDeclarativeTrace trace("VME Finalize Callbacks");
for (int ii = 0; ii < finalizeCallbacks.count(); ++ii) {
QDeclarativeEnginePrivate::FinalizeCallback callback = finalizeCallbacks.at(ii);
QObject *obj = callback.first;
@@ -1199,7 +1247,10 @@ QDeclarativeContextData *QDeclarativeVME::complete(const Interrupt &interrupt)
return 0;
}
finalizeCallbacks.clear();
+ }
+ {
+ QDeclarativeTrace trace("VME Component.onCompleted Callbacks");
while (componentAttached) {
QDeclarativeComponentAttached *a = componentAttached;
a->rem();
@@ -1212,6 +1263,7 @@ QDeclarativeContextData *QDeclarativeVME::complete(const Interrupt &interrupt)
if (watcher.hasRecursed() || interrupt.shouldInterrupt())
return 0;
}
+ }
QDeclarativeContextData *rv = rootContext;