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

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

Issue 2929853003: Fix use of history timers in background threads. (Closed)
Patch Set: Fix issues with counters on foreground thread. Created 3 years, 6 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/wasm/module-decoder.cc
diff --git a/src/wasm/module-decoder.cc b/src/wasm/module-decoder.cc
index 7503e4070b06f491c44c5d4cd11c2eb3cba5e489..904db736db231bac8c5e2d92c64410319d5dc8ff 100644
--- a/src/wasm/module-decoder.cc
+++ b/src/wasm/module-decoder.cc
@@ -1214,11 +1214,13 @@ class ModuleDecoder : public Decoder {
}
};
-ModuleResult DecodeWasmModuleInternal(Isolate* isolate,
- const byte* module_start,
- const byte* module_end,
- bool verify_functions,
- ModuleOrigin origin, bool is_sync) {
+ModuleResult DecodeWasmModule(Isolate* isolate, const byte* module_start,
+ const byte* module_end, bool verify_functions,
+ ModuleOrigin origin, Counters* counters,
+ bool is_sync) {
+ TimedHistogramScope wasm_decode_module_time_scope(
+ IsWasm(origin) ? counters->wasm_decode_wasm_module_time()
+ : counters->wasm_decode_asm_module_time());
size_t size = module_end - module_start;
if (module_start > module_end) return ModuleResult::Error("start > end");
if (size >= kV8MaxWasmModuleSize)
@@ -1227,8 +1229,8 @@ ModuleResult DecodeWasmModuleInternal(Isolate* isolate,
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())
+ (IsWasm(origin) ? counters->wasm_wasm_module_size_bytes()
+ : counters->wasm_asm_module_size_bytes())
->AddSample(static_cast<int>(size));
}
// Signatures are stored in zone memory, which have the same lifetime
@@ -1242,9 +1244,8 @@ ModuleResult DecodeWasmModuleInternal(Isolate* isolate,
if (is_sync && result.ok()) {
// 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())
+ (IsWasm(origin) ? counters->wasm_decode_wasm_module_peak_memory_bytes()
+ : counters->wasm_decode_asm_module_peak_memory_bytes())
->AddSample(
static_cast<int>(result.val->signature_zone->allocation_size()));
}
@@ -1253,20 +1254,19 @@ ModuleResult DecodeWasmModuleInternal(Isolate* isolate,
} // 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);
+ModuleResult SyncDecodeWasmModule(Isolate* isolate, const byte* module_start,
+ const byte* module_end, bool verify_functions,
+ ModuleOrigin origin) {
+ return DecodeWasmModule(isolate, module_start, module_end, verify_functions,
+ origin, isolate->counters(), true);
+}
+
+ModuleResult AsyncDecodeWasmModule(Isolate* isolate, const byte* module_start,
+ const byte* module_end,
+ bool verify_functions, ModuleOrigin origin,
+ const std::shared_ptr<Counters>& counters) {
+ return DecodeWasmModule(isolate, module_start, module_end, verify_functions,
+ origin, counters.get(), false);
}
FunctionSig* DecodeWasmSignatureForTesting(Zone* zone, const byte* start,
@@ -1283,12 +1283,19 @@ WasmInitExpr DecodeWasmInitExprForTesting(const byte* start, const byte* end) {
namespace {
-FunctionResult DecodeWasmFunctionInternal(Isolate* isolate, Zone* zone,
- ModuleBytesEnv* module_env,
- const byte* function_start,
- const byte* function_end,
- bool is_sync) {
+FunctionResult DecodeWasmFunction(Isolate* isolate, Zone* zone,
+ ModuleBytesEnv* module_env,
+ const byte* function_start,
+ const byte* function_end, Counters* counters,
+ bool is_sync) {
size_t size = function_end - function_start;
+ bool is_wasm = module_env->module_env.is_wasm();
+ (is_wasm ? counters->wasm_wasm_function_size_bytes()
+ : counters->wasm_asm_function_size_bytes())
+ ->AddSample(static_cast<int>(size));
+ TimedHistogramScope wasm_decode_function_time_scope(
+ is_wasm ? counters->wasm_decode_wasm_function_time()
+ : counters->wasm_decode_asm_function_time());
if (function_start > function_end)
return FunctionResult::Error("start > end");
if (size > kV8MaxWasmFunctionSize)
@@ -1297,8 +1304,8 @@ FunctionResult DecodeWasmFunctionInternal(Isolate* isolate, Zone* zone,
// 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())
+ (is_wasm ? counters->wasm_wasm_function_size_bytes()
+ : counters->wasm_asm_function_size_bytes())
->AddSample(static_cast<int>(size));
}
ModuleDecoder decoder(function_start, function_end, kWasmOrigin);
@@ -1307,27 +1314,20 @@ FunctionResult DecodeWasmFunctionInternal(Isolate* isolate, Zone* zone,
}
} // namespace
+FunctionResult SyncDecodeWasmFunction(Isolate* isolate, Zone* zone,
+ ModuleBytesEnv* module_env,
+ const byte* function_start,
+ const byte* function_end) {
+ return DecodeWasmFunction(isolate, zone, module_env, function_start,
+ function_end, isolate->counters(), true);
+}
-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);
+FunctionResult AsyncDecodeWasmFunction(
+ Isolate* isolate, Zone* zone, ModuleBytesEnv* module_env,
+ const byte* function_start, const byte* function_end,
+ const std::shared_ptr<Counters>& counters) {
+ return DecodeWasmFunction(isolate, zone, module_env, function_start,
+ function_end, counters.get(), false);
}
AsmJsOffsetsResult DecodeAsmJsOffsets(const byte* tables_start,

Powered by Google App Engine
This is Rietveld 408576698