Diff
Modified: trunk/Source/WebCore/ChangeLog (132539 => 132540)
--- trunk/Source/WebCore/ChangeLog 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/ChangeLog 2012-10-25 22:34:14 UTC (rev 132540)
@@ -1,3 +1,31 @@
+2012-10-25 Adam Barth <[email protected]>
+
+ [V8] ActiveDOMNodes no longer require a separate wrapper map
+ https://bugs.webkit.org/show_bug.cgi?id=100352
+
+ Reviewed by Eric Seidel.
+
+ There is no longer any reason to keep a separate DOM wrapper map for
+ active DOM nodes. We can simply store them in the normal DOM node
+ wrapper map (which is more efficient because it doesn't use a HashMap).
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ (GetDomMapName):
+ * bindings/v8/DOMDataStore.cpp:
+ (WebCore::DOMDataStore::DOMDataStore):
+ (WebCore::DOMDataStore::~DOMDataStore):
+ (WebCore::DOMDataStore::reportMemoryUsage):
+ * bindings/v8/DOMDataStore.h:
+ (DOMDataStore):
+ * bindings/v8/IntrusiveDOMWrapperMap.h:
+ * bindings/v8/V8DOMMap.cpp:
+ * bindings/v8/V8DOMMap.h:
+ (WebCore):
+ * bindings/v8/V8DOMWrapper.cpp:
+ * bindings/v8/V8DOMWrapper.h:
+ (V8DOMWrapper):
+ (WebCore::V8DOMWrapper::getCachedWrapper):
+
2012-10-25 Tony Chang <[email protected]>
Unreviewed, fix the build on Mac.
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm (132539 => 132540)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2012-10-25 22:34:14 UTC (rev 132540)
@@ -3480,7 +3480,6 @@
my $dataNode = shift;
my $type = shift;
- return "ActiveDOMNode" if (IsNodeSubType($dataNode) && $dataNode->extendedAttributes->{"ActiveDOMObject"});
return "DOMNode" if IsNodeSubType($dataNode);
return "ActiveDOMObject" if $dataNode->extendedAttributes->{"ActiveDOMObject"};
return "DOMObject";
Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp 2012-10-25 22:34:14 UTC (rev 132540)
@@ -42,16 +42,14 @@
DOMDataStore::DOMDataStore(Type type)
: m_type(type)
{
- if (type == MainWorld) {
+ if (type == MainWorld)
m_domNodeMap = adoptPtr(new DOMNodeWrapperMap);
- m_activeDomNodeMap = adoptPtr(new ActiveDOMNodeWrapperMap);
- } else {
+ else {
ASSERT(type == IsolatedWorld || type == Worker);
- // FIXME: In principle, we shouldn't need to create these
- // wrapper maps for workers because there are no Nodes on
+ // FIXME: In principle, we shouldn't need to create this
+ // wrapper map for workers because there are no Nodes on
// worker threads.
m_domNodeMap = adoptPtr(new DOMWrapperHashMap<Node>);
- m_activeDomNodeMap = adoptPtr(new DOMWrapperHashMap<Node>);
}
m_domObjectMap = adoptPtr(new DOMWrapperHashMap<void>);
m_activeDomObjectMap = adoptPtr(new DOMWrapperHashMap<void>);
@@ -65,10 +63,8 @@
V8PerIsolateData::current()->unregisterDOMDataStore(this);
- if (m_type == IsolatedWorld) {
+ if (m_type == IsolatedWorld)
m_domNodeMap->clear();
- m_activeDomNodeMap->clear();
- }
m_domObjectMap->clear();
m_activeDomObjectMap->clear();
}
@@ -89,7 +85,6 @@
{
MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::Binding);
info.addMember(m_domNodeMap);
- info.addMember(m_activeDomNodeMap);
info.addMember(m_domObjectMap);
info.addMember(m_activeDomObjectMap);
}
Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.h (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/DOMDataStore.h 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.h 2012-10-25 22:34:14 UTC (rev 132540)
@@ -60,7 +60,6 @@
static DOMDataStore* current(v8::Isolate*);
DOMWrapperMap<Node>& domNodeMap() { return *m_domNodeMap; }
- DOMWrapperMap<Node>& activeDomNodeMap() { return *m_activeDomNodeMap; }
DOMWrapperMap<void>& domObjectMap() { return *m_domObjectMap; }
DOMWrapperMap<void>& activeDomObjectMap() { return *m_activeDomObjectMap; }
@@ -69,7 +68,6 @@
protected:
Type m_type;
OwnPtr<DOMWrapperMap<Node> > m_domNodeMap;
- OwnPtr<DOMWrapperMap<Node> > m_activeDomNodeMap;
OwnPtr<DOMWrapperMap<void> > m_domObjectMap;
OwnPtr<DOMWrapperMap<void> > m_activeDomObjectMap;
};
Modified: trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h 2012-10-25 22:34:14 UTC (rev 132540)
@@ -78,36 +78,6 @@
}
};
-class ActiveDOMNodeWrapperMap : public DOMWrapperHashMap<Node> {
-public:
- virtual v8::Persistent<v8::Object> get(Node* node) OVERRIDE
- {
- v8::Persistent<v8::Object> wrapper = node->wrapper();
- ASSERT(DOMWrapperHashMap<Node>::get(node) == wrapper);
- return wrapper;
- }
-
- virtual void set(Node* node, v8::Persistent<v8::Object> wrapper) OVERRIDE
- {
- ASSERT(node && node->wrapper().IsEmpty());
- ASSERT(wrapper.WrapperClassId() == v8DOMSubtreeClassId);
- node->setWrapper(wrapper);
- DOMWrapperHashMap<Node>::set(node, wrapper);
- }
-
- virtual void clear() OVERRIDE
- {
- ASSERT_NOT_REACHED();
- }
-
- virtual void remove(Node* node, v8::Persistent<v8::Object> wrapper) OVERRIDE
- {
- ASSERT(node->wrapper() == wrapper);
- node->clearWrapper();
- DOMWrapperHashMap<Node>::remove(node, wrapper);
- }
-};
-
} // namespace WebCore
#endif
Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp 2012-10-25 22:34:14 UTC (rev 132540)
@@ -49,13 +49,6 @@
return DOMDataStore::current(isolate)->domNodeMap();
}
-DOMWrapperMap<Node>& getActiveDOMNodeMap(v8::Isolate* isolate)
-{
- if (!isolate)
- isolate = v8::Isolate::GetCurrent();
- return DOMDataStore::current(isolate)->activeDomNodeMap();
-}
-
DOMWrapperMap<void>& getDOMObjectMap(v8::Isolate* isolate)
{
if (!isolate)
Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.h (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/V8DOMMap.h 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.h 2012-10-25 22:34:14 UTC (rev 132540)
@@ -43,7 +43,6 @@
namespace WebCore {
DOMWrapperMap<Node>& getDOMNodeMap(v8::Isolate* = 0);
- DOMWrapperMap<Node>& getActiveDOMNodeMap(v8::Isolate* = 0);
class NodeWrapperVisitor {
public:
Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp 2012-10-25 22:34:14 UTC (rev 132540)
@@ -78,16 +78,6 @@
return wrapperHandle;
}
-v8::Persistent<v8::Object> V8DOMWrapper::setJSWrapperForActiveDOMNode(PassRefPtr<Node> node, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
-{
- v8::Persistent<v8::Object> wrapperHandle = v8::Persistent<v8::Object>::New(wrapper);
- ASSERT(maybeDOMWrapper(wrapperHandle));
- ASSERT(node->isActiveNode());
- wrapperHandle.SetWrapperClassId(v8DOMSubtreeClassId);
- getActiveDOMNodeMap(isolate).set(node.leakRef(), wrapperHandle);
- return wrapperHandle;
-}
-
void V8DOMWrapper::setNamedHiddenReference(v8::Handle<v8::Object> parent, const char* name, v8::Handle<v8::Value> child)
{
ASSERT(name);
Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h (132539 => 132540)
--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h 2012-10-25 22:20:17 UTC (rev 132539)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h 2012-10-25 22:34:14 UTC (rev 132540)
@@ -99,7 +99,6 @@
template<typename T>
static v8::Persistent<v8::Object> setJSWrapperForActiveDOMObject(PassRefPtr<T>, v8::Handle<v8::Object>, v8::Isolate* = 0);
static v8::Persistent<v8::Object> setJSWrapperForDOMNode(PassRefPtr<Node>, v8::Handle<v8::Object>, v8::Isolate* = 0);
- static v8::Persistent<v8::Object> setJSWrapperForActiveDOMNode(PassRefPtr<Node>, v8::Handle<v8::Object>, v8::Isolate* = 0);
static bool isValidDOMObject(v8::Handle<v8::Value>);
@@ -124,7 +123,7 @@
return node->wrapper();
DOMDataStore* store = context->world()->domDataStore();
- DOMWrapperMap<Node>& domNodeMap = node->isActiveNode() ? store->activeDomNodeMap() : store->domNodeMap();
+ DOMWrapperMap<Node>& domNodeMap = store->domNodeMap();
return domNodeMap.get(node);
}
};