Title: [133823] trunk/Source/WebCore
- Revision
- 133823
- Author
- aba...@webkit.org
- Date
- 2012-11-07 16:56:20 -0800 (Wed, 07 Nov 2012)
Log Message
[V8] Prepare DOMDataStore to be able to store ScriptWrappable wrappers inline
https://bugs.webkit.org/show_bug.cgi?id=101523
Unreviewed. Technically this patch hasn't been reviewed, but it is part
of a patch that was reviewed by Kentaro Hara.
Sadly, my patch for bug 101110 triggered the regression again. This
patch is a smaller incremental step towards the patch in bug 101110. It
doesn't make that much sense on its own, but it will help me isolate
the source of the regression.
* bindings/v8/DOMDataStore.h:
(WebCore::DOMDataStore::get):
(DOMDataStore):
(WebCore::DOMDataStore::set):
(WebCore::DOMDataStore::wrapperIsStoredInObject):
(WebCore::DOMDataStore::getWrapperFromObject):
(WebCore::DOMDataStore::setWrapperInObject):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (133822 => 133823)
--- trunk/Source/WebCore/ChangeLog 2012-11-08 00:52:38 UTC (rev 133822)
+++ trunk/Source/WebCore/ChangeLog 2012-11-08 00:56:20 UTC (rev 133823)
@@ -1,3 +1,24 @@
+2012-11-07 Adam Barth <aba...@webkit.org>
+
+ [V8] Prepare DOMDataStore to be able to store ScriptWrappable wrappers inline
+ https://bugs.webkit.org/show_bug.cgi?id=101523
+
+ Unreviewed. Technically this patch hasn't been reviewed, but it is part
+ of a patch that was reviewed by Kentaro Hara.
+
+ Sadly, my patch for bug 101110 triggered the regression again. This
+ patch is a smaller incremental step towards the patch in bug 101110. It
+ doesn't make that much sense on its own, but it will help me isolate
+ the source of the regression.
+
+ * bindings/v8/DOMDataStore.h:
+ (WebCore::DOMDataStore::get):
+ (DOMDataStore):
+ (WebCore::DOMDataStore::set):
+ (WebCore::DOMDataStore::wrapperIsStoredInObject):
+ (WebCore::DOMDataStore::getWrapperFromObject):
+ (WebCore::DOMDataStore::setWrapperInObject):
+
2012-11-05 Ryosuke Niwa <rn...@webkit.org>
SimplifyMarkupCommand takes a disproportionally long time to run when there are many nodes to remove
Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.h (133822 => 133823)
--- trunk/Source/WebCore/bindings/v8/DOMDataStore.h 2012-11-08 00:52:38 UTC (rev 133822)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.h 2012-11-08 00:56:20 UTC (rev 133823)
@@ -59,29 +59,51 @@
static DOMDataStore* current(v8::Isolate*);
- inline v8::Handle<v8::Object> get(void* object) const { return m_domObjectMap->get(object); }
- inline v8::Handle<v8::Object> get(Node* object) const
+ template<typename T>
+ inline v8::Handle<v8::Object> get(T* object) const
{
- if (m_type == MainWorld)
- return object->wrapper();
+ if (wrapperIsStoredInObject(object))
+ return getWrapperFromObject(object);
return m_domObjectMap->get(object);
}
- inline void set(void* object, v8::Persistent<v8::Object> wrapper) { m_domObjectMap->set(object, wrapper); }
- inline void set(Node* object, v8::Persistent<v8::Object> wrapper)
+ template<typename T>
+ inline void set(T* object, v8::Persistent<v8::Object> wrapper)
{
- if (m_type == MainWorld) {
- ASSERT(object->wrapper().IsEmpty());
- object->setWrapper(wrapper);
- wrapper.MakeWeak(object, weakCallback);
+ if (setWrapperInObject(object, wrapper))
return;
- }
m_domObjectMap->set(object, wrapper);
}
void reportMemoryUsage(MemoryObjectInfo*) const;
private:
+ bool wrapperIsStoredInObject(void*) const { return false; }
+ bool wrapperIsStoredInObject(Node*) const { return m_type == MainWorld; }
+
+ v8::Handle<v8::Object> getWrapperFromObject(void*) const
+ {
+ ASSERT_NOT_REACHED();
+ return v8::Handle<v8::Object>();
+ }
+
+ v8::Handle<v8::Object> getWrapperFromObject(Node* object) const
+ {
+ ASSERT(m_type == MainWorld);
+ return object->wrapper();
+ }
+
+ bool setWrapperInObject(void*, v8::Persistent<v8::Object>) { return false; }
+ bool setWrapperInObject(Node* object, v8::Persistent<v8::Object> wrapper)
+ {
+ if (m_type != MainWorld)
+ return false;
+ ASSERT(object->wrapper().IsEmpty());
+ object->setWrapper(wrapper);
+ wrapper.MakeWeak(object, weakCallback);
+ return true;
+ }
+
static void weakCallback(v8::Persistent<v8::Value>, void* context);
Type m_type;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes