aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-06-05 16:43:57 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-10 14:29:11 +0200
commit5c50c19231943368ae1f07dbc63d57fac84445ca (patch)
tree52a6b888c4cb953524b96cc574c68a964dbb15de /src
parentb0b4869440fc6e5af42797cbcaa64ec30238be73 (diff)
Don't cache visual data model v8 handles.
The external resource is reference counted and resused irregardless of whether the handles are cached, and the reduction in the number of handles allocated needs to be comes at the cost of keeping persistent handle which have a negative impact on garbage collection. Change-Id: I92996faab08a0ff76d21e56dbdafdd7522882d2c Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickvisualadaptormodel.cpp2
-rw-r--r--src/quick/items/qquickvisualdatamodel.cpp39
-rw-r--r--src/quick/items/qquickvisualdatamodel_p_p.h2
3 files changed, 9 insertions, 34 deletions
diff --git a/src/quick/items/qquickvisualadaptormodel.cpp b/src/quick/items/qquickvisualadaptormodel.cpp
index 117997310b..f298346ced 100644
--- a/src/quick/items/qquickvisualadaptormodel.cpp
+++ b/src/quick/items/qquickvisualadaptormodel.cpp
@@ -401,6 +401,7 @@ public:
}
v8::Local<v8::Object> data = type->constructor->NewInstance();
data->SetExternalResource(this);
+ ++scriptRef;
return data;
}
@@ -559,6 +560,7 @@ public:
}
v8::Local<v8::Object> data = type->constructor->NewInstance();
data->SetExternalResource(this);
+ ++scriptRef;
return data;
}
};
diff --git a/src/quick/items/qquickvisualdatamodel.cpp b/src/quick/items/qquickvisualdatamodel.cpp
index 05709411f9..2f31aca331 100644
--- a/src/quick/items/qquickvisualdatamodel.cpp
+++ b/src/quick/items/qquickvisualdatamodel.cpp
@@ -1612,18 +1612,6 @@ int QQuickVisualDataModelItemMetaType::parseGroups(const v8::Local<v8::Value> &g
return groupFlags;
}
-void QQuickVisualDataModelItemMetaType::release_index(v8::Persistent<v8::Value> object, void *data)
-{
- static_cast<QQuickVisualDataModelItem *>(data)->indexHandle.Clear();
- qPersistentDispose(object);
-}
-
-void QQuickVisualDataModelItemMetaType::release_model(v8::Persistent<v8::Value> object, void *data)
-{
- static_cast<QQuickVisualDataModelItem *>(data)->modelHandle.Clear();
- qPersistentDispose(object);
-}
-
v8::Handle<v8::Value> QQuickVisualDataModelItemMetaType::get_model(
v8::Local<v8::String>, const v8::AccessorInfo &info)
{
@@ -1632,14 +1620,7 @@ v8::Handle<v8::Value> QQuickVisualDataModelItemMetaType::get_model(
if (!cacheItem->metaType->model)
return v8::Undefined();
- if (cacheItem->modelHandle.IsEmpty()) {
- cacheItem->modelHandle = qPersistentNew(cacheItem->get());
- cacheItem->modelHandle.MakeWeak(cacheItem, &release_model);
-
- ++cacheItem->scriptRef;
- }
-
- return cacheItem->modelHandle;
+ return cacheItem->get();
}
v8::Handle<v8::Value> QQuickVisualDataModelItemMetaType::get_groups(
@@ -1739,8 +1720,6 @@ QQuickVisualDataModelItem::~QQuickVisualDataModelItem()
Q_ASSERT(scriptRef == 0);
Q_ASSERT(objectRef == 0);
Q_ASSERT(!object);
- Q_ASSERT(indexHandle.IsEmpty());
- Q_ASSERT(modelHandle.IsEmpty());
if (incubationTask && metaType->model)
QQuickVisualDataModelPrivate::get(metaType->model)->releaseIncubator(incubationTask);
@@ -2257,17 +2236,13 @@ QQmlV8Handle QQuickVisualDataGroup::get(int index)
model->m_compositor.setFlags(it, 1, Compositor::CacheFlag);
}
- if (cacheItem->indexHandle.IsEmpty()) {
- if (model->m_cacheMetaType->constructor.IsEmpty())
- model->m_cacheMetaType->initializeConstructor();
- cacheItem->indexHandle = qPersistentNew(model->m_cacheMetaType->constructor->NewInstance());
- cacheItem->indexHandle->SetExternalResource(cacheItem);
- cacheItem->indexHandle.MakeWeak(cacheItem, QQuickVisualDataModelItemMetaType::release_index);
-
- ++cacheItem->scriptRef;
- }
+ if (model->m_cacheMetaType->constructor.IsEmpty())
+ model->m_cacheMetaType->initializeConstructor();
+ v8::Local<v8::Object> handle = model->m_cacheMetaType->constructor->NewInstance();
+ handle->SetExternalResource(cacheItem);
+ ++cacheItem->scriptRef;
- return QQmlV8Handle::fromHandle(cacheItem->indexHandle);
+ return QQmlV8Handle::fromHandle(handle);
}
bool QQuickVisualDataGroupPrivate::parseIndex(
diff --git a/src/quick/items/qquickvisualdatamodel_p_p.h b/src/quick/items/qquickvisualdatamodel_p_p.h
index b88c8a42da..e59b6dd46e 100644
--- a/src/quick/items/qquickvisualdatamodel_p_p.h
+++ b/src/quick/items/qquickvisualdatamodel_p_p.h
@@ -151,8 +151,6 @@ public:
QObject *object;
QQuickVisualDataModelAttached *attached;
QVDMIncubationTask *incubationTask;
- v8::Persistent<v8::Object> indexHandle;
- v8::Persistent<v8::Value> modelHandle;
int objectRef;
int scriptRef;
int groups;