Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index 97268a1364a617f790f4f7e958f033c4b286dbc3..bb4728ffa01c697a5a4a875ca0250cc9fb208b44 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -451,18 +451,34 @@ class WasmCompilationTask : public CancelableTask { |
base::AtomicNumber<size_t>* next_unit_; |
}; |
-void record_code_size(uint32_t& total_code_size, Code* code) { |
- if (FLAG_print_wasm_code_size) { |
- total_code_size += code->body_size() + code->relocation_info()->length(); |
+// Records statistics on the code generated by compiling WASM functions. |
+struct CodeStats { |
+ size_t code_size; |
+ size_t reloc_size; |
+ |
+ inline CodeStats() : code_size(0), reloc_size(0) {} |
+ |
+ inline void Record(Code* code) { |
+ if (FLAG_print_wasm_code_size) { |
+ code_size += code->body_size(); |
+ reloc_size += code->relocation_info()->length(); |
+ } |
} |
-} |
+ |
+ inline void Report() { |
+ if (FLAG_print_wasm_code_size) { |
+ PrintF("Total generated wasm code: %zu bytes\n", code_size); |
+ PrintF("Total generated wasm reloc: %zu bytes\n", reloc_size); |
+ } |
+ } |
+}; |
bool CompileWrappersToImportedFunctions(Isolate* isolate, WasmModule* module, |
const Handle<JSReceiver> ffi, |
WasmModuleInstance* instance, |
ErrorThrower* thrower, Factory* factory, |
ModuleEnv* module_env, |
- uint32_t& total_code_size) { |
+ CodeStats& code_stats) { |
uint32_t index = 0; |
if (module->import_table.size() > 0) { |
instance->import_code.reserve(module->import_table.size()); |
@@ -479,7 +495,7 @@ bool CompileWrappersToImportedFunctions(Isolate* isolate, WasmModule* module, |
isolate, module_env, function.ToHandleChecked(), import.sig, |
module_name, function_name); |
instance->import_code.push_back(code); |
- record_code_size(total_code_size, *code); |
+ code_stats.Record(*code); |
index++; |
} |
} |
@@ -564,7 +580,7 @@ bool FinishCompilation(Isolate* isolate, WasmModule* module, |
const WasmModuleInstance& instance, |
const Handle<FixedArray>& code_table, |
ErrorThrower& thrower, Factory* factory, |
- ModuleEnv& module_env, uint32_t& total_code_size, |
+ ModuleEnv& module_env, CodeStats& code_stats, |
PropertyDescriptor& desc) { |
for (uint32_t i = FLAG_skip_compiling_wasm_funcs; |
i < module->functions.size(); i++) { |
@@ -592,13 +608,13 @@ bool FinishCompilation(Isolate* isolate, WasmModule* module, |
function_name = factory->InternalizeUtf8String(str); |
function = compiler::CompileJSToWasmWrapper( |
isolate, &module_env, function_name, code, instance.js_object, i); |
- record_code_size(total_code_size, function->code()); |
+ code_stats.Record(function->code()); |
} |
if (!code.is_null()) { |
// Install the code into the linker table. |
module_env.linker->Finish(i, code); |
code_table->set(i, *code); |
- record_code_size(total_code_size, *code); |
+ code_stats.Record(*code); |
} |
if (func.exported) { |
// Exported functions are installed as read-only properties on the |
@@ -634,7 +650,7 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
// If FLAG_print_wasm_code_size is set, this aggregates the sum of all code |
// objects created for this module. |
// TODO(titzer): switch this to TRACE_EVENT |
- uint32_t total_code_size = 0; |
+ CodeStats code_stats; |
//------------------------------------------------------------------------- |
// Allocate the instance and its JS counterpart. |
@@ -694,7 +710,7 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
//------------------------------------------------------------------------- |
if (!CompileWrappersToImportedFunctions(isolate, this, ffi, &instance, |
&thrower, factory, &module_env, |
- total_code_size)) { |
+ code_stats)) { |
return MaybeHandle<JSObject>(); |
} |
//------------------------------------------------------------------------- |
@@ -769,8 +785,7 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
} |
// 5) The main thread finishes the compilation. |
if (!FinishCompilation(isolate, this, ffi, results, instance, code_table, |
- thrower, factory, module_env, total_code_size, |
- desc)) { |
+ thrower, factory, module_env, code_stats, desc)) { |
instance.js_object = Handle<JSObject>::null(); |
} |
@@ -801,7 +816,7 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
Handle<JSFunction> function = compiler::CompileJSToWasmWrapper( |
isolate, &module_env, name, code, instance.js_object, |
exp.func_index); |
- record_code_size(total_code_size, function->code()); |
+ code_stats.Record(function->code()); |
desc.set_value(function); |
Maybe<bool> status = JSReceiver::DefineOwnProperty( |
isolate, exports_object, name, &desc, Object::THROW_ON_ERROR); |
@@ -827,8 +842,7 @@ MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
instance.js_object->SetInternalField(kWasmFunctionNamesArray, *arr); |
} |
- if (FLAG_print_wasm_code_size) |
- printf("Total generated wasm code: %u bytes\n", total_code_size); |
+ code_stats.Report(); |
// Run the start function if one was specified. |
if (this->start_function_index >= 0) { |