[vm] Shrink object store name metadata. Saves 18k. TEST=ci Change-Id: Ie30eee4589f124e705bf922e5b6f8f8cedfdab25 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/434240 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Alexander Aprelev <aam@google.com>
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc index b89b7cf..e5baaff 100644 --- a/runtime/vm/app_snapshot.cc +++ b/runtime/vm/app_snapshot.cc
@@ -7038,20 +7038,6 @@ }; #if !defined(DART_PRECOMPILED_RUNTIME) -static const char* const kObjectStoreFieldNames[] = { -#define DECLARE_OBJECT_STORE_FIELD(Type, Name) #Name, - OBJECT_STORE_FIELD_LIST(DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD, - DECLARE_OBJECT_STORE_FIELD) -#undef DECLARE_OBJECT_STORE_FIELD -}; - class ProgramSerializationRoots : public SerializationRoots { public: #define RESET_ROOT_LIST(V) \ @@ -7157,8 +7143,19 @@ void WriteRoots(Serializer* s) { ObjectPtr* from = object_store_->from(); ObjectPtr* to = object_store_->to_snapshot(s->kind()); + // A strtab is smaller than an array of strings. + static const char* const names = "" +#define EMIT_FIELD_NAME(type, name) #name "_\0" + OBJECT_STORE_FIELD_LIST( + EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, + EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, + EMIT_FIELD_NAME) +#undef EMIT_FIELD_NAME + ; // NOLINT + const char* name = names; for (ObjectPtr* p = from; p <= to; p++) { - s->WriteRootRef(*p, kObjectStoreFieldNames[p - from]); + s->WriteRootRef(*p, name); + name += strlen(name) + 1; } FieldTable* initial_field_table =
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc index 79637b0..e9a4df1 100644 --- a/runtime/vm/object_store.cc +++ b/runtime/vm/object_store.cc
@@ -37,20 +37,18 @@ JSONObject fields(jsobj, "fields"); Object& value = Object::Handle(); - static const char* const names[] = { -#define EMIT_FIELD_NAME(type, name) #name "_", + // A strtab is smaller than an array of strings. + static const char* const names = "" +#define EMIT_FIELD_NAME(type, name) #name "_\0" ISOLATE_OBJECT_STORE_FIELD_LIST(EMIT_FIELD_NAME, EMIT_FIELD_NAME) #undef EMIT_FIELD_NAME - }; - ObjectPtr* current = from(); - intptr_t i = 0; - while (current <= to()) { + ; // NOLINT + const char* name = names; + for (ObjectPtr* current = from(); current <= to(); current++) { value = *current; - fields.AddProperty(names[i], value); - current++; - i++; + fields.AddProperty(name, value); + name += strlen(name) + 1; } - ASSERT(i == ARRAY_SIZE(names)); } } #endif // !PRODUCT @@ -109,23 +107,21 @@ { JSONObject fields(jsobj, "fields"); Object& value = Object::Handle(); - static const char* const names[] = { -#define EMIT_FIELD_NAME(type, name) #name "_", + // A strtab is smaller than an array of strings. + static const char* const names = "" +#define EMIT_FIELD_NAME(type, name) #name "_\0" OBJECT_STORE_FIELD_LIST( EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME) #undef EMIT_FIELD_NAME - }; - ObjectPtr* current = from(); - intptr_t i = 0; - while (current <= to()) { + ; // NOLINT + const char* name = names; + for (ObjectPtr* current = from(); current <= to(); current++) { value = *current; - fields.AddProperty(names[i], value); - current++; - i++; + fields.AddProperty(name, value); + name += strlen(name) + 1; } - ASSERT(i == ARRAY_SIZE(names)); } } #endif // !PRODUCT