| Index: third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
|
| index b7fd54ad2023baeac542ff27a43d931ceeeb44e6..ba550a28e76deadff04231bc8ef97f5af452c36b 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
|
| @@ -135,7 +135,8 @@ class MinorGCUnmodifiedWrapperVisitor : public v8::PersistentHandleVisitor {
|
| }
|
| // FIXME: Remove the special handling for SVG elements.
|
| // We currently can't collect SVG Elements from minor gc, as we have
|
| - // strong references from SVG property tear-offs keeping context SVG element alive.
|
| + // strong references from SVG property tear-offs keeping context SVG
|
| + // element alive.
|
| if (node->isSVGElement()) {
|
| v8::Persistent<v8::Object>::Cast(*value).MarkActive();
|
| return;
|
| @@ -398,15 +399,18 @@ void V8GCController::gcEpilogue(v8::Isolate* isolate,
|
| // when expected.
|
| if (flags & v8::kGCCallbackFlagForced) {
|
| // This single GC is not enough for two reasons:
|
| - // (1) The GC is not precise because the GC scans on-stack pointers conservatively.
|
| - // (2) One GC is not enough to break a chain of persistent handles. It's possible that
|
| - // some heap allocated objects own objects that contain persistent handles
|
| - // pointing to other heap allocated objects. To break the chain, we need multiple GCs.
|
| + // (1) The GC is not precise because the GC scans on-stack pointers
|
| + // conservatively.
|
| + // (2) One GC is not enough to break a chain of persistent handles. It's
|
| + // possible that some heap allocated objects own objects that
|
| + // contain persistent handles pointing to other heap allocated
|
| + // objects. To break the chain, we need multiple GCs.
|
| //
|
| - // Regarding (1), we force a precise GC at the end of the current event loop. So if you want
|
| - // to collect all garbage, you need to wait until the next event loop.
|
| - // Regarding (2), it would be OK in practice to trigger only one GC per gcEpilogue, because
|
| - // GCController.collectAll() forces multiple V8's GC.
|
| + // Regarding (1), we force a precise GC at the end of the current event
|
| + // loop. So if you want to collect all garbage, you need to wait until the
|
| + // next event loop. Regarding (2), it would be OK in practice to trigger
|
| + // only one GC per gcEpilogue, because GCController.collectAll() forces
|
| + // multiple V8's GC.
|
| currentThreadState->collectGarbage(BlinkGC::HeapPointersOnStack,
|
| BlinkGC::GCWithSweep,
|
| BlinkGC::ForcedGC);
|
|
|