Title: [132464] trunk/Source/WebCore
- Revision
- 132464
- Author
- [email protected]
- Date
- 2012-10-25 02:47:48 -0700 (Thu, 25 Oct 2012)
Log Message
[V8] We can handle ActiveDOMNodes and DOMNodes in the same GC visitor
https://bugs.webkit.org/show_bug.cgi?id=100351
Reviewed by Eric Seidel.
There is no reason to handle active DOM nodes in a separate pass from
regular DOM nodes anymore.
* bindings/v8/V8DOMMap.cpp:
* bindings/v8/V8DOMMap.h:
(WebCore):
* bindings/v8/V8GCController.cpp:
(WebCore::ActiveDOMObjectPrologueVisitor::visitDOMWrapper):
(WebCore::NodeVisitor::NodeVisitor):
(NodeVisitor):
(WebCore::NodeVisitor::visitNodeWrapper):
(WebCore::V8GCController::majorGCPrologue):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (132463 => 132464)
--- trunk/Source/WebCore/ChangeLog 2012-10-25 09:32:40 UTC (rev 132463)
+++ trunk/Source/WebCore/ChangeLog 2012-10-25 09:47:48 UTC (rev 132464)
@@ -1,3 +1,23 @@
+2012-10-25 Adam Barth <[email protected]>
+
+ [V8] We can handle ActiveDOMNodes and DOMNodes in the same GC visitor
+ https://bugs.webkit.org/show_bug.cgi?id=100351
+
+ Reviewed by Eric Seidel.
+
+ There is no reason to handle active DOM nodes in a separate pass from
+ regular DOM nodes anymore.
+
+ * bindings/v8/V8DOMMap.cpp:
+ * bindings/v8/V8DOMMap.h:
+ (WebCore):
+ * bindings/v8/V8GCController.cpp:
+ (WebCore::ActiveDOMObjectPrologueVisitor::visitDOMWrapper):
+ (WebCore::NodeVisitor::NodeVisitor):
+ (NodeVisitor):
+ (WebCore::NodeVisitor::visitNodeWrapper):
+ (WebCore::V8GCController::majorGCPrologue):
+
2012-10-25 Alexander Pavlov <[email protected]>
Web Inspector: Improper out-of-order call on a rule that is being removed from the stylesheet.
Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp (132463 => 132464)
--- trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp 2012-10-25 09:32:40 UTC (rev 132463)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp 2012-10-25 09:47:48 UTC (rev 132464)
@@ -99,18 +99,6 @@
v8::V8::VisitHandlesWithClassIds(&visitorAdapter);
}
-void visitActiveDOMNodes(DOMWrapperVisitor<Node>* visitor)
-{
- v8::HandleScope scope;
-
- Vector<DOMDataStore*>& list = V8PerIsolateData::current()->allStores();
- for (size_t i = 0; i < list.size(); ++i) {
- DOMDataStore* store = list[i];
-
- store->activeDomNodeMap().visit(store, visitor);
- }
-}
-
void visitDOMObjects(DOMWrapperVisitor<void>* visitor)
{
v8::HandleScope scope;
Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.h (132463 => 132464)
--- trunk/Source/WebCore/bindings/v8/V8DOMMap.h 2012-10-25 09:32:40 UTC (rev 132463)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.h 2012-10-25 09:47:48 UTC (rev 132464)
@@ -44,7 +44,6 @@
DOMWrapperMap<Node>& getDOMNodeMap(v8::Isolate* = 0);
DOMWrapperMap<Node>& getActiveDOMNodeMap(v8::Isolate* = 0);
- void visitActiveDOMNodes(DOMWrapperVisitor<Node>*);
class NodeWrapperVisitor {
public:
Modified: trunk/Source/WebCore/bindings/v8/V8GCController.cpp (132463 => 132464)
--- trunk/Source/WebCore/bindings/v8/V8GCController.cpp 2012-10-25 09:32:40 UTC (rev 132463)
+++ trunk/Source/WebCore/bindings/v8/V8GCController.cpp 2012-10-25 09:47:48 UTC (rev 132464)
@@ -67,29 +67,28 @@
namespace WebCore {
-template<typename T>
-class ActiveDOMObjectPrologueVisitor : public DOMWrapperVisitor<T> {
+class ActiveDOMObjectPrologueVisitor : public DOMWrapperVisitor<void> {
public:
explicit ActiveDOMObjectPrologueVisitor(Vector<v8::Persistent<v8::Value> >* liveObjects)
: m_liveObjects(liveObjects)
{
}
- void visitDOMWrapper(DOMDataStore*, T* object, v8::Persistent<v8::Object> wrapper)
+ void visitDOMWrapper(DOMDataStore*, void* object, v8::Persistent<v8::Object> wrapper)
{
- WrapperTypeInfo* typeInfo = V8DOMWrapper::domWrapperType(wrapper);
+ WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(wrapper);
- if (V8MessagePort::info.equals(typeInfo)) {
+ if (V8MessagePort::info.equals(type)) {
// Mark each port as in-use if it's entangled. For simplicity's sake,
// we assume all ports are remotely entangled, since the Chromium port
// implementation can't tell the difference.
- MessagePort* port = reinterpret_cast<MessagePort*>(object);
+ MessagePort* port = static_cast<MessagePort*>(object);
if (port->isEntangled() || port->hasPendingActivity())
m_liveObjects->append(wrapper);
return;
}
- ActiveDOMObject* activeDOMObject = typeInfo->toActiveDOMObject(wrapper);
+ ActiveDOMObject* activeDOMObject = type->toActiveDOMObject(wrapper);
if (activeDOMObject && activeDOMObject->hasPendingActivity())
m_liveObjects->append(wrapper);
}
@@ -168,11 +167,22 @@
class NodeVisitor : public NodeWrapperVisitor {
public:
+ explicit NodeVisitor(Vector<v8::Persistent<v8::Value> >* liveObjects)
+ : m_liveObjects(liveObjects)
+ {
+ }
+
void visitNodeWrapper(Node* node, v8::Persistent<v8::Object> wrapper)
{
if (node->hasEventListeners())
addImplicitReferencesForNodeWithEventListeners(node, wrapper);
+ WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(wrapper);
+
+ ActiveDOMObject* activeDOMObject = type->toActiveDOMObject(wrapper);
+ if (activeDOMObject && activeDOMObject->hasPendingActivity())
+ m_liveObjects->append(wrapper);
+
Node* root = rootForGC(node);
if (!root)
return;
@@ -199,6 +209,7 @@
}
private:
+ Vector<v8::Persistent<v8::Value> >* m_liveObjects;
Vector<ImplicitConnection> m_connections;
};
@@ -222,16 +233,16 @@
Vector<v8::Persistent<v8::Value> > liveObjects;
liveObjects.append(V8PerIsolateData::current()->ensureLiveRoot());
- ActiveDOMObjectPrologueVisitor<void> activeObjectVisitor(&liveObjects);
+
+ ActiveDOMObjectPrologueVisitor activeObjectVisitor(&liveObjects);
visitActiveDOMObjects(&activeObjectVisitor);
- ActiveDOMObjectPrologueVisitor<Node> activeNodeVisitor(&liveObjects);
- visitActiveDOMNodes(&activeNodeVisitor);
- v8::V8::AddObjectGroup(liveObjects.data(), liveObjects.size());
- NodeVisitor nodeVisitor;
+ NodeVisitor nodeVisitor(&liveObjects);
visitAllDOMNodes(&nodeVisitor);
nodeVisitor.applyGrouping();
+ v8::V8::AddObjectGroup(liveObjects.data(), liveObjects.size());
+
ObjectVisitor objectVisitor;
visitDOMObjects(&objectVisitor);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes