diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2011-12-12 14:04:39 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-14 09:55:28 +0100 |
commit | b0133b8fa4b1ad9a887fa6718983711b560a35ef (patch) | |
tree | c636ce1995bff85ae90544400de7594ab601b7d5 /src/declarative/qml/v8/qv8engine_p.h | |
parent | f12d2a28d799e95661a50ee70d4c9059377fbfc1 (diff) |
Cleanup: Fold QV8GCCallback class declaration(s) back into qv8engine_p.h
The implementation lives in qv8engine.cpp.
Change-Id: I2898556fea867cdc82ea534eaf020dd8d12b25d6
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8engine_p.h')
-rw-r--r-- | src/declarative/qml/v8/qv8engine_p.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/declarative/qml/v8/qv8engine_p.h b/src/declarative/qml/v8/qv8engine_p.h index acf7ec816a..7df4c523c0 100644 --- a/src/declarative/qml/v8/qv8engine_p.h +++ b/src/declarative/qml/v8/qv8engine_p.h @@ -60,6 +60,7 @@ #include <QtCore/qstack.h> #include <QtCore/qstringlist.h> #include <QtCore/QElapsedTimer> +#include <QtCore/QThreadStorage> #include <private/qv8_p.h> #include <qjsengine.h> @@ -222,6 +223,55 @@ class QDeclarativeValueType; class QNetworkAccessManager; class QDeclarativeContextData; +class Q_AUTOTEST_EXPORT QV8GCCallback +{ +private: + class ThreadData; +public: + static void garbageCollectorPrologueCallback(v8::GCType, v8::GCCallbackFlags); + static void registerGcPrologueCallback(); + static void releaseWorkerThreadGcPrologueCallbackData(); + + class Q_AUTOTEST_EXPORT Referencer { + public: + ~Referencer(); + void addRelationship(QObject *object, v8::Persistent<v8::Value> handle); + void addRelationship(QObject *object, QObject *other); + void dispose(); + private: + Referencer(); + static v8::Persistent<v8::Object> *findOwnerAndStrength(QObject *qobjectOwner, bool *shouldBeStrong); + v8::Persistent<v8::Object> strongReferencer; + v8::Persistent<v8::Context> context; + friend class QV8GCCallback::ThreadData; + }; + + class Q_AUTOTEST_EXPORT Node { + public: + typedef void (*PrologueCallback)(Referencer *r, Node *node); + Node(PrologueCallback callback); + ~Node(); + + QIntrusiveListNode node; + PrologueCallback prologueCallback; + }; + + static void addGcCallbackNode(Node *node); + +private: + class ThreadData { + public: + ThreadData() : gcPrologueCallbackRegistered(false) { } + ~ThreadData(); + Referencer referencer; + bool gcPrologueCallbackRegistered; + QIntrusiveList<Node, &Node::node> gcCallbackNodes; + }; + + static void initializeThreadData(); + static QThreadStorage<ThreadData *> threadData; +}; + class Q_DECLARATIVE_EXPORT QV8Engine { public: |