66
77#include " src/asmjs/asm-js.h"
88#include " src/logging/counters.h"
9+ #include " src/logging/metrics.h"
910#include " src/numbers/conversions-inl.h"
1011#include " src/objects/property-descriptor.h"
1112#include " src/tracing/trace-event.h"
@@ -203,8 +204,8 @@ Handle<Map> AllocateSubRtt(Isolate* isolate,
203204// It closes over the {Isolate}, the {ErrorThrower}, etc.
204205class InstanceBuilder {
205206 public:
206- InstanceBuilder (Isolate* isolate, ErrorThrower* thrower ,
207- Handle<WasmModuleObject> module_object,
207+ InstanceBuilder (Isolate* isolate, v8::metrics::Recorder::ContextId context_id ,
208+ ErrorThrower* thrower, Handle<WasmModuleObject> module_object,
208209 MaybeHandle<JSReceiver> ffi,
209210 MaybeHandle<JSArrayBuffer> memory_buffer);
210211
@@ -222,6 +223,7 @@ class InstanceBuilder {
222223 };
223224
224225 Isolate* isolate_;
226+ v8::metrics::Recorder::ContextId context_id_;
225227 const WasmFeatures enabled_;
226228 const WasmModule* const module_;
227229 ErrorThrower* thrower_;
@@ -357,7 +359,9 @@ MaybeHandle<WasmInstanceObject> InstantiateToInstanceObject(
357359 Isolate* isolate, ErrorThrower* thrower,
358360 Handle<WasmModuleObject> module_object, MaybeHandle<JSReceiver> imports,
359361 MaybeHandle<JSArrayBuffer> memory_buffer) {
360- InstanceBuilder builder (isolate, thrower, module_object, imports,
362+ v8::metrics::Recorder::ContextId context_id =
363+ isolate->GetOrRegisterRecorderContextId (isolate->native_context ());
364+ InstanceBuilder builder (isolate, context_id, thrower, module_object, imports,
361365 memory_buffer);
362366 auto instance = builder.Build ();
363367 if (!instance.is_null () && builder.ExecuteStartFunction ()) {
@@ -367,11 +371,14 @@ MaybeHandle<WasmInstanceObject> InstantiateToInstanceObject(
367371 return {};
368372}
369373
370- InstanceBuilder::InstanceBuilder (Isolate* isolate, ErrorThrower* thrower,
374+ InstanceBuilder::InstanceBuilder (Isolate* isolate,
375+ v8::metrics::Recorder::ContextId context_id,
376+ ErrorThrower* thrower,
371377 Handle<WasmModuleObject> module_object,
372378 MaybeHandle<JSReceiver> ffi,
373379 MaybeHandle<JSArrayBuffer> memory_buffer)
374380 : isolate_(isolate),
381+ context_id_(context_id),
375382 enabled_(module_object->native_module ()->enabled_features()),
376383 module_(module_object->module ()),
377384 thrower_(thrower),
@@ -401,6 +408,11 @@ MaybeHandle<WasmInstanceObject> InstanceBuilder::Build() {
401408 // Record build time into correct bucket, then build instance.
402409 TimedHistogramScope wasm_instantiate_module_time_scope (SELECT_WASM_COUNTER (
403410 isolate_->counters (), module_->origin , wasm_instantiate, module_time));
411+ v8::metrics::WasmModuleInstantiated wasm_module_instantiated;
412+ metrics::TimedScope<v8::metrics::WasmModuleInstantiated>
413+ wasm_module_instantiated_timed_scope (
414+ &wasm_module_instantiated,
415+ &v8::metrics::WasmModuleInstantiated::wall_clock_time_in_us);
404416 NativeModule* native_module = module_object_->native_module ();
405417
406418 // --------------------------------------------------------------------------
@@ -579,6 +591,7 @@ MaybeHandle<WasmInstanceObject> InstanceBuilder::Build() {
579591 // --------------------------------------------------------------------------
580592 int num_imported_functions = ProcessImports (instance);
581593 if (num_imported_functions < 0 ) return {};
594+ wasm_module_instantiated.imported_function_count = num_imported_functions;
582595
583596 // --------------------------------------------------------------------------
584597 // Create maps for managed objects (GC proposal).
@@ -714,6 +727,10 @@ MaybeHandle<WasmInstanceObject> InstanceBuilder::Build() {
714727 DCHECK (!isolate_->has_pending_exception ());
715728 TRACE (" Successfully built instance for module %p\n " ,
716729 module_object_->native_module ());
730+ wasm_module_instantiated.success = true ;
731+ wasm_module_instantiated_timed_scope.Stop ();
732+ isolate_->metrics_recorder ()->DelayMainThreadEvent (wasm_module_instantiated,
733+ context_id_);
717734 return instance;
718735}
719736
0 commit comments