| Index: third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
|
| deleted file mode 100644
|
| index 0c9a2074d4f112f081ccc3295c41bd2f8e6b02b0..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappableVisitorTest.cpp
|
| +++ /dev/null
|
| @@ -1,147 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "bindings/core/v8/ScriptWrappableVisitor.h"
|
| -
|
| -#include "bindings/core/v8/ToV8.h"
|
| -#include "bindings/core/v8/V8BindingForTesting.h"
|
| -#include "bindings/core/v8/V8GCController.h"
|
| -#include "bindings/core/v8/V8PerIsolateData.h"
|
| -#include "core/testing/DeathAwareScriptWrappable.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace blink {
|
| -
|
| -static void preciselyCollectGarbage()
|
| -{
|
| - ThreadState::current()->collectAllGarbage();
|
| -}
|
| -
|
| -static void runV8Scavenger(v8::Isolate* isolate)
|
| -{
|
| - V8GCController::collectGarbage(isolate, true);
|
| -}
|
| -
|
| -static void runV8FullGc(v8::Isolate* isolate)
|
| -{
|
| - V8GCController::collectGarbage(isolate, false);
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, OilpanCollectObjectsNotReachableFromV8)
|
| -{
|
| - V8TestingScope scope;
|
| - v8::Isolate* isolate = scope.isolate();
|
| -
|
| - {
|
| - v8::HandleScope handleScope(isolate);
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - DeathAwareScriptWrappable::observeDeathsOf(object);
|
| -
|
| - // Creates new V8 wrapper and associates it with global scope
|
| - toV8(object, scope.context()->Global(), isolate);
|
| - }
|
| -
|
| - runV8Scavenger(isolate);
|
| - runV8FullGc(isolate);
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_TRUE(DeathAwareScriptWrappable::hasDied());
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, OilpanDoesntCollectObjectsReachableFromV8)
|
| -{
|
| - V8TestingScope scope;
|
| - v8::Isolate* isolate = scope.isolate();
|
| - v8::HandleScope handleScope(isolate);
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - DeathAwareScriptWrappable::observeDeathsOf(object);
|
| -
|
| - // Creates new V8 wrapper and associates it with global scope
|
| - toV8(object, scope.context()->Global(), isolate);
|
| -
|
| - runV8Scavenger(isolate);
|
| - runV8FullGc(isolate);
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_FALSE(DeathAwareScriptWrappable::hasDied());
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, V8ReportsLiveObjectsDuringScavenger)
|
| -{
|
| - V8TestingScope scope;
|
| - v8::Isolate* isolate = scope.isolate();
|
| - v8::HandleScope handleScope(isolate);
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - DeathAwareScriptWrappable::observeDeathsOf(object);
|
| -
|
| - v8::Local<v8::Value> wrapper = toV8(
|
| - object, scope.context()->Global(), isolate);
|
| - EXPECT_TRUE(wrapper->IsObject());
|
| - v8::Local<v8::Object> wrapperObject = wrapper->ToObject();
|
| - // V8 collects wrappers with unmodified maps (as they can be recreated
|
| - // without loosing any data if needed). We need to create some property on
|
| - // wrapper so V8 will not see it as unmodified.
|
| - EXPECT_TRUE(wrapperObject->CreateDataProperty(scope.context(), 1, wrapper).IsJust());
|
| -
|
| - runV8Scavenger(isolate);
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_FALSE(DeathAwareScriptWrappable::hasDied());
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, V8ReportsLiveObjectsDuringFullGc)
|
| -{
|
| - V8TestingScope scope;
|
| - v8::Isolate* isolate = scope.isolate();
|
| - v8::HandleScope handleScope(isolate);
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - DeathAwareScriptWrappable::observeDeathsOf(object);
|
| -
|
| - toV8(object, scope.context()->Global(), isolate);
|
| -
|
| - runV8Scavenger(isolate);
|
| - runV8FullGc(isolate);
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_FALSE(DeathAwareScriptWrappable::hasDied());
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, OilpanClearsHeadersWhenObjectDied)
|
| -{
|
| - V8TestingScope scope;
|
| -
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - ScriptWrappableVisitor* visitor =
|
| - V8PerIsolateData::from(scope.isolate())->scriptWrappableVisitor();
|
| - auto header = HeapObjectHeader::fromPayload(object);
|
| - visitor->getHeadersToUnmark()->append(header);
|
| -
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_FALSE(visitor->getHeadersToUnmark()->contains(header));
|
| - visitor->getHeadersToUnmark()->clear();
|
| -}
|
| -
|
| -TEST(ScriptWrappableVisitorTest, OilpanClearsMarkingDequeWhenObjectDied)
|
| -{
|
| - V8TestingScope scope;
|
| -
|
| - DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::create();
|
| - ScriptWrappableVisitor* visitor =
|
| - V8PerIsolateData::from(scope.isolate())->scriptWrappableVisitor();
|
| - visitor->pushToMarkingDeque(
|
| - TraceTrait<DeathAwareScriptWrappable>::markWrapper,
|
| - TraceTrait<DeathAwareScriptWrappable>::heapObjectHeader,
|
| - object);
|
| -
|
| - EXPECT_EQ(visitor->getMarkingDeque()->first().rawObjectPointer(), object);
|
| -
|
| - preciselyCollectGarbage();
|
| -
|
| - EXPECT_EQ(visitor->getMarkingDeque()->first().rawObjectPointer(), nullptr);
|
| - visitor->getMarkingDeque()->clear();
|
| - visitor->getVerifierDeque()->clear();
|
| -}
|
| -
|
| -} // namespace blink
|
|
|