Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: src/wasm/wasm-objects.h

Issue 2972803002: [wasm] Use WeakFixedArray for list of instances sharing a WasmMemoryObject. (Closed)
Patch Set: [wasm] Use WeakFixedArray for list of instances sharing a WasmMemoryObject. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | src/wasm/wasm-objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-objects.h
diff --git a/src/wasm/wasm-objects.h b/src/wasm/wasm-objects.h
index d87a8dc755cb84d99c94de3cd28dd98faf956af0..a6c0babad98d3ea100ea4d494e82b92e40a310c0 100644
--- a/src/wasm/wasm-objects.h
+++ b/src/wasm/wasm-objects.h
@@ -29,7 +29,6 @@ class WasmInterpreter;
class WasmCompiledModule;
class WasmDebugInfo;
class WasmInstanceObject;
-class WasmInstanceWrapper;
#define DECL_OOL_QUERY(type) static bool Is##type(Object* object);
#define DECL_OOL_CAST(type) static type* cast(Object* object);
@@ -113,22 +112,26 @@ class WasmMemoryObject : public JSObject {
DECL_ACCESSORS(array_buffer, JSArrayBuffer)
DECL_INT_ACCESSORS(maximum_pages)
- DECL_OPTIONAL_ACCESSORS(instances_link, WasmInstanceWrapper)
+ DECL_OPTIONAL_ACCESSORS(instances, WeakFixedArray)
enum { // --
kArrayBufferIndex,
kMaximumPagesIndex,
- kInstancesLinkIndex,
+ kInstancesIndex,
kFieldCount
};
DEF_SIZE(JSObject)
DEF_OFFSET(ArrayBuffer)
DEF_OFFSET(MaximumPages)
- DEF_OFFSET(InstancesLink)
-
- void AddInstance(Isolate* isolate, Handle<WasmInstanceObject> object);
- inline void ResetInstancesLink(Isolate* isolate);
+ DEF_OFFSET(Instances)
+
+ // Add an instance to the internal (weak) list. amortized O(n).
+ static void AddInstance(Isolate* isolate, Handle<WasmMemoryObject> memory,
+ Handle<WasmInstanceObject> object);
+ // Remove an instance from the internal (weak) list. O(n).
+ static void RemoveInstance(Isolate* isolate, Handle<WasmMemoryObject> memory,
+ Handle<WasmInstanceObject> object);
uint32_t current_pages();
inline bool has_maximum_pages() { return maximum_pages() >= 0; }
@@ -149,7 +152,6 @@ class WasmInstanceObject : public JSObject {
DECL_OPTIONAL_ACCESSORS(memory_buffer, JSArrayBuffer)
DECL_OPTIONAL_ACCESSORS(globals_buffer, JSArrayBuffer)
DECL_OPTIONAL_ACCESSORS(debug_info, WasmDebugInfo)
- DECL_OPTIONAL_ACCESSORS(instance_wrapper, WasmInstanceWrapper)
// FixedArray of all instances whose code was imported
DECL_OPTIONAL_ACCESSORS(directly_called_instances, FixedArray)
@@ -159,7 +161,6 @@ class WasmInstanceObject : public JSObject {
kMemoryBufferIndex,
kGlobalsBufferIndex,
kDebugInfoIndex,
- kInstanceWrapperIndex,
kDirectlyCalledInstancesIndex,
kFieldCount
};
@@ -170,7 +171,6 @@ class WasmInstanceObject : public JSObject {
DEF_OFFSET(MemoryBuffer)
DEF_OFFSET(GlobalsBuffer)
DEF_OFFSET(DebugInfo)
- DEF_OFFSET(InstanceWrapper)
DEF_OFFSET(DirectlyCalledInstances)
WasmModuleObject* module_object();
@@ -668,64 +668,6 @@ class WasmDebugInfo : public FixedArray {
int frame_index);
};
-class WasmInstanceWrapper : public FixedArray {
- public:
- enum { // --
- kWrapperInstanceObjectIndex,
- kNextInstanceWrapperIndex,
- kPreviousInstanceWrapperIndex,
- kFieldCount
- };
-
- static WasmInstanceWrapper* cast(Object* fixed_array) {
- SLOW_DCHECK(IsWasmInstanceWrapper(fixed_array));
- return reinterpret_cast<WasmInstanceWrapper*>(fixed_array);
- }
- static bool IsWasmInstanceWrapper(Object* obj);
- bool has_instance() { return get(kWrapperInstanceObjectIndex)->IsWeakCell(); }
- Handle<WasmInstanceObject> instance_object() {
- Object* obj = get(kWrapperInstanceObjectIndex);
- DCHECK(obj->IsWeakCell());
- WeakCell* cell = WeakCell::cast(obj);
- DCHECK(cell->value()->IsJSObject());
- return handle(WasmInstanceObject::cast(cell->value()));
- }
- bool has_next() {
- return IsWasmInstanceWrapper(get(kNextInstanceWrapperIndex));
- }
- bool has_previous() {
- return IsWasmInstanceWrapper(get(kPreviousInstanceWrapperIndex));
- }
- void set_next_wrapper(Object* obj) {
- DCHECK(IsWasmInstanceWrapper(obj));
- set(kNextInstanceWrapperIndex, obj);
- }
- void set_previous_wrapper(Object* obj) {
- DCHECK(IsWasmInstanceWrapper(obj));
- set(kPreviousInstanceWrapperIndex, obj);
- }
- Handle<WasmInstanceWrapper> next_wrapper() {
- Object* obj = get(kNextInstanceWrapperIndex);
- DCHECK(IsWasmInstanceWrapper(obj));
- return handle(WasmInstanceWrapper::cast(obj));
- }
- Handle<WasmInstanceWrapper> previous_wrapper() {
- Object* obj = get(kPreviousInstanceWrapperIndex);
- DCHECK(IsWasmInstanceWrapper(obj));
- return handle(WasmInstanceWrapper::cast(obj));
- }
- void reset_next_wrapper() { set_undefined(kNextInstanceWrapperIndex); }
- void reset_previous_wrapper() {
- set_undefined(kPreviousInstanceWrapperIndex);
- }
- void reset() {
- for (int kID = 0; kID < kFieldCount; kID++) set_undefined(kID);
- }
-
- static Handle<WasmInstanceWrapper> New(Isolate* isolate,
- Handle<WasmInstanceObject> instance);
-};
-
// TODO(titzer): these should be moved to wasm-objects-inl.h
CAST_ACCESSOR(WasmInstanceObject)
CAST_ACCESSOR(WasmMemoryObject)
@@ -744,8 +686,7 @@ ACCESSORS(WasmTableObject, dispatch_tables, FixedArray, kDispatchTablesOffset)
// WasmMemoryObject
ACCESSORS(WasmMemoryObject, array_buffer, JSArrayBuffer, kArrayBufferOffset)
SMI_ACCESSORS(WasmMemoryObject, maximum_pages, kMaximumPagesOffset)
-ACCESSORS(WasmMemoryObject, instances_link, WasmInstanceWrapper,
- kInstancesLinkOffset)
+ACCESSORS(WasmMemoryObject, instances, WeakFixedArray, kInstancesOffset)
// WasmInstanceObject
ACCESSORS(WasmInstanceObject, compiled_module, WasmCompiledModule,
@@ -756,8 +697,6 @@ ACCESSORS(WasmInstanceObject, memory_buffer, JSArrayBuffer, kMemoryBufferOffset)
ACCESSORS(WasmInstanceObject, globals_buffer, JSArrayBuffer,
kGlobalsBufferOffset)
ACCESSORS(WasmInstanceObject, debug_info, WasmDebugInfo, kDebugInfoOffset)
-ACCESSORS(WasmInstanceObject, instance_wrapper, WasmInstanceWrapper,
- kInstanceWrapperOffset)
ACCESSORS(WasmInstanceObject, directly_called_instances, FixedArray,
kDirectlyCalledInstancesOffset)
@@ -782,9 +721,8 @@ ACCESSORS(WasmSharedModuleData, breakpoint_infos, FixedArray,
OPTIONAL_ACCESSOR(WasmInstanceObject, debug_info, kDebugInfoOffset)
OPTIONAL_ACCESSOR(WasmInstanceObject, memory_buffer, kMemoryBufferOffset)
OPTIONAL_ACCESSOR(WasmInstanceObject, memory_object, kMemoryObjectOffset)
-OPTIONAL_ACCESSOR(WasmInstanceObject, instance_wrapper, kInstanceWrapperOffset)
-OPTIONAL_ACCESSOR(WasmMemoryObject, instances_link, kInstancesLinkOffset)
+OPTIONAL_ACCESSOR(WasmMemoryObject, instances, kInstancesOffset)
OPTIONAL_ACCESSOR(WasmSharedModuleData, breakpoint_infos,
kBreakPointInfosOffset)
@@ -797,11 +735,6 @@ ACCESSORS(WasmDebugInfo, locals_names, FixedArray, kLocalsNamesOffset)
OPTIONAL_ACCESSOR(WasmDebugInfo, locals_names, kLocalsNamesOffset)
-inline void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) {
- // This has to be a raw access to bypass typechecking.
- WRITE_FIELD(this, kInstancesLinkOffset, isolate->heap()->undefined_value());
-}
-
#undef DECL_OOL_QUERY
#undef DECL_OOL_CAST
#undef DECL_GETTER
« no previous file with comments | « src/wasm/wasm-module.cc ('k') | src/wasm/wasm-objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698