From 8b39dbda19bfc0449022aacaaa2eb2975e9226c8 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 8 Jun 2011 10:40:14 +1000 Subject: [PATCH] Implement gc() method --- src/declarative/qml/qdeclarativeengine.cpp | 3 +-- src/declarative/qml/v8/qv8engine.cpp | 13 +++++++++++++ src/declarative/qml/v8/qv8engine_p.h | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index fa606ab..c34987e 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -824,8 +824,7 @@ void QDeclarativeEngine::setOutputWarningsToStandardError(bool enabled) */ void QDeclarativeEngine::collectGarbage() { - v8::V8::LowMemoryNotification(); - while (!v8::V8::IdleNotification()) {} + QV8Engine::gc(); } /*! diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp index 87bb1fc..693c8aa 100644 --- a/src/declarative/qml/v8/qv8engine.cpp +++ b/src/declarative/qml/v8/qv8engine.cpp @@ -571,6 +571,7 @@ void QV8Engine::initializeGlobal(v8::Handle global) global->Set(v8::String::New("print"), printFn); global->Set(v8::String::New("console"), console); global->Set(v8::String::New("Qt"), qt); + global->Set(v8::String::New("gc"), V8FUNCTION(gc, this)); // XXX mainthread only m_xmlHttpRequestData = qt_add_qmlxmlhttprequest(this); @@ -608,6 +609,18 @@ void QV8Engine::freezeGlobal() test->Run(); } +void QV8Engine::gc() +{ + v8::V8::LowMemoryNotification(); + while (!v8::V8::IdleNotification()) {} +} + +v8::Handle QV8Engine::gc(const v8::Arguments &args) +{ + gc(); + return v8::Undefined(); +} + v8::Handle QV8Engine::print(const v8::Arguments &args) { QString result; diff --git a/src/declarative/qml/v8/qv8engine_p.h b/src/declarative/qml/v8/qv8engine_p.h index 5aec866..5810b3e 100644 --- a/src/declarative/qml/v8/qv8engine_p.h +++ b/src/declarative/qml/v8/qv8engine_p.h @@ -238,6 +238,8 @@ public: // Return the list of illegal id names (the names of the properties on the global object) const QSet &illegalNames() const; + static void gc(); + private: QDeclarativeEngine *m_engine; v8::Persistent m_context; @@ -263,6 +265,7 @@ private: void initializeGlobal(v8::Handle); void freezeGlobal(); + static v8::Handle gc(const v8::Arguments &args); static v8::Handle print(const v8::Arguments &args); static v8::Handle isQtObject(const v8::Arguments &args); static v8::Handle rgba(const v8::Arguments &args); -- 1.7.2.5