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

Unified Diff: src/runtime/runtime-wasm.cc

Issue 2396473003: [wasm] Refactor GrowMemory runtime call. (Closed)
Patch Set: Fix header Created 4 years, 2 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 | « no previous file | src/wasm/wasm-module.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime/runtime-wasm.cc
diff --git a/src/runtime/runtime-wasm.cc b/src/runtime/runtime-wasm.cc
index 84bb819a3974679060a9ba91d90f7c319baf4a09..4be8fa57184e71535bd8108b4dc3737c364db359 100644
--- a/src/runtime/runtime-wasm.cc
+++ b/src/runtime/runtime-wasm.cc
@@ -23,7 +23,6 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) {
DCHECK_EQ(1, args.length());
CONVERT_UINT32_ARG_CHECKED(delta_pages, 0);
Handle<JSObject> module_instance;
-
{
// Get the module JSObject
DisallowHeapAllocation no_allocation;
@@ -36,77 +35,8 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) {
CHECK_NOT_NULL(owning_instance);
module_instance = handle(JSObject::cast(owning_instance), isolate);
}
-
- Address old_mem_start, new_mem_start;
- uint32_t old_size, new_size;
-
- // Get mem buffer associated with module object
- MaybeHandle<JSArrayBuffer> maybe_mem_buffer =
- wasm::GetInstanceMemory(isolate, module_instance);
- Handle<JSArrayBuffer> old_buffer;
- if (!maybe_mem_buffer.ToHandle(&old_buffer)) {
- // If module object does not have linear memory associated with it,
- // Allocate new array buffer of given size.
- old_mem_start = nullptr;
- old_size = 0;
- // TODO(gdeepti): Fix bounds check to take into account size of memtype.
- new_size = delta_pages * wasm::WasmModule::kPageSize;
- // The code generated in the wasm compiler guarantees this precondition.
- DCHECK(delta_pages <= wasm::WasmModule::kMaxMemPages);
- new_mem_start =
- static_cast<Address>(isolate->array_buffer_allocator()->Allocate(
- static_cast<uint32_t>(new_size)));
- if (new_mem_start == NULL) {
- return *isolate->factory()->NewNumberFromInt(-1);
- }
-#if DEBUG
- // Double check the API allocator actually zero-initialized the memory.
- for (size_t i = old_size; i < new_size; i++) {
- DCHECK_EQ(0, new_mem_start[i]);
- }
-#endif
- } else {
- old_mem_start = static_cast<Address>(old_buffer->backing_store());
- old_size = old_buffer->byte_length()->Number();
- // If the old memory was zero-sized, we should have been in the
- // "undefined" case above.
- DCHECK_NOT_NULL(old_mem_start);
- DCHECK_NE(0, old_size);
-
- new_size = old_size + delta_pages * wasm::WasmModule::kPageSize;
- if (new_size >
- wasm::WasmModule::kMaxMemPages * wasm::WasmModule::kPageSize) {
- return *isolate->factory()->NewNumberFromInt(-1);
- }
- new_mem_start =
- static_cast<Address>(isolate->array_buffer_allocator()->Allocate(
- static_cast<uint32_t>(new_size)));
- if (new_mem_start == NULL) {
- return *isolate->factory()->NewNumberFromInt(-1);
- }
-#if DEBUG
- // Double check the API allocator actually zero-initialized the memory.
- for (size_t i = old_size; i < new_size; i++) {
- DCHECK_EQ(0, new_mem_start[i]);
- }
-#endif
- // Copy contents of the old buffer to the new buffer
- memcpy(new_mem_start, old_mem_start, old_size);
- }
-
- Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer();
- JSArrayBuffer::Setup(buffer, isolate, false, new_mem_start, new_size);
- buffer->set_is_neuterable(false);
-
- // Set new buffer to be wasm memory
-
- wasm::SetInstanceMemory(module_instance, *buffer);
-
- CHECK(wasm::UpdateWasmModuleMemory(module_instance, old_mem_start,
- new_mem_start, old_size, new_size));
-
- return *isolate->factory()->NewNumberFromInt(old_size /
- wasm::WasmModule::kPageSize);
+ return *isolate->factory()->NewNumberFromInt(
+ wasm::GrowInstanceMemory(isolate, module_instance, delta_pages));
}
RUNTIME_FUNCTION(Runtime_WasmThrowTypeError) {
« no previous file with comments | « no previous file | src/wasm/wasm-module.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698