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

Unified Diff: src/snapshot/code-serializer.cc

Issue 2433273002: [wasm] Avoid double-serializing the wire bytes (Closed)
Patch Set: 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
Index: src/snapshot/code-serializer.cc
diff --git a/src/snapshot/code-serializer.cc b/src/snapshot/code-serializer.cc
index 74ccf5f26064b04617df74f59577126dcdc2b3fe..10ea5ddde741499f38785b3476d139938198abe4 100644
--- a/src/snapshot/code-serializer.cc
+++ b/src/snapshot/code-serializer.cc
@@ -223,12 +223,15 @@ std::unique_ptr<ScriptData> WasmCompiledModuleSerializer::SerializeWasmModule(
Handle<wasm::WasmCompiledModule>::cast(input);
WasmCompiledModuleSerializer wasm_cs(isolate, 0);
wasm_cs.reference_map()->AddAttachedReference(*isolate->native_context());
+ Handle<SeqOneByteString> wire_bytes = compiled_module->module_bytes();
Yang 2016/10/20 06:46:17 Another way to do this is to use attached referenc
Mircea Trofin 2016/10/20 07:22:30 Oh... yes. Yes, makes sense :) Thanks!
+ compiled_module->reset_module_bytes();
ScriptData* data = wasm_cs.Serialize(compiled_module);
+ compiled_module->set_module_bytes(wire_bytes);
return std::unique_ptr<ScriptData>(data);
}
MaybeHandle<FixedArray> WasmCompiledModuleSerializer::DeserializeWasmModule(
- Isolate* isolate, ScriptData* data) {
+ Isolate* isolate, ScriptData* data, Vector<const byte> wire_bytes) {
SerializedCodeData::SanityCheckResult sanity_check_result =
SerializedCodeData::CHECK_SUCCESS;
MaybeHandle<FixedArray> nothing;
@@ -250,8 +253,16 @@ MaybeHandle<FixedArray> WasmCompiledModuleSerializer::DeserializeWasmModule(
MaybeHandle<HeapObject> obj = deserializer.DeserializeObject(isolate);
if (obj.is_null() || !obj.ToHandleChecked()->IsFixedArray()) return nothing;
- Handle<FixedArray> compiled_module =
- Handle<FixedArray>::cast(obj.ToHandleChecked());
+ Handle<wasm::WasmCompiledModule> compiled_module =
+ Handle<wasm::WasmCompiledModule>::cast(obj.ToHandleChecked());
+ MaybeHandle<String> maybe_wire_bytes_as_string =
+ isolate->factory()->NewStringFromOneByte(wire_bytes, TENURED);
+ Handle<String> wire_bytes_as_string;
+ if (!maybe_wire_bytes_as_string.ToHandle(&wire_bytes_as_string))
+ return nothing;
+
+ compiled_module->set_module_bytes(
+ handle(SeqOneByteString::cast(*wire_bytes_as_string)));
wasm::WasmCompiledModule::RecreateModuleWrapper(isolate, compiled_module);
return compiled_module;
}

Powered by Google App Engine
This is Rietveld 408576698