Skip to content

Commit 799dfad

Browse files
ulanCommit Bot
authored andcommitted
Prepare bottleneck for setting instance descriptors.
This refactors Map operations to update the instance descriptors and the number of own descriptors via the SetInstanceDescriptors bottleneck. This will allow us to add a special marking barrier for these updates. Bug: v8:8486 Change-Id: Ie9c746d4bcdd6166d38402622734693fa59faf21 Reviewed-on: https://chromium-review.googlesource.com/c/1354883 Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#57934}
1 parent 11e4568 commit 799dfad

File tree

10 files changed

+134
-98
lines changed

10 files changed

+134
-98
lines changed

src/bootstrapper.cc

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,13 +1095,13 @@ void Genesis::CreateJSProxyMaps() {
10951095
Descriptor d = Descriptor::DataField(isolate(), factory()->proxy_string(),
10961096
JSProxyRevocableResult::kProxyIndex,
10971097
NONE, Representation::Tagged());
1098-
map->AppendDescriptor(&d);
1098+
map->AppendDescriptor(isolate(), &d);
10991099
}
11001100
{ // revoke
11011101
Descriptor d = Descriptor::DataField(
11021102
isolate(), factory()->revoke_string(),
11031103
JSProxyRevocableResult::kRevokeIndex, NONE, Representation::Tagged());
1104-
map->AppendDescriptor(&d);
1104+
map->AppendDescriptor(isolate(), &d);
11051105
}
11061106

11071107
Map::SetPrototype(isolate(), map, isolate()->initial_object_prototype());
@@ -1391,7 +1391,7 @@ static void InstallError(Isolate* isolate, Handle<JSObject> global,
13911391
Handle<AccessorInfo> info = factory->error_stack_accessor();
13921392
Descriptor d = Descriptor::AccessorConstant(handle(info->name(), isolate),
13931393
info, DONT_ENUM);
1394-
initial_map->AppendDescriptor(&d);
1394+
initial_map->AppendDescriptor(isolate, &d);
13951395
}
13961396
}
13971397

@@ -1661,7 +1661,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
16611661
{ // Add length.
16621662
Descriptor d = Descriptor::AccessorConstant(
16631663
factory->length_string(), factory->array_length_accessor(), attribs);
1664-
initial_map->AppendDescriptor(&d);
1664+
initial_map->AppendDescriptor(isolate(), &d);
16651665
}
16661666

16671667
InstallWithIntrinsicDefaultProto(isolate_, array_function,
@@ -1950,7 +1950,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
19501950
{ // Add length.
19511951
Descriptor d = Descriptor::AccessorConstant(
19521952
factory->length_string(), factory->string_length_accessor(), attribs);
1953-
string_map->AppendDescriptor(&d);
1953+
string_map->AppendDescriptor(isolate(), &d);
19541954
}
19551955

19561956
// Install the String.fromCharCode function.
@@ -2640,7 +2640,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
26402640
Descriptor d = Descriptor::DataField(isolate(), factory->lastIndex_string(),
26412641
JSRegExp::kLastIndexFieldIndex,
26422642
writable, Representation::Tagged());
2643-
initial_map->AppendDescriptor(&d);
2643+
initial_map->AppendDescriptor(isolate(), &d);
26442644

26452645
{ // Internal: RegExpInternalMatch
26462646
Handle<JSFunction> function =
@@ -3492,7 +3492,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
34923492
Descriptor::DataField(isolate(), factory->to_string_tag_symbol(),
34933493
JSModuleNamespace::kToStringTagFieldIndex,
34943494
attribs, Representation::Tagged());
3495-
map->AppendDescriptor(&d);
3495+
map->AppendDescriptor(isolate(), &d);
34963496
}
34973497
}
34983498

@@ -3506,14 +3506,14 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
35063506
Descriptor d = Descriptor::DataField(isolate(), factory->value_string(),
35073507
JSIteratorResult::kValueIndex, NONE,
35083508
Representation::Tagged());
3509-
map->AppendDescriptor(&d);
3509+
map->AppendDescriptor(isolate(), &d);
35103510
}
35113511

35123512
{ // done
35133513
Descriptor d = Descriptor::DataField(isolate(), factory->done_string(),
35143514
JSIteratorResult::kDoneIndex, NONE,
35153515
Representation::Tagged());
3516-
map->AppendDescriptor(&d);
3516+
map->AppendDescriptor(isolate(), &d);
35173517
}
35183518

35193519
map->SetConstructor(native_context()->object_function());
@@ -3689,14 +3689,14 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
36893689
Descriptor d = Descriptor::AccessorConstant(
36903690
factory->length_string(), factory->bound_function_length_accessor(),
36913691
roc_attribs);
3692-
map->AppendDescriptor(&d);
3692+
map->AppendDescriptor(isolate(), &d);
36933693
}
36943694

36953695
{ // name
36963696
Descriptor d = Descriptor::AccessorConstant(
36973697
factory->name_string(), factory->bound_function_name_accessor(),
36983698
roc_attribs);
3699-
map->AppendDescriptor(&d);
3699+
map->AppendDescriptor(isolate(), &d);
37003700
}
37013701
native_context()->set_bound_function_without_constructor_map(*map);
37023702

@@ -3722,14 +3722,14 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
37223722
Descriptor::DataField(isolate(), factory->length_string(),
37233723
JSSloppyArgumentsObject::kLengthIndex,
37243724
DONT_ENUM, Representation::Tagged());
3725-
map->AppendDescriptor(&d);
3725+
map->AppendDescriptor(isolate(), &d);
37263726
}
37273727
{ // callee
37283728
Descriptor d =
37293729
Descriptor::DataField(isolate(), factory->callee_string(),
37303730
JSSloppyArgumentsObject::kCalleeIndex,
37313731
DONT_ENUM, Representation::Tagged());
3732-
map->AppendDescriptor(&d);
3732+
map->AppendDescriptor(isolate(), &d);
37333733
}
37343734
// @@iterator method is added later.
37353735

@@ -3776,12 +3776,12 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
37763776
Descriptor::DataField(isolate(), factory->length_string(),
37773777
JSStrictArgumentsObject::kLengthIndex,
37783778
DONT_ENUM, Representation::Tagged());
3779-
map->AppendDescriptor(&d);
3779+
map->AppendDescriptor(isolate(), &d);
37803780
}
37813781
{ // callee
37823782
Descriptor d = Descriptor::AccessorConstant(factory->callee_string(),
37833783
callee, attributes);
3784-
map->AppendDescriptor(&d);
3784+
map->AppendDescriptor(isolate(), &d);
37853785
}
37863786
// @@iterator method is added later.
37873787

@@ -4951,7 +4951,7 @@ Handle<JSFunction> Genesis::InstallInternalArray(Handle<JSObject> target,
49514951
Descriptor d = Descriptor::AccessorConstant(
49524952
factory()->length_string(), factory()->array_length_accessor(),
49534953
attribs);
4954-
initial_map->AppendDescriptor(&d);
4954+
initial_map->AppendDescriptor(isolate(), &d);
49554955
}
49564956

49574957
return array_function;
@@ -5167,28 +5167,28 @@ bool Genesis::InstallNatives(GlobalContextType context_type) {
51675167
Descriptor::DataField(isolate(), factory()->get_string(),
51685168
JSAccessorPropertyDescriptor::kGetIndex, NONE,
51695169
Representation::Tagged());
5170-
map->AppendDescriptor(&d);
5170+
map->AppendDescriptor(isolate(), &d);
51715171
}
51725172
{ // set
51735173
Descriptor d =
51745174
Descriptor::DataField(isolate(), factory()->set_string(),
51755175
JSAccessorPropertyDescriptor::kSetIndex, NONE,
51765176
Representation::Tagged());
5177-
map->AppendDescriptor(&d);
5177+
map->AppendDescriptor(isolate(), &d);
51785178
}
51795179
{ // enumerable
51805180
Descriptor d =
51815181
Descriptor::DataField(isolate(), factory()->enumerable_string(),
51825182
JSAccessorPropertyDescriptor::kEnumerableIndex,
51835183
NONE, Representation::Tagged());
5184-
map->AppendDescriptor(&d);
5184+
map->AppendDescriptor(isolate(), &d);
51855185
}
51865186
{ // configurable
51875187
Descriptor d = Descriptor::DataField(
51885188
isolate(), factory()->configurable_string(),
51895189
JSAccessorPropertyDescriptor::kConfigurableIndex, NONE,
51905190
Representation::Tagged());
5191-
map->AppendDescriptor(&d);
5191+
map->AppendDescriptor(isolate(), &d);
51925192
}
51935193

51945194
Map::SetPrototype(isolate(), map, isolate()->initial_object_prototype());
@@ -5213,28 +5213,28 @@ bool Genesis::InstallNatives(GlobalContextType context_type) {
52135213
Descriptor::DataField(isolate(), factory()->value_string(),
52145214
JSDataPropertyDescriptor::kValueIndex, NONE,
52155215
Representation::Tagged());
5216-
map->AppendDescriptor(&d);
5216+
map->AppendDescriptor(isolate(), &d);
52175217
}
52185218
{ // writable
52195219
Descriptor d =
52205220
Descriptor::DataField(isolate(), factory()->writable_string(),
52215221
JSDataPropertyDescriptor::kWritableIndex, NONE,
52225222
Representation::Tagged());
5223-
map->AppendDescriptor(&d);
5223+
map->AppendDescriptor(isolate(), &d);
52245224
}
52255225
{ // enumerable
52265226
Descriptor d =
52275227
Descriptor::DataField(isolate(), factory()->enumerable_string(),
52285228
JSDataPropertyDescriptor::kEnumerableIndex,
52295229
NONE, Representation::Tagged());
5230-
map->AppendDescriptor(&d);
5230+
map->AppendDescriptor(isolate(), &d);
52315231
}
52325232
{ // configurable
52335233
Descriptor d =
52345234
Descriptor::DataField(isolate(), factory()->configurable_string(),
52355235
JSDataPropertyDescriptor::kConfigurableIndex,
52365236
NONE, Representation::Tagged());
5237-
map->AppendDescriptor(&d);
5237+
map->AppendDescriptor(isolate(), &d);
52385238
}
52395239

52405240
Map::SetPrototype(isolate(), map, isolate()->initial_object_prototype());
@@ -5281,31 +5281,31 @@ bool Genesis::InstallNatives(GlobalContextType context_type) {
52815281
Descriptor d = Descriptor::AccessorConstant(
52825282
length, handle(array_descriptors->GetStrongValue(old), isolate()),
52835283
array_descriptors->GetDetails(old).attributes());
5284-
initial_map->AppendDescriptor(&d);
5284+
initial_map->AppendDescriptor(isolate(), &d);
52855285
}
52865286

52875287
// index descriptor.
52885288
{
52895289
Descriptor d = Descriptor::DataField(isolate(), factory()->index_string(),
52905290
JSRegExpResult::kIndexIndex, NONE,
52915291
Representation::Tagged());
5292-
initial_map->AppendDescriptor(&d);
5292+
initial_map->AppendDescriptor(isolate(), &d);
52935293
}
52945294

52955295
// input descriptor.
52965296
{
52975297
Descriptor d = Descriptor::DataField(isolate(), factory()->input_string(),
52985298
JSRegExpResult::kInputIndex, NONE,
52995299
Representation::Tagged());
5300-
initial_map->AppendDescriptor(&d);
5300+
initial_map->AppendDescriptor(isolate(), &d);
53015301
}
53025302

53035303
// groups descriptor.
53045304
{
53055305
Descriptor d = Descriptor::DataField(
53065306
isolate(), factory()->groups_string(), JSRegExpResult::kGroupsIndex,
53075307
NONE, Representation::Tagged());
5308-
initial_map->AppendDescriptor(&d);
5308+
initial_map->AppendDescriptor(isolate(), &d);
53095309
}
53105310

53115311
native_context()->set_regexp_result_map(*initial_map);
@@ -5321,30 +5321,30 @@ bool Genesis::InstallNatives(GlobalContextType context_type) {
53215321
arguments_iterator, attribs);
53225322
Handle<Map> map(native_context()->sloppy_arguments_map(), isolate());
53235323
Map::EnsureDescriptorSlack(isolate(), map, 1);
5324-
map->AppendDescriptor(&d);
5324+
map->AppendDescriptor(isolate(), &d);
53255325
}
53265326
{
53275327
Descriptor d = Descriptor::AccessorConstant(factory()->iterator_symbol(),
53285328
arguments_iterator, attribs);
53295329
Handle<Map> map(native_context()->fast_aliased_arguments_map(),
53305330
isolate());
53315331
Map::EnsureDescriptorSlack(isolate(), map, 1);
5332-
map->AppendDescriptor(&d);
5332+
map->AppendDescriptor(isolate(), &d);
53335333
}
53345334
{
53355335
Descriptor d = Descriptor::AccessorConstant(factory()->iterator_symbol(),
53365336
arguments_iterator, attribs);
53375337
Handle<Map> map(native_context()->slow_aliased_arguments_map(),
53385338
isolate());
53395339
Map::EnsureDescriptorSlack(isolate(), map, 1);
5340-
map->AppendDescriptor(&d);
5340+
map->AppendDescriptor(isolate(), &d);
53415341
}
53425342
{
53435343
Descriptor d = Descriptor::AccessorConstant(factory()->iterator_symbol(),
53445344
arguments_iterator, attribs);
53455345
Handle<Map> map(native_context()->strict_arguments_map(), isolate());
53465346
Map::EnsureDescriptorSlack(isolate(), map, 1);
5347-
map->AppendDescriptor(&d);
5347+
map->AppendDescriptor(isolate(), &d);
53485348
}
53495349
}
53505350

src/heap/factory.cc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1974,7 +1974,7 @@ Map Factory::InitializeMap(Map map, InstanceType type, int instance_size,
19741974
SKIP_WRITE_BARRIER);
19751975
map->set_raw_transitions(MaybeObject::FromSmi(Smi::zero()));
19761976
map->SetInObjectUnusedPropertyFields(inobject_properties);
1977-
map->set_instance_descriptors(*empty_descriptor_array());
1977+
map->SetInstanceDescriptors(isolate(), *empty_descriptor_array(), 0);
19781978
if (FLAG_unbox_double_fields) {
19791979
map->set_layout_descriptor(LayoutDescriptor::FastPointerLayout());
19801980
}
@@ -4056,7 +4056,7 @@ Handle<Map> Factory::CreateSloppyFunctionMap(
40564056
{ // Add length accessor.
40574057
Descriptor d = Descriptor::AccessorConstant(
40584058
length_string(), function_length_accessor(), roc_attribs);
4059-
map->AppendDescriptor(&d);
4059+
map->AppendDescriptor(isolate(), &d);
40604060
}
40614061

40624062
STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1);
@@ -4065,23 +4065,23 @@ Handle<Map> Factory::CreateSloppyFunctionMap(
40654065
Handle<Name> name = isolate()->factory()->name_string();
40664066
Descriptor d = Descriptor::DataField(isolate(), name, field_index++,
40674067
roc_attribs, Representation::Tagged());
4068-
map->AppendDescriptor(&d);
4068+
map->AppendDescriptor(isolate(), &d);
40694069

40704070
} else {
40714071
// Add name accessor.
40724072
Descriptor d = Descriptor::AccessorConstant(
40734073
name_string(), function_name_accessor(), roc_attribs);
4074-
map->AppendDescriptor(&d);
4074+
map->AppendDescriptor(isolate(), &d);
40754075
}
40764076
{ // Add arguments accessor.
40774077
Descriptor d = Descriptor::AccessorConstant(
40784078
arguments_string(), function_arguments_accessor(), ro_attribs);
4079-
map->AppendDescriptor(&d);
4079+
map->AppendDescriptor(isolate(), &d);
40804080
}
40814081
{ // Add caller accessor.
40824082
Descriptor d = Descriptor::AccessorConstant(
40834083
caller_string(), function_caller_accessor(), ro_attribs);
4084-
map->AppendDescriptor(&d);
4084+
map->AppendDescriptor(isolate(), &d);
40854085
}
40864086
if (IsFunctionModeWithPrototype(function_mode)) {
40874087
// Add prototype accessor.
@@ -4090,7 +4090,7 @@ Handle<Map> Factory::CreateSloppyFunctionMap(
40904090
: ro_attribs;
40914091
Descriptor d = Descriptor::AccessorConstant(
40924092
prototype_string(), function_prototype_accessor(), attribs);
4093-
map->AppendDescriptor(&d);
4093+
map->AppendDescriptor(isolate(), &d);
40944094
}
40954095
DCHECK_EQ(inobject_properties_count, field_index);
40964096
LOG(isolate(), MapDetails(*map));
@@ -4133,7 +4133,7 @@ Handle<Map> Factory::CreateStrictFunctionMap(
41334133
{ // Add length accessor.
41344134
Descriptor d = Descriptor::AccessorConstant(
41354135
length_string(), function_length_accessor(), roc_attribs);
4136-
map->AppendDescriptor(&d);
4136+
map->AppendDescriptor(isolate(), &d);
41374137
}
41384138

41394139
STATIC_ASSERT(JSFunction::kNameDescriptorIndex == 1);
@@ -4142,13 +4142,13 @@ Handle<Map> Factory::CreateStrictFunctionMap(
41424142
Handle<Name> name = isolate()->factory()->name_string();
41434143
Descriptor d = Descriptor::DataField(isolate(), name, field_index++,
41444144
roc_attribs, Representation::Tagged());
4145-
map->AppendDescriptor(&d);
4145+
map->AppendDescriptor(isolate(), &d);
41464146

41474147
} else {
41484148
// Add name accessor.
41494149
Descriptor d = Descriptor::AccessorConstant(
41504150
name_string(), function_name_accessor(), roc_attribs);
4151-
map->AppendDescriptor(&d);
4151+
map->AppendDescriptor(isolate(), &d);
41524152
}
41534153

41544154
STATIC_ASSERT(JSFunction::kMaybeHomeObjectDescriptorIndex == 2);
@@ -4157,7 +4157,7 @@ Handle<Map> Factory::CreateStrictFunctionMap(
41574157
Handle<Name> name = isolate()->factory()->home_object_symbol();
41584158
Descriptor d = Descriptor::DataField(isolate(), name, field_index++,
41594159
DONT_ENUM, Representation::Tagged());
4160-
map->AppendDescriptor(&d);
4160+
map->AppendDescriptor(isolate(), &d);
41614161
}
41624162

41634163
if (IsFunctionModeWithPrototype(function_mode)) {
@@ -4167,7 +4167,7 @@ Handle<Map> Factory::CreateStrictFunctionMap(
41674167
: ro_attribs;
41684168
Descriptor d = Descriptor::AccessorConstant(
41694169
prototype_string(), function_prototype_accessor(), attribs);
4170-
map->AppendDescriptor(&d);
4170+
map->AppendDescriptor(isolate(), &d);
41714171
}
41724172
DCHECK_EQ(inobject_properties_count, field_index);
41734173
LOG(isolate(), MapDetails(*map));
@@ -4196,14 +4196,14 @@ Handle<Map> Factory::CreateClassFunctionMap(Handle<JSFunction> empty_function) {
41964196
{ // Add length accessor.
41974197
Descriptor d = Descriptor::AccessorConstant(
41984198
length_string(), function_length_accessor(), roc_attribs);
4199-
map->AppendDescriptor(&d);
4199+
map->AppendDescriptor(isolate(), &d);
42004200
}
42014201

42024202
{
42034203
// Add prototype accessor.
42044204
Descriptor d = Descriptor::AccessorConstant(
42054205
prototype_string(), function_prototype_accessor(), ro_attribs);
4206-
map->AppendDescriptor(&d);
4206+
map->AppendDescriptor(isolate(), &d);
42074207
}
42084208
LOG(isolate(), MapDetails(*map));
42094209
return map;

src/heap/setup-heap-internal.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ void Heap::FinalizePartialMap(Map map) {
154154
ReadOnlyRoots roots(this);
155155
map->set_dependent_code(DependentCode::cast(roots.empty_weak_fixed_array()));
156156
map->set_raw_transitions(MaybeObject::FromSmi(Smi::zero()));
157-
map->set_instance_descriptors(roots.empty_descriptor_array());
157+
map->SetInstanceDescriptors(isolate(), roots.empty_descriptor_array(), 0);
158158
if (FLAG_unbox_double_fields) {
159159
map->set_layout_descriptor(LayoutDescriptor::FastPointerLayout());
160160
}

0 commit comments

Comments
 (0)