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_p.h | |
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_p.h')
-rw-r--r-- | src/qml/qml/qqmlcontext_p.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlcontext_p.h b/src/qml/qml/qqmlcontext_p.h index 3d31e47707..a5c3886af1 100644 --- a/src/qml/qml/qqmlcontext_p.h +++ b/src/qml/qml/qqmlcontext_p.h @@ -195,10 +195,17 @@ public: QFlagPointer<QQmlContextData> context; QQmlNotifier bindings; }; + struct ObjectIdMapping { + ObjectIdMapping() : id(-1) {} + ObjectIdMapping(const QString &name, int id) + : name(name), id(id) {} + QString name; + int id; + }; ContextGuard *idValues; int idValueCount; void setIdProperty(int, QObject *); - void setIdPropertyData(const QV4::IdentifierHash<int> &); + void setIdPropertyData(const QVector<ObjectIdMapping> &); // Linked contexts. this owns linkedContext. QQmlContextData *linkedContext; |