Commit 1bc7d174 authored by Santiago Aboy Solanes's avatar Santiago Aboy Solanes Committed by V8 LUCI CQ

[string] Remove FLAG_thin_string and enable it all the time

It was added years ago and in 2017 it was enabled by default[1], which
means enough time has passed and we can remove the flag.

[1]: https://chromium-review.googlesource.com/c/v8/v8/+/528076/

Change-Id: I059417d4683910e86ebfddd93f504006094fa342
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2947406Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#75039}
parent 368a20bc
...@@ -1545,7 +1545,6 @@ DEFINE_BOOL(super_ic, true, "use an IC for super property loads") ...@@ -1545,7 +1545,6 @@ DEFINE_BOOL(super_ic, true, "use an IC for super property loads")
DEFINE_BOOL(enable_mega_dom_ic, false, "use MegaDOM IC state for API objects") DEFINE_BOOL(enable_mega_dom_ic, false, "use MegaDOM IC state for API objects")
// objects.cc // objects.cc
DEFINE_BOOL(thin_strings, true, "Enable ThinString support")
DEFINE_BOOL(trace_prototype_users, false, DEFINE_BOOL(trace_prototype_users, false,
"Trace updates to prototype user tracking") "Trace updates to prototype user tracking")
DEFINE_BOOL(trace_for_in_enumerate, false, "Trace for-in enumerate slow-paths") DEFINE_BOOL(trace_for_in_enumerate, false, "Trace for-in enumerate slow-paths")
......
...@@ -373,21 +373,20 @@ class InternalizedStringKey final : public StringTableKey { ...@@ -373,21 +373,20 @@ class InternalizedStringKey final : public StringTableKey {
DCHECK(string_->IsInternalizedString()); DCHECK(string_->IsInternalizedString());
return string_; return string_;
} }
if (FLAG_thin_strings) { // External strings get special treatment, to avoid copying their
// External strings get special treatment, to avoid copying their // contents as long as they are not uncached.
// contents as long as they are not uncached. StringShape shape(*string_);
StringShape shape(*string_); if (shape.IsExternalOneByte() && !shape.IsUncachedExternal()) {
if (shape.IsExternalOneByte() && !shape.IsUncachedExternal()) { return isolate->factory()
return isolate->factory() ->InternalizeExternalString<ExternalOneByteString>(string_);
->InternalizeExternalString<ExternalOneByteString>(string_); } else if (shape.IsExternalTwoByte() && !shape.IsUncachedExternal()) {
} else if (shape.IsExternalTwoByte() && !shape.IsUncachedExternal()) { return isolate->factory()
return isolate->factory() ->InternalizeExternalString<ExternalTwoByteString>(string_);
->InternalizeExternalString<ExternalTwoByteString>(string_); } else {
} // Otherwise allocate a new internalized string.
return isolate->factory()->NewInternalizedStringImpl(
string_, string_->length(), string_->raw_hash_field());
} }
// Otherwise allocate a new internalized string.
return isolate->factory()->NewInternalizedStringImpl(
string_, string_->length(), string_->raw_hash_field());
} }
private: private:
...@@ -402,28 +401,8 @@ Handle<String> StringTable::LookupString(Isolate* isolate, ...@@ -402,28 +401,8 @@ Handle<String> StringTable::LookupString(Isolate* isolate,
InternalizedStringKey key(string); InternalizedStringKey key(string);
Handle<String> result = LookupKey(isolate, &key); Handle<String> result = LookupKey(isolate, &key);
if (FLAG_thin_strings) { if (!string->IsInternalizedString()) {
if (!string->IsInternalizedString()) { string->MakeThin(isolate, *result);
string->MakeThin(isolate, *result);
}
} else { // !FLAG_thin_strings
if (string->IsConsString()) {
Handle<ConsString> cons = Handle<ConsString>::cast(string);
cons->set_first(*result);
cons->set_second(ReadOnlyRoots(isolate).empty_string());
} else if (string->IsSlicedString()) {
STATIC_ASSERT(static_cast<int>(ConsString::kSize) ==
static_cast<int>(SlicedString::kSize));
DisallowGarbageCollection no_gc;
bool one_byte = result->IsOneByteRepresentation();
Handle<Map> map = one_byte
? isolate->factory()->cons_one_byte_string_map()
: isolate->factory()->cons_string_map();
string->set_map(*map);
Handle<ConsString> cons = Handle<ConsString>::cast(string);
cons->set_first(*result);
cons->set_second(ReadOnlyRoots(isolate).empty_string());
}
} }
return result; return result;
} }
...@@ -628,9 +607,7 @@ Address StringTable::Data::TryStringToIndexOrLookupExisting(Isolate* isolate, ...@@ -628,9 +607,7 @@ Address StringTable::Data::TryStringToIndexOrLookupExisting(Isolate* isolate,
} }
String internalized = String::cast(string_table_data->Get(isolate, entry)); String internalized = String::cast(string_table_data->Get(isolate, entry));
if (FLAG_thin_strings) { string.MakeThin(isolate, internalized);
string.MakeThin(isolate, internalized);
}
return internalized.ptr(); return internalized.ptr();
} }
......
...@@ -357,7 +357,7 @@ void Deserializer::PostProcessNewObject(Handle<Map> map, Handle<HeapObject> obj, ...@@ -357,7 +357,7 @@ void Deserializer::PostProcessNewObject(Handle<Map> map, Handle<HeapObject> obj,
Handle<String> result = Handle<String> result =
isolate()->string_table()->LookupKey(isolate(), &key); isolate()->string_table()->LookupKey(isolate(), &key);
if (FLAG_thin_strings && *result != *string) { if (*result != *string) {
string->MakeThin(isolate(), *result); string->MakeThin(isolate(), *result);
// Mutate the given object handle so that the backreference entry is // Mutate the given object handle so that the backreference entry is
// also updated. // also updated.
......
...@@ -768,14 +768,14 @@ TEST(TryToName) { ...@@ -768,14 +768,14 @@ TEST(TryToName) {
ft.CheckTrue(key, expect_bailout); ft.CheckTrue(key, expect_bailout);
} }
if (FLAG_thin_strings) { {
// TryToName(<thin string>) => internalized version. // TryToName(<thin string>) => internalized version.
Handle<String> s = isolate->factory()->NewStringFromAsciiChecked("foo"); Handle<String> s = isolate->factory()->NewStringFromAsciiChecked("foo");
Handle<String> internalized = isolate->factory()->InternalizeString(s); Handle<String> internalized = isolate->factory()->InternalizeString(s);
ft.CheckTrue(s, expect_unique, internalized); ft.CheckTrue(s, expect_unique, internalized);
} }
if (FLAG_thin_strings) { {
// TryToName(<thin two-byte string>) => internalized version. // TryToName(<thin two-byte string>) => internalized version.
uc16 array1[] = {2001, 2002, 2003}; uc16 array1[] = {2001, 2002, 2003};
Handle<String> s = isolate->factory() Handle<String> s = isolate->factory()
......
...@@ -239,8 +239,6 @@ TEST(InspectTwoByteExternalizing) { ...@@ -239,8 +239,6 @@ TEST(InspectTwoByteExternalizing) {
// Inspect a one byte string, while the main thread externalizes it. Same as // Inspect a one byte string, while the main thread externalizes it. Same as
// InspectOneByteExternalizing, but using thin strings. // InspectOneByteExternalizing, but using thin strings.
TEST(InspectOneByteExternalizing_ThinString) { TEST(InspectOneByteExternalizing_ThinString) {
if (!FLAG_thin_strings) return;
CcTest::InitializeVM(); CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate(); Isolate* isolate = CcTest::i_isolate();
...@@ -302,7 +300,6 @@ TEST(InspectOneByteExternalizing_ThinString) { ...@@ -302,7 +300,6 @@ TEST(InspectOneByteExternalizing_ThinString) {
// bytes string. Same as InspectOneIntoTwoByteExternalizing, but using thin // bytes string. Same as InspectOneIntoTwoByteExternalizing, but using thin
// strings. // strings.
TEST(InspectOneIntoTwoByteExternalizing_ThinString) { TEST(InspectOneIntoTwoByteExternalizing_ThinString) {
if (!FLAG_thin_strings) return;
CcTest::InitializeVM(); CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate(); Isolate* isolate = CcTest::i_isolate();
...@@ -364,8 +361,6 @@ TEST(InspectOneIntoTwoByteExternalizing_ThinString) { ...@@ -364,8 +361,6 @@ TEST(InspectOneIntoTwoByteExternalizing_ThinString) {
// Inspect a two byte string, while the main thread externalizes it. Same as // Inspect a two byte string, while the main thread externalizes it. Same as
// InspectTwoByteExternalizing, but using thin strings. // InspectTwoByteExternalizing, but using thin strings.
TEST(InspectTwoByteExternalizing_ThinString) { TEST(InspectTwoByteExternalizing_ThinString) {
if (!FLAG_thin_strings) return;
CcTest::InitializeVM(); CcTest::InitializeVM();
Isolate* isolate = CcTest::i_isolate(); Isolate* isolate = CcTest::i_isolate();
......
...@@ -804,7 +804,7 @@ TEST(GCShortCutting) { ...@@ -804,7 +804,7 @@ TEST(GCShortCutting) {
factory->NewStringFromAsciiChecked("thin_string"); factory->NewStringFromAsciiChecked("thin_string");
Handle<String> internalized_string = Handle<String> internalized_string =
factory->InternalizeString(thin_string); factory->InternalizeString(thin_string);
DCHECK_IMPLIES(FLAG_thin_strings, thin_string->IsThinString()); DCHECK(thin_string->IsThinString());
DCHECK_NE(*thin_string, *internalized_string); DCHECK_NE(*thin_string, *internalized_string);
// Insert both keys into the map. // Insert both keys into the map.
...@@ -815,7 +815,7 @@ TEST(GCShortCutting) { ...@@ -815,7 +815,7 @@ TEST(GCShortCutting) {
// to the internalized string. // to the internalized string.
t.heap()->CollectGarbage(i::NEW_SPACE, t.heap()->CollectGarbage(i::NEW_SPACE,
i::GarbageCollectionReason::kTesting); i::GarbageCollectionReason::kTesting);
DCHECK_IMPLIES(FLAG_thin_strings && !FLAG_optimize_for_size, DCHECK_IMPLIES(!FLAG_optimize_for_size,
*thin_string == *internalized_string); *thin_string == *internalized_string);
// Check that getting the object points to one of the handles. // Check that getting the object points to one of the handles.
......
...@@ -1367,7 +1367,6 @@ TEST(InternalizeExternal) { ...@@ -1367,7 +1367,6 @@ TEST(InternalizeExternal) {
if (FLAG_minor_mc) return; if (FLAG_minor_mc) return;
#endif // ENABLE_MINOR_MC #endif // ENABLE_MINOR_MC
FLAG_stress_incremental_marking = false; FLAG_stress_incremental_marking = false;
FLAG_thin_strings = true;
CcTest::InitializeVM(); CcTest::InitializeVM();
i::Isolate* isolate = CcTest::i_isolate(); i::Isolate* isolate = CcTest::i_isolate();
Factory* factory = isolate->factory(); Factory* factory = isolate->factory();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment