diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-07-01 08:20:15 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-02 15:36:54 +0200 |
commit | d7134b8b68f0b3530269f7d087bdecfc8986be6b (patch) | |
tree | 09a36f3a3cfc24b1d4e85b11090b78cb07f3e17c /src/qml/qml/qqmlcontext.cpp | |
parent | 35deea613e96f9fced4fc48b1c5e59a4f7ee8e38 (diff) |
Replace us of v4 identifiers for object id mapping in qml compiler
The compiler is executed in a separate thread, at which point it doesn't work
very well to access the identifiers data structures of the engine on the main
thread, allocate new strings and potentially also trigger GC.
This patch moves the data into an intermediate QVector and constructs the
identifier hash on the receiving end in QQmlContextData::setIdPropertyData.
Change-Id: I676cf633cf1c55ee2e8f818e6963368ad55913cd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlcontext.cpp')
-rw-r--r-- | src/qml/qml/qqmlcontext.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/qml/qml/qqmlcontext.cpp b/src/qml/qml/qqmlcontext.cpp index 55cfbc0654..7731935b75 100644 --- a/src/qml/qml/qqmlcontext.cpp +++ b/src/qml/qml/qqmlcontext.cpp @@ -770,10 +770,13 @@ void QQmlContextData::setIdProperty(int idx, QObject *obj) idValues[idx].context = this; } -void QQmlContextData::setIdPropertyData(const QV4::IdentifierHash<int> &data) +void QQmlContextData::setIdPropertyData(const QVector<ObjectIdMapping> &data) { Q_ASSERT(propertyNames.isEmpty()); - propertyNames = data; + propertyNames = QV4::IdentifierHash<int>(QV8Engine::getV4(engine->handle())); + for (QVector<ObjectIdMapping>::ConstIterator it = data.begin(), end = data.end(); + it != end; ++it) + propertyNames.add(it->name, it->id); idValueCount = data.count(); idValues = new ContextGuard[idValueCount]; |