303 lines
14 KiB
Diff
303 lines
14 KiB
Diff
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc.v8-tracedreference-fix 2019-10-21 15:06:42.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_embedder_graph_builder.cc 2019-10-23 14:30:25.679541652 -0400
|
||
|
@@ -173,8 +173,9 @@ class GC_PLUGIN_IGNORE(
|
||
|
uint16_t class_id) override;
|
||
|
|
||
|
// v8::EmbedderHeapTracer::TracedGlobalHandleVisitor override.
|
||
|
- void VisitTracedGlobalHandle(
|
||
|
- const v8::TracedGlobal<v8::Value>& value) override;
|
||
|
+ void VisitTracedReference(
|
||
|
+ const v8::TracedReference<v8::Value>& value) override;
|
||
|
+ void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>&) override;
|
||
|
|
||
|
// Visitor overrides.
|
||
|
void VisitRoot(void*, TraceDescriptor, const base::Location&) final;
|
||
|
@@ -508,8 +509,8 @@ void V8EmbedderGraphBuilder::VisitPersis
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-void V8EmbedderGraphBuilder::VisitTracedGlobalHandle(
|
||
|
- const v8::TracedGlobal<v8::Value>& value) {
|
||
|
+void V8EmbedderGraphBuilder::VisitTracedReference(
|
||
|
+ const v8::TracedReference<v8::Value>& value) {
|
||
|
const uint16_t class_id = value.WrapperClassId();
|
||
|
if (class_id != WrapperTypeInfo::kNodeClassId &&
|
||
|
class_id != WrapperTypeInfo::kObjectClassId)
|
||
|
@@ -517,6 +518,11 @@ void V8EmbedderGraphBuilder::VisitTraced
|
||
|
VisitPersistentHandleInternal(value.As<v8::Object>().Get(isolate_), class_id);
|
||
|
}
|
||
|
|
||
|
+void V8EmbedderGraphBuilder::VisitTracedGlobalHandle(
|
||
|
+ const v8::TracedGlobal<v8::Value>&) {
|
||
|
+ CHECK(false) << "Blink does not use v8::TracedGlobal.";
|
||
|
+}
|
||
|
+
|
||
|
void V8EmbedderGraphBuilder::VisitPersistentHandle(
|
||
|
v8::Persistent<v8::Value>* value,
|
||
|
uint16_t class_id) {
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc.v8-tracedreference-fix 2019-10-21 15:06:42.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/bindings/core/v8/v8_gc_controller.cc 2019-10-23 14:30:25.683541568 -0400
|
||
|
@@ -260,7 +260,11 @@ class DOMWrapperForwardingVisitor final
|
||
|
VisitHandle(value, class_id);
|
||
|
}
|
||
|
|
||
|
- void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>& value) final {
|
||
|
+ void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>&) final {
|
||
|
+ CHECK(false) << "Blink does not use v8::TracedGlobal.";
|
||
|
+ }
|
||
|
+
|
||
|
+ void VisitTracedReference(const v8::TracedReference<v8::Value>& value) final {
|
||
|
VisitHandle(&value, value.WrapperClassId());
|
||
|
}
|
||
|
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/dom_data_store.h.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/dom_data_store.h
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/dom_data_store.h.v8-tracedreference-fix 2019-10-21 15:06:44.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/dom_data_store.h 2019-10-23 14:30:25.685541526 -0400
|
||
|
@@ -229,6 +229,11 @@ class DOMDataStore {
|
||
|
DOMWorldWrapperReference(v8::Isolate* isolate, v8::Local<v8::Object> handle)
|
||
|
: TraceWrapperV8Reference(isolate, handle) {}
|
||
|
|
||
|
+ ~DOMWorldWrapperReference() {
|
||
|
+ // Destruction of a reference should clear it immediately.
|
||
|
+ Clear();
|
||
|
+ }
|
||
|
+
|
||
|
// Move support without write barrier.
|
||
|
DOMWorldWrapperReference(DOMWorldWrapperReference&& other)
|
||
|
: TraceWrapperV8Reference() {
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/script_wrappable.h.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/script_wrappable.h
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/script_wrappable.h.v8-tracedreference-fix 2019-10-21 15:06:44.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/script_wrappable.h 2019-10-23 14:30:25.687541484 -0400
|
||
|
@@ -161,6 +161,11 @@ class PLATFORM_EXPORT ScriptWrappable
|
||
|
return main_world_wrapper_.NewLocal(isolate);
|
||
|
}
|
||
|
|
||
|
+ static_assert(
|
||
|
+ std::is_trivially_destructible<
|
||
|
+ TraceWrapperV8Reference<v8::Object>>::value,
|
||
|
+ "TraceWrapperV8Reference<v8::Object> should be trivially destructible.");
|
||
|
+
|
||
|
TraceWrapperV8Reference<v8::Object> main_world_wrapper_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(ScriptWrappable);
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h.v8-tracedreference-fix 2019-10-21 15:06:44.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h 2019-10-23 14:30:25.688541463 -0400
|
||
|
@@ -11,15 +11,6 @@
|
||
|
#include "third_party/blink/renderer/platform/heap/unified_heap_marking_visitor.h"
|
||
|
#include "v8/include/v8.h"
|
||
|
|
||
|
-namespace v8 {
|
||
|
-
|
||
|
-template <typename T>
|
||
|
-struct TracedGlobalTrait<v8::TracedGlobal<T>> {
|
||
|
- static constexpr bool kRequiresExplicitDestruction = false;
|
||
|
-};
|
||
|
-
|
||
|
-} // namespace v8
|
||
|
-
|
||
|
namespace blink {
|
||
|
|
||
|
/**
|
||
|
@@ -50,8 +41,8 @@ class TraceWrapperV8Reference {
|
||
|
|
||
|
bool IsEmpty() const { return handle_.IsEmpty(); }
|
||
|
void Clear() { handle_.Reset(); }
|
||
|
- ALWAYS_INLINE const v8::TracedGlobal<T>& Get() const { return handle_; }
|
||
|
- ALWAYS_INLINE v8::TracedGlobal<T>& Get() { return handle_; }
|
||
|
+ ALWAYS_INLINE const v8::TracedReference<T>& Get() const { return handle_; }
|
||
|
+ ALWAYS_INLINE v8::TracedReference<T>& Get() { return handle_; }
|
||
|
|
||
|
template <typename S>
|
||
|
const TraceWrapperV8Reference<S>& Cast() const {
|
||
|
@@ -124,7 +115,7 @@ class TraceWrapperV8Reference {
|
||
|
UnifiedHeapMarkingVisitor::WriteBarrier(UnsafeCast<v8::Value>());
|
||
|
}
|
||
|
|
||
|
- v8::TracedGlobal<T> handle_;
|
||
|
+ v8::TracedReference<T> handle_;
|
||
|
};
|
||
|
|
||
|
} // namespace blink
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/wrapper_type_info.h.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/wrapper_type_info.h
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/wrapper_type_info.h.v8-tracedreference-fix 2019-10-21 15:06:44.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/bindings/wrapper_type_info.h 2019-10-23 14:30:25.689541442 -0400
|
||
|
@@ -122,7 +122,7 @@ struct WrapperTypeInfo {
|
||
|
wrapper->SetWrapperClassId(wrapper_class_id);
|
||
|
}
|
||
|
|
||
|
- void ConfigureWrapper(v8::TracedGlobal<v8::Object>* wrapper) const {
|
||
|
+ void ConfigureWrapper(v8::TracedReference<v8::Object>* wrapper) const {
|
||
|
wrapper->SetWrapperClassId(wrapper_class_id);
|
||
|
}
|
||
|
|
||
|
@@ -177,7 +177,7 @@ inline T* GetInternalField(const v8::Per
|
||
|
}
|
||
|
|
||
|
template <typename T, int offset>
|
||
|
-inline T* GetInternalField(const v8::TracedGlobal<v8::Object>& global) {
|
||
|
+inline T* GetInternalField(const v8::TracedReference<v8::Object>& global) {
|
||
|
DCHECK_LT(offset, v8::Object::InternalFieldCount(global));
|
||
|
return reinterpret_cast<T*>(
|
||
|
v8::Object::GetAlignedPointerFromInternalField(global, offset));
|
||
|
@@ -198,7 +198,7 @@ inline ScriptWrappable* ToScriptWrappabl
|
||
|
}
|
||
|
|
||
|
inline ScriptWrappable* ToScriptWrappable(
|
||
|
- const v8::TracedGlobal<v8::Object>& wrapper) {
|
||
|
+ const v8::TracedReference<v8::Object>& wrapper) {
|
||
|
return GetInternalField<ScriptWrappable, kV8DOMWrapperObjectIndex>(wrapper);
|
||
|
}
|
||
|
|
||
|
@@ -219,7 +219,8 @@ inline void* ToUntypedWrappable(const v8
|
||
|
return GetInternalField<void, kV8DOMWrapperObjectIndex>(wrapper);
|
||
|
}
|
||
|
|
||
|
-inline void* ToUntypedWrappable(const v8::TracedGlobal<v8::Object>& wrapper) {
|
||
|
+inline void* ToUntypedWrappable(
|
||
|
+ const v8::TracedReference<v8::Object>& wrapper) {
|
||
|
return GetInternalField<void, kV8DOMWrapperObjectIndex>(wrapper);
|
||
|
}
|
||
|
|
||
|
@@ -233,7 +234,7 @@ inline const WrapperTypeInfo* ToWrapperT
|
||
|
}
|
||
|
|
||
|
inline const WrapperTypeInfo* ToWrapperTypeInfo(
|
||
|
- const v8::TracedGlobal<v8::Object>& wrapper) {
|
||
|
+ const v8::TracedReference<v8::Object>& wrapper) {
|
||
|
return GetInternalField<WrapperTypeInfo, kV8DOMWrapperTypeIndex>(wrapper);
|
||
|
}
|
||
|
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/thread_state.cc.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/thread_state.cc
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/thread_state.cc.v8-tracedreference-fix 2019-10-21 15:06:45.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/thread_state.cc 2019-10-23 14:30:25.693541359 -0400
|
||
|
@@ -1451,11 +1451,15 @@ class ClearReferencesInDeadObjectsVisito
|
||
|
value->Reset();
|
||
|
}
|
||
|
|
||
|
- void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>& value) final {
|
||
|
+ void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>&) final {
|
||
|
+ CHECK(false) << "Blink does not use v8::TracedGlobal.";
|
||
|
+ }
|
||
|
+
|
||
|
+ void VisitTracedReference(const v8::TracedReference<v8::Value>& value) final {
|
||
|
// TODO(mlippautz): Avoid const_cast after changing the API to allow
|
||
|
- // modificaton of the TracedGlobal handle.
|
||
|
- if (InDeadObject(&const_cast<v8::TracedGlobal<v8::Value>&>(value)))
|
||
|
- const_cast<v8::TracedGlobal<v8::Value>&>(value).Reset();
|
||
|
+ // modificaton of the handle.
|
||
|
+ if (InDeadObject(&const_cast<v8::TracedReference<v8::Value>&>(value)))
|
||
|
+ const_cast<v8::TracedReference<v8::Value>&>(value).Reset();
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
@@ -1584,11 +1588,15 @@ class UnpoisonHandlesVisitor final
|
||
|
VisitSlot(value, sizeof(v8::Persistent<v8::Value>));
|
||
|
}
|
||
|
|
||
|
- void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>& value) final {
|
||
|
+ void VisitTracedGlobalHandle(const v8::TracedGlobal<v8::Value>&) final {
|
||
|
+ CHECK(false) << "Blink does not use v8::TracedGlobal.";
|
||
|
+ }
|
||
|
+
|
||
|
+ void VisitTracedReference(const v8::TracedReference<v8::Value>& value) final {
|
||
|
// TODO(mlippautz): Avoid const_cast after changing the API to allow
|
||
|
- // modificaton of the TracedGlobal handle.
|
||
|
- VisitSlot(&const_cast<v8::TracedGlobal<v8::Value>&>(value),
|
||
|
- sizeof(v8::TracedGlobal<v8::Value>));
|
||
|
+ // modificaton of the handle.
|
||
|
+ VisitSlot(&const_cast<v8::TracedReference<v8::Value>&>(value),
|
||
|
+ sizeof(v8::TracedReference<v8::Value>));
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.cc.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.cc
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.cc.v8-tracedreference-fix 2019-10-21 15:06:45.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.cc 2019-10-23 14:32:34.722840885 -0400
|
||
|
@@ -147,16 +147,19 @@ bool UnifiedHeapController::IsTracingDon
|
||
|
return is_tracing_done_;
|
||
|
}
|
||
|
|
||
|
-bool UnifiedHeapController::IsRootForNonTracingGCInternal(
|
||
|
- const v8::TracedGlobal<v8::Value>& handle) {
|
||
|
+namespace {
|
||
|
+
|
||
|
+bool IsRootForNonTracingGCInternal(
|
||
|
+ const v8::TracedReference<v8::Value>& handle) {
|
||
|
const uint16_t class_id = handle.WrapperClassId();
|
||
|
- // Stand-alone TracedGlobal reference or kCustomWrappableId. Keep as root as
|
||
|
+ // Stand-alone reference or kCustomWrappableId. Keep as root as
|
||
|
// we don't know better.
|
||
|
if (class_id != WrapperTypeInfo::kNodeClassId &&
|
||
|
class_id != WrapperTypeInfo::kObjectClassId)
|
||
|
return true;
|
||
|
|
||
|
- const v8::TracedGlobal<v8::Object>& traced = handle.As<v8::Object>();
|
||
|
+ const v8::TracedReference<v8::Object>& traced =
|
||
|
+ handle.template As<v8::Object>();
|
||
|
if (ToWrapperTypeInfo(traced)->IsActiveScriptWrappable() &&
|
||
|
ToScriptWrappable(traced)->HasPendingActivity()) {
|
||
|
return true;
|
||
|
@@ -169,8 +172,10 @@ bool UnifiedHeapController::IsRootForNon
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
+} // namespace
|
||
|
+
|
||
|
void UnifiedHeapController::ResetHandleInNonTracingGC(
|
||
|
- const v8::TracedGlobal<v8::Value>& handle) {
|
||
|
+ const v8::TracedReference<v8::Value>& handle) {
|
||
|
const uint16_t class_id = handle.WrapperClassId();
|
||
|
// Only consider handles that have not been treated as roots, see
|
||
|
// IsRootForNonTracingGCInternal.
|
||
|
@@ -178,15 +183,21 @@ void UnifiedHeapController::ResetHandleI
|
||
|
class_id != WrapperTypeInfo::kObjectClassId)
|
||
|
return;
|
||
|
|
||
|
- const v8::TracedGlobal<v8::Object>& traced = handle.As<v8::Object>();
|
||
|
+ const v8::TracedReference<v8::Object>& traced = handle.As<v8::Object>();
|
||
|
ToScriptWrappable(traced)->UnsetWrapperIfAny();
|
||
|
}
|
||
|
|
||
|
bool UnifiedHeapController::IsRootForNonTracingGC(
|
||
|
- const v8::TracedGlobal<v8::Value>& handle) {
|
||
|
+ const v8::TracedReference<v8::Value>& handle) {
|
||
|
return IsRootForNonTracingGCInternal(handle);
|
||
|
}
|
||
|
|
||
|
+bool UnifiedHeapController::IsRootForNonTracingGC(
|
||
|
+ const v8::TracedGlobal<v8::Value>& handle) {
|
||
|
+ CHECK(false) << "Blink does not use v8::TracedGlobal.";
|
||
|
+ return false;
|
||
|
+}
|
||
|
+
|
||
|
void UnifiedHeapController::ReportBufferedAllocatedSizeIfPossible() {
|
||
|
DCHECK(base::FeatureList::IsEnabled(
|
||
|
blink::features::kBlinkHeapUnifiedGCScheduling));
|
||
|
diff -up chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.h.v8-tracedreference-fix chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.h
|
||
|
--- chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.h.v8-tracedreference-fix 2019-10-21 15:06:45.000000000 -0400
|
||
|
+++ chromium-78.0.3904.70/third_party/blink/renderer/platform/heap/unified_heap_controller.h 2019-10-23 14:30:25.695541317 -0400
|
||
|
@@ -45,8 +45,9 @@ class PLATFORM_EXPORT UnifiedHeapControl
|
||
|
void RegisterV8References(const std::vector<std::pair<void*, void*>>&) final;
|
||
|
bool AdvanceTracing(double) final;
|
||
|
bool IsTracingDone() final;
|
||
|
+ bool IsRootForNonTracingGC(const v8::TracedReference<v8::Value>&) final;
|
||
|
bool IsRootForNonTracingGC(const v8::TracedGlobal<v8::Value>&) final;
|
||
|
- void ResetHandleInNonTracingGC(const v8::TracedGlobal<v8::Value>&) final;
|
||
|
+ void ResetHandleInNonTracingGC(const v8::TracedReference<v8::Value>&) final;
|
||
|
|
||
|
ThreadState* thread_state() const { return thread_state_; }
|
||
|
|
||
|
@@ -59,9 +60,6 @@ class PLATFORM_EXPORT UnifiedHeapControl
|
||
|
void DecreaseAllocatedSpace(size_t) final {}
|
||
|
|
||
|
private:
|
||
|
- static bool IsRootForNonTracingGCInternal(
|
||
|
- const v8::TracedGlobal<v8::Value>& handle);
|
||
|
-
|
||
|
void ReportBufferedAllocatedSizeIfPossible();
|
||
|
|
||
|
ThreadState* const thread_state_;
|