diff options
Diffstat (limited to 'src/declarative/qml/qdeclarativevme.cpp')
-rw-r--r-- | src/declarative/qml/qdeclarativevme.cpp | 60 |
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; |