aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-06-08 10:40:14 +1000
committerAaron Kennedy <aaron.kennedy@nokia.com>2011-06-08 10:40:14 +1000
commit8b39dbda19bfc0449022aacaaa2eb2975e9226c8 (patch)
tree1ab99cccc9e278ed12bd74fd3a3d1d2f707f29ba
parent6609cc8edf8d6a5744012ff22c1e54e5cc3bc917 (diff)
Implement gc() method
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp3
-rw-r--r--src/declarative/qml/v8/qv8engine.cpp13
-rw-r--r--src/declarative/qml/v8/qv8engine_p.h3
3 files changed, 17 insertions, 2 deletions
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index fa606ab588..c34987e3e3 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 87bb1fc69b..693c8aa952 100644
--- a/src/declarative/qml/v8/qv8engine.cpp
+++ b/src/declarative/qml/v8/qv8engine.cpp
@@ -571,6 +571,7 @@ void QV8Engine::initializeGlobal(v8::Handle<v8::Object> 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<v8::Value> QV8Engine::gc(const v8::Arguments &args)
+{
+ gc();
+ return v8::Undefined();
+}
+
v8::Handle<v8::Value> 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 5aec866682..5810b3e604 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<QString> &illegalNames() const;
+ static void gc();
+
private:
QDeclarativeEngine *m_engine;
v8::Persistent<v8::Context> m_context;
@@ -263,6 +265,7 @@ private:
void initializeGlobal(v8::Handle<v8::Object>);
void freezeGlobal();
+ static v8::Handle<v8::Value> gc(const v8::Arguments &args);
static v8::Handle<v8::Value> print(const v8::Arguments &args);
static v8::Handle<v8::Value> isQtObject(const v8::Arguments &args);
static v8::Handle<v8::Value> rgba(const v8::Arguments &args);