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

Unified Diff: src/wasm/module-decoder.cc

Issue 2864583004: Only turn on UMA WASM metric when synchronous. (Closed)
Patch Set: Again, merge updated master. Created 3 years, 7 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/module-decoder.h ('k') | src/wasm/wasm-module.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/module-decoder.cc
diff --git a/src/wasm/module-decoder.cc b/src/wasm/module-decoder.cc
index 68d9fe09d20334c237083b81146f6a16e6c8ea61..a7bccba828eea8e0e4728c35bd916a268aee4bf3 100644
--- a/src/wasm/module-decoder.cc
+++ b/src/wasm/module-decoder.cc
@@ -1137,22 +1137,22 @@ class ModuleDecoder : public Decoder {
}
};
-} // namespace
-
-ModuleResult DecodeWasmModule(Isolate* isolate, const byte* module_start,
- const byte* module_end, bool verify_functions,
- ModuleOrigin origin) {
- HistogramTimerScope wasm_decode_module_time_scope(
- IsWasm(origin) ? isolate->counters()->wasm_decode_wasm_module_time()
- : isolate->counters()->wasm_decode_asm_module_time());
+ModuleResult DecodeWasmModuleInternal(Isolate* isolate,
+ const byte* module_start,
+ const byte* module_end,
+ bool verify_functions,
+ ModuleOrigin origin, bool is_sync) {
size_t size = module_end - module_start;
if (module_start > module_end) return ModuleResult::Error("start > end");
if (size >= kV8MaxWasmModuleSize)
return ModuleResult::Error("size > maximum module size: %zu", size);
// TODO(bradnelson): Improve histogram handling of size_t.
- (IsWasm(origin) ? isolate->counters()->wasm_wasm_module_size_bytes()
- : isolate->counters()->wasm_asm_module_size_bytes())
- ->AddSample(static_cast<int>(size));
+ if (is_sync)
+ // TODO(karlschimpf): Make this work when asynchronous.
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361
+ (IsWasm(origin) ? isolate->counters()->wasm_wasm_module_size_bytes()
+ : isolate->counters()->wasm_asm_module_size_bytes())
+ ->AddSample(static_cast<int>(size));
// Signatures are stored in zone memory, which have the same lifetime
// as the {module}.
Zone* zone = new Zone(isolate->allocator(), ZONE_NAME);
@@ -1162,13 +1162,34 @@ ModuleResult DecodeWasmModule(Isolate* isolate, const byte* module_start,
// TODO(titzer): this isn't accurate, since it doesn't count the data
// allocated on the C++ heap.
// https://bugs.chromium.org/p/chromium/issues/detail?id=657320
- (IsWasm(origin)
- ? isolate->counters()->wasm_decode_wasm_module_peak_memory_bytes()
- : isolate->counters()->wasm_decode_asm_module_peak_memory_bytes())
- ->AddSample(static_cast<int>(zone->allocation_size()));
+ if (is_sync)
+ // TODO(karlschimpf): Make this work when asynchronous.
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361
+ (IsWasm(origin)
+ ? isolate->counters()->wasm_decode_wasm_module_peak_memory_bytes()
+ : isolate->counters()->wasm_decode_asm_module_peak_memory_bytes())
+ ->AddSample(static_cast<int>(zone->allocation_size()));
return result;
}
+} // namespace
+
+ModuleResult DecodeWasmModule(Isolate* isolate, const byte* module_start,
+ const byte* module_end, bool verify_functions,
+ ModuleOrigin origin, bool is_sync) {
+ if (is_sync) {
+ // TODO(karlschimpf): Make this work when asynchronous.
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361
+ HistogramTimerScope wasm_decode_module_time_scope(
+ IsWasm(origin) ? isolate->counters()->wasm_decode_wasm_module_time()
+ : isolate->counters()->wasm_decode_asm_module_time());
+ return DecodeWasmModuleInternal(isolate, module_start, module_end,
+ verify_functions, origin, true);
+ }
+ return DecodeWasmModuleInternal(isolate, module_start, module_end,
+ verify_functions, origin, false);
+}
+
FunctionSig* DecodeWasmSignatureForTesting(Zone* zone, const byte* start,
const byte* end) {
ModuleDecoder decoder(zone, start, end, kWasmOrigin);
@@ -1182,27 +1203,55 @@ WasmInitExpr DecodeWasmInitExprForTesting(const byte* start, const byte* end) {
return decoder.DecodeInitExpr(start);
}
-FunctionResult DecodeWasmFunction(Isolate* isolate, Zone* zone,
- ModuleBytesEnv* module_env,
- const byte* function_start,
- const byte* function_end) {
- bool is_wasm = module_env->module_env.is_wasm();
- HistogramTimerScope wasm_decode_function_time_scope(
- is_wasm ? isolate->counters()->wasm_decode_wasm_function_time()
- : isolate->counters()->wasm_decode_asm_function_time());
+namespace {
+
+FunctionResult DecodeWasmFunctionInternal(Isolate* isolate, Zone* zone,
+ ModuleBytesEnv* module_env,
+ const byte* function_start,
+ const byte* function_end,
+ bool is_sync) {
size_t size = function_end - function_start;
if (function_start > function_end)
return FunctionResult::Error("start > end");
if (size > kV8MaxWasmFunctionSize)
return FunctionResult::Error("size > maximum function size: %zu", size);
- (is_wasm ? isolate->counters()->wasm_wasm_function_size_bytes()
- : isolate->counters()->wasm_asm_function_size_bytes())
- ->AddSample(static_cast<int>(size));
+ if (is_sync) {
+ // TODO(karlschimpf): Make this work when asynchronous.
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361
+ bool is_wasm = module_env->module_env.is_wasm();
+ (is_wasm ? isolate->counters()->wasm_wasm_function_size_bytes()
+ : isolate->counters()->wasm_asm_function_size_bytes())
+ ->AddSample(static_cast<int>(size));
+ }
ModuleDecoder decoder(zone, function_start, function_end, kWasmOrigin);
return decoder.DecodeSingleFunction(
module_env, std::unique_ptr<WasmFunction>(new WasmFunction()));
}
+} // namespace
+
+FunctionResult DecodeWasmFunction(Isolate* isolate, Zone* zone,
+ ModuleBytesEnv* module_env,
+ const byte* function_start,
+ const byte* function_end, bool is_sync) {
+ if (is_sync) {
+ // TODO(karlschimpf): Make this work when asynchronous.
+ // https://bugs.chromium.org/p/v8/issues/detail?id=6361
+ size_t size = function_end - function_start;
+ bool is_wasm = module_env->module_env.is_wasm();
+ (is_wasm ? isolate->counters()->wasm_wasm_function_size_bytes()
+ : isolate->counters()->wasm_asm_function_size_bytes())
+ ->AddSample(static_cast<int>(size));
+ HistogramTimerScope wasm_decode_function_time_scope(
+ is_wasm ? isolate->counters()->wasm_decode_wasm_function_time()
+ : isolate->counters()->wasm_decode_asm_function_time());
+ return DecodeWasmFunctionInternal(isolate, zone, module_env, function_start,
+ function_end, true);
+ }
+ return DecodeWasmFunctionInternal(isolate, zone, module_env, function_start,
+ function_end, false);
+}
+
AsmJsOffsetsResult DecodeAsmJsOffsets(const byte* tables_start,
const byte* tables_end) {
AsmJsOffsets table;
« no previous file with comments | « src/wasm/module-decoder.h ('k') | src/wasm/wasm-module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698