aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v8/qv8engine_p.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2011-12-12 14:04:39 +0100
committerQt by Nokia <qt-info@nokia.com>2011-12-14 09:55:28 +0100
commitb0133b8fa4b1ad9a887fa6718983711b560a35ef (patch)
treec636ce1995bff85ae90544400de7594ab601b7d5 /src/declarative/qml/v8/qv8engine_p.h
parentf12d2a28d799e95661a50ee70d4c9059377fbfc1 (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.h50
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: