[vm] Object store lazy init for `dart:ffi`
In a follow up CL, we lookup members in `dart:ffi` lazily.
Also removes ffi member from store that was never used.
Split off https://dart-review.googlesource.com/c/sdk/+/229544 to make
that CL smaller.
TEST=SDK build
Bug: https://github.com/dart-lang/sdk/issues/47777
Change-Id: I2eed23b57ff92217bfae8fabfc84cf75cb62f313
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/234942
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index 1a5a835..f694613b 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -5759,6 +5759,7 @@
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
};
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 81c5977..23f9b4d 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -105,6 +105,7 @@
EMIT_FIELD_INIT,
EMIT_FIELD_INIT,
EMIT_FIELD_INIT,
+ EMIT_FIELD_INIT,
EMIT_FIELD_INIT)
#undef EMIT_FIELD_INIT
// Just to prevent a trailing comma.
@@ -140,7 +141,8 @@
#define EMIT_FIELD_NAME(type, name) #name "_",
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, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
+ EMIT_FIELD_NAME)
#undef EMIT_FIELD_NAME
};
ObjectPtr* current = from();
@@ -461,6 +463,13 @@
}
}
+void ObjectStore::LazyInitFfiMembers() {
+ auto* const thread = Thread::Current();
+ SafepointWriteRwLocker locker(thread,
+ thread->isolate_group()->program_lock());
+ // TODO(http://dartbug.com/47777): Implement finalizers.
+}
+
void ObjectStore::LazyInitIsolateMembers() {
auto* const thread = Thread::Current();
SafepointWriteRwLocker locker(thread,
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 88d7a2e..f86b8c5 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -43,7 +43,8 @@
// LAZY_ISOLATE - needs lazy init getter for a "dart:isolate" member
// LAZY_INTERNAL - needs lazy init getter for a "dart:_internal" member
#define OBJECT_STORE_FIELD_LIST(R_, RW, ARW_RELAXED, ARW_AR, LAZY_CORE, \
- LAZY_ASYNC, LAZY_ISOLATE, LAZY_INTERNAL) \
+ LAZY_ASYNC, LAZY_ISOLATE, LAZY_INTERNAL, \
+ LAZY_FFI) \
LAZY_CORE(Class, list_class) \
LAZY_CORE(Type, non_nullable_list_rare_type) \
LAZY_CORE(Type, non_nullable_map_rare_type) \
@@ -239,7 +240,6 @@
RW(GrowableObjectArray, ffi_callback_functions) \
RW(Class, ffi_pointer_class) \
RW(Class, ffi_native_type_class) \
- RW(Object, ffi_as_function_internal) \
// Please remember the last entry must be referred in the 'to' function below.
#define OBJECT_STORE_STUB_CODE_LIST(DO) \
@@ -426,6 +426,8 @@
DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitIsolateMembers)
#define DECLARE_LAZY_INIT_INTERNAL_GETTER(Type, name) \
DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitInternalMembers)
+#define DECLARE_LAZY_INIT_FFI_GETTER(Type, name) \
+ DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitFfiMembers)
OBJECT_STORE_FIELD_LIST(DECLARE_GETTER,
DECLARE_GETTER_AND_SETTER,
DECLARE_RELAXED_ATOMIC_GETTER_AND_SETTER,
@@ -433,7 +435,8 @@
DECLARE_LAZY_INIT_CORE_GETTER,
DECLARE_LAZY_INIT_ASYNC_GETTER,
DECLARE_LAZY_INIT_ISOLATE_GETTER,
- DECLARE_LAZY_INIT_INTERNAL_GETTER)
+ DECLARE_LAZY_INIT_INTERNAL_GETTER,
+ DECLARE_LAZY_INIT_FFI_GETTER)
#undef DECLARE_OFFSET
#undef DECLARE_GETTER
#undef DECLARE_GETTER_AND_SETTER
@@ -493,6 +496,7 @@
private:
void LazyInitCoreMembers();
void LazyInitAsyncMembers();
+ void LazyInitFfiMembers();
void LazyInitIsolateMembers();
void LazyInitInternalMembers();
@@ -512,12 +516,13 @@
DECLARE_LAZY_OBJECT_STORE_FIELD,
DECLARE_LAZY_OBJECT_STORE_FIELD,
DECLARE_LAZY_OBJECT_STORE_FIELD,
+ DECLARE_LAZY_OBJECT_STORE_FIELD,
DECLARE_LAZY_OBJECT_STORE_FIELD)
#undef DECLARE_OBJECT_STORE_FIELD
#undef DECLARE_ATOMIC_OBJECT_STORE_FIELD
#undef DECLARE_LAZY_OBJECT_STORE_FIELD
ObjectPtr* to() {
- return reinterpret_cast<ObjectPtr*>(&ffi_as_function_internal_);
+ return reinterpret_cast<ObjectPtr*>(&ffi_native_type_class_);
}
ObjectPtr* to_snapshot(Snapshot::Kind kind) {
switch (kind) {