Revert "Add counter to track Date::getTimezoneOffset()."

This reverts commit 14ebea15a4.

Reason for revert: CountUsage() can't be called without a C entry frame.

Note this counter was never hooked up in chromium. Besides removing the
problematic CountUsage() call, this CL also makes the call path more
robust against similar future issues by adding {gc,handle,js} disallow
scopes.

Original change's description:
> Add counter to track `Date::getTimezoneOffset()`.
>
> Bug: chromium:915620
> Change-Id: I75579080098632639b125b2252b3ab9615c7ea95
> Reviewed-on: https://chromium-review.googlesource.com/c/1379876
> Reviewed-by: Yang Guo <yangguo@chromium.org>
> Commit-Queue: Mike West <mkwst@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#58306}

TBR=yangguo@chromium.org,mkwst@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Tbr: ulan@chromium.org
Bug: chromium:915620,v8:10460
Change-Id: I2dd2e14947fe527de24ea644b4b33897f437a119
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2165790
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67399}
This commit is contained in:
Jakob Gruber 2020-04-27 15:42:24 +02:00 committed by Commit Bot
parent 7ae30cb7b6
commit 054f5f69e5
4 changed files with 17 additions and 9 deletions

View File

@ -8447,7 +8447,7 @@ class V8_EXPORT Isolate {
kOptimizedFunctionWithOneShotBytecode = 71, kOptimizedFunctionWithOneShotBytecode = 71,
kRegExpMatchIsTrueishOnNonJSRegExp = 72, kRegExpMatchIsTrueishOnNonJSRegExp = 72,
kRegExpMatchIsFalseishOnJSRegExp = 73, kRegExpMatchIsFalseishOnJSRegExp = 73,
kDateGetTimezoneOffset = 74, kDateGetTimezoneOffset = 74, // Unused.
kStringNormalize = 75, kStringNormalize = 75,
kCallSiteAPIGetFunctionSloppyCall = 76, kCallSiteAPIGetFunctionSloppyCall = 76,
kCallSiteAPIGetThisSloppyCall = 77, kCallSiteAPIGetThisSloppyCall = 77,

View File

@ -50,11 +50,14 @@ void DateBuiltinsAssembler::Generate_DatePrototype_GetField(
BIND(&stamp_mismatch); BIND(&stamp_mismatch);
} }
TNode<ExternalReference> isolate_ptr =
ExternalConstant(ExternalReference::isolate_address(isolate()));
TNode<Smi> field_index_smi = SmiConstant(field_index); TNode<Smi> field_index_smi = SmiConstant(field_index);
TNode<ExternalReference> function = TNode<ExternalReference> function =
ExternalConstant(ExternalReference::get_date_field_function()); ExternalConstant(ExternalReference::get_date_field_function());
TNode<Object> result = CAST(CallCFunction( TNode<Object> result = CAST(CallCFunction(
function, MachineType::AnyTagged(), function, MachineType::AnyTagged(),
std::make_pair(MachineType::Pointer(), isolate_ptr),
std::make_pair(MachineType::AnyTagged(), date_receiver), std::make_pair(MachineType::AnyTagged(), date_receiver),
std::make_pair(MachineType::AnyTagged(), field_index_smi))); std::make_pair(MachineType::AnyTagged(), field_index_smi)));
Return(result); Return(result);

View File

@ -5714,18 +5714,24 @@ double JSDate::CurrentTimeValue(Isolate* isolate) {
} }
// static // static
Address JSDate::GetField(Address raw_object, Address smi_index) { Address JSDate::GetField(Isolate* isolate, Address raw_object,
Address smi_index) {
// Called through CallCFunction.
DisallowHeapAllocation no_gc;
DisallowHandleAllocation no_handles;
DisallowJavascriptExecution no_js(isolate);
Object object(raw_object); Object object(raw_object);
Smi index(smi_index); Smi index(smi_index);
return JSDate::cast(object) return JSDate::cast(object)
.DoGetField(static_cast<FieldIndex>(index.value())) .DoGetField(isolate, static_cast<FieldIndex>(index.value()))
.ptr(); .ptr();
} }
Object JSDate::DoGetField(FieldIndex index) { Object JSDate::DoGetField(Isolate* isolate, FieldIndex index) {
DCHECK_NE(index, kDateValue); DCHECK_NE(index, kDateValue);
DateCache* date_cache = GetIsolate()->date_cache(); DateCache* date_cache = isolate->date_cache();
if (index < kFirstUncachedField) { if (index < kFirstUncachedField) {
Object stamp = cache_stamp(); Object stamp = cache_stamp();
@ -5782,7 +5788,6 @@ Object JSDate::GetUTCField(FieldIndex index, double value,
int64_t time_ms = static_cast<int64_t>(value); int64_t time_ms = static_cast<int64_t>(value);
if (index == kTimezoneOffset) { if (index == kTimezoneOffset) {
GetIsolate()->CountUsage(v8::Isolate::kDateGetTimezoneOffset);
return Smi::FromInt(date_cache->TimezoneOffset(time_ms)); return Smi::FromInt(date_cache->TimezoneOffset(time_ms));
} }

View File

@ -1280,7 +1280,8 @@ class JSDate : public TorqueGeneratedJSDate<JSDate, JSObject> {
// {raw_date} is a tagged Object pointer. // {raw_date} is a tagged Object pointer.
// {smi_index} is a tagged Smi. // {smi_index} is a tagged Smi.
// The return value is a tagged Object pointer. // The return value is a tagged Object pointer.
static Address GetField(Address raw_date, Address smi_index); static Address GetField(Isolate* isolate, Address raw_date,
Address smi_index);
static Handle<Object> SetValue(Handle<JSDate> date, double v); static Handle<Object> SetValue(Handle<JSDate> date, double v);
@ -1320,8 +1321,7 @@ class JSDate : public TorqueGeneratedJSDate<JSDate, JSObject> {
}; };
private: private:
inline Object DoGetField(FieldIndex index); Object DoGetField(Isolate* isolate, FieldIndex index);
Object GetUTCField(FieldIndex index, double value, DateCache* date_cache); Object GetUTCField(FieldIndex index, double value, DateCache* date_cache);
// Computes and caches the cacheable fields of the date. // Computes and caches the cacheable fields of the date.