Revert "[protectors] Add use counters to track invalidations"
This reverts commit 5241205835
.
Reason for revert: Use counters are not the right approach, we
need histograms instead.
Original change's description:
> [protectors] Add use counters to track invalidations
>
> ... to make real world protector invalidations measurable.
>
> Chromium CL: https://crrev.com/c/2149324
>
> Drive-by: Add missing newline in protector tracing.
> Drive-by: Consistent naming for the regexp species protector.
>
> Bug: v8:9496
> Change-Id: I3c7238aa8024e03ea9e89daf83345b8ec4f0d768
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2149428
> Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
> Commit-Queue: Jakob Gruber <jgruber@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#67149}
TBR=ulan@chromium.org,jgruber@chromium.org
Change-Id: Ia36b598844fbad2166772298c2e2ec8f6b4f92b1
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: v8:9496
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2151358
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67170}
This commit is contained in:
parent
fa3e37e511
commit
daf59562c4
16
include/v8.h
16
include/v8.h
@ -8463,22 +8463,6 @@ class V8_EXPORT Isolate {
|
||||
kDateTimeFormatDateTimeStyle = 87,
|
||||
kBreakIteratorTypeWord = 88,
|
||||
kBreakIteratorTypeLine = 89,
|
||||
kInvalidatedArrayBufferDetachingProtector = 90,
|
||||
kInvalidatedArrayConstructorProtector = 91,
|
||||
kInvalidatedArrayIteratorLookupChainProtector = 92,
|
||||
kInvalidatedArraySpeciesLookupChainProtector = 93,
|
||||
kInvalidatedIsConcatSpreadableLookupChainProtector = 94,
|
||||
kInvalidatedMapIteratorLookupChainProtector = 95,
|
||||
kInvalidatedNoElementsProtector = 96,
|
||||
kInvalidatedPromiseHookProtector = 97,
|
||||
kInvalidatedPromiseResolveLookupChainProtector = 98,
|
||||
kInvalidatedPromiseSpeciesLookupChainProtector = 99,
|
||||
kInvalidatedPromiseThenLookupChainProtector = 100,
|
||||
kInvalidatedRegExpSpeciesLookupChainProtector = 101,
|
||||
kInvalidatedSetIteratorLookupChainProtector = 102,
|
||||
kInvalidatedStringIteratorLookupChainProtector = 103,
|
||||
kInvalidatedStringLengthOverflowLookupChainProtector = 104,
|
||||
kInvalidatedTypedArraySpeciesLookupChainProtector = 105,
|
||||
|
||||
// If you add new values here, you'll also need to update Chromium's:
|
||||
// web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to
|
||||
|
@ -17,7 +17,6 @@ namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
namespace {
|
||||
|
||||
void TraceProtectorInvalidation(const char* protector_name) {
|
||||
DCHECK(FLAG_trace_protector_invalidation);
|
||||
static constexpr char kInvalidateProtectorTracingCategory[] =
|
||||
@ -27,23 +26,11 @@ void TraceProtectorInvalidation(const char* protector_name) {
|
||||
DCHECK(FLAG_trace_protector_invalidation);
|
||||
|
||||
// TODO(jgruber): Remove the PrintF once tracing can output to stdout.
|
||||
i::PrintF("Invalidating protector cell %s\n", protector_name);
|
||||
i::PrintF("Invalidating protector cell %s", protector_name);
|
||||
TRACE_EVENT_INSTANT1("v8", kInvalidateProtectorTracingCategory,
|
||||
TRACE_EVENT_SCOPE_THREAD, kInvalidateProtectorTracingArg,
|
||||
protector_name);
|
||||
}
|
||||
|
||||
// Static asserts to ensure we have a use counter for every protector. If this
|
||||
// fails, add the use counter in V8 and chromium. Note: IsDefined is not
|
||||
// strictly needed but clarifies the intent of the static assert.
|
||||
constexpr bool IsDefined(v8::Isolate::UseCounterFeature) { return true; }
|
||||
#define V(Name, ...) \
|
||||
STATIC_ASSERT(IsDefined(v8::Isolate::kInvalidated##Name##Protector));
|
||||
|
||||
DECLARED_PROTECTORS_ON_ISOLATE(V)
|
||||
DECLARED_PROTECTORS_ON_NATIVE_CONTEXT(V)
|
||||
#undef V
|
||||
|
||||
} // namespace
|
||||
|
||||
#define INVALIDATE_PROTECTOR_ON_NATIVE_CONTEXT_DEFINITION(name, cell) \
|
||||
@ -71,7 +58,6 @@ DECLARED_PROTECTORS_ON_NATIVE_CONTEXT(
|
||||
if (FLAG_trace_protector_invalidation) { \
|
||||
TraceProtectorInvalidation(#name); \
|
||||
} \
|
||||
isolate->CountUsage(v8::Isolate::kInvalidated##name##Protector); \
|
||||
PropertyCell::SetValueWithInvalidation( \
|
||||
isolate, #cell, isolate->factory()->cell(), \
|
||||
handle(Smi::FromInt(kProtectorInvalid), isolate)); \
|
||||
|
@ -16,7 +16,7 @@ class Protectors : public AllStatic {
|
||||
static const int kProtectorInvalid = 0;
|
||||
|
||||
#define DECLARED_PROTECTORS_ON_NATIVE_CONTEXT(V) \
|
||||
V(RegExpSpeciesLookupChain, regexp_species_protector)
|
||||
V(RegExpSpeciesLookupChainProtector, regexp_species_protector)
|
||||
|
||||
#define DECLARED_PROTECTORS_ON_ISOLATE(V) \
|
||||
V(ArrayBufferDetaching, ArrayBufferDetachingProtector, \
|
||||
|
@ -205,7 +205,8 @@ void LookupIterator::InternalUpdateProtector(Isolate* isolate,
|
||||
|
||||
if (!Protectors::IsArraySpeciesLookupChainIntact(isolate) &&
|
||||
!Protectors::IsPromiseSpeciesLookupChainIntact(isolate) &&
|
||||
!Protectors::IsRegExpSpeciesLookupChainIntact(native_context) &&
|
||||
!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
native_context) &&
|
||||
!Protectors::IsTypedArraySpeciesLookupChainIntact(isolate)) {
|
||||
return;
|
||||
}
|
||||
@ -221,10 +222,12 @@ void LookupIterator::InternalUpdateProtector(Isolate* isolate,
|
||||
Protectors::InvalidatePromiseSpeciesLookupChain(isolate);
|
||||
return;
|
||||
} else if (receiver->IsJSRegExp(isolate)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainIntact(native_context)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
native_context)) {
|
||||
return;
|
||||
}
|
||||
Protectors::InvalidateRegExpSpeciesLookupChain(isolate, native_context);
|
||||
Protectors::InvalidateRegExpSpeciesLookupChainProtector(isolate,
|
||||
native_context);
|
||||
return;
|
||||
} else if (receiver->IsJSTypedArray(isolate)) {
|
||||
if (!Protectors::IsTypedArraySpeciesLookupChainIntact(isolate)) return;
|
||||
@ -250,10 +253,12 @@ void LookupIterator::InternalUpdateProtector(Isolate* isolate,
|
||||
Protectors::InvalidatePromiseSpeciesLookupChain(isolate);
|
||||
} else if (isolate->IsInAnyContext(*receiver,
|
||||
Context::REGEXP_PROTOTYPE_INDEX)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainIntact(native_context)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
native_context)) {
|
||||
return;
|
||||
}
|
||||
Protectors::InvalidateRegExpSpeciesLookupChain(isolate, native_context);
|
||||
Protectors::InvalidateRegExpSpeciesLookupChainProtector(isolate,
|
||||
native_context);
|
||||
} else if (isolate->IsInAnyContext(
|
||||
receiver->map(isolate).prototype(isolate),
|
||||
Context::TYPED_ARRAY_PROTOTYPE_INDEX)) {
|
||||
@ -296,7 +301,8 @@ void LookupIterator::InternalUpdateProtector(Isolate* isolate,
|
||||
|
||||
if (!Protectors::IsArraySpeciesLookupChainIntact(isolate) &&
|
||||
!Protectors::IsPromiseSpeciesLookupChainIntact(isolate) &&
|
||||
!Protectors::IsRegExpSpeciesLookupChainIntact(native_context) &&
|
||||
!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
native_context) &&
|
||||
!Protectors::IsTypedArraySpeciesLookupChainIntact(isolate)) {
|
||||
return;
|
||||
}
|
||||
@ -313,10 +319,12 @@ void LookupIterator::InternalUpdateProtector(Isolate* isolate,
|
||||
Protectors::InvalidatePromiseSpeciesLookupChain(isolate);
|
||||
} else if (isolate->IsInAnyContext(*receiver,
|
||||
Context::REGEXP_FUNCTION_INDEX)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainIntact(native_context)) {
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
native_context)) {
|
||||
return;
|
||||
}
|
||||
Protectors::InvalidateRegExpSpeciesLookupChain(isolate, native_context);
|
||||
Protectors::InvalidateRegExpSpeciesLookupChainProtector(isolate,
|
||||
native_context);
|
||||
} else if (IsTypedArrayFunctionInAnyContext(isolate, *receiver)) {
|
||||
if (!Protectors::IsTypedArraySpeciesLookupChainIntact(isolate)) return;
|
||||
Protectors::InvalidateTypedArraySpeciesLookupChain(isolate);
|
||||
|
@ -185,7 +185,7 @@ bool RegExpUtils::IsUnmodifiedRegExp(Isolate* isolate, Handle<Object> obj) {
|
||||
// property. Similar spots in CSA would use BranchIfFastRegExp_Strict in this
|
||||
// case.
|
||||
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainIntact(
|
||||
if (!Protectors::IsRegExpSpeciesLookupChainProtectorIntact(
|
||||
recv.GetCreationContext())) {
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user