From 0504edbddebf8d4b6935b00af2a9650d50c55749 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 11 Nov 2022 14:09:56 +0100 Subject: [PATCH] add instrumentation --- resources/entry-point-trampoline.js | 9 +++++++-- resources/main-template.cc | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/resources/entry-point-trampoline.js b/resources/entry-point-trampoline.js index 2d11ebf..d10f73a 100644 --- a/resources/entry-point-trampoline.js +++ b/resources/entry-point-trampoline.js @@ -7,7 +7,9 @@ const { requireMappings, enableBindingsPatch } = REPLACE_WITH_BOXEDNODE_CONFIG; +mongoshStartupTiming.startReadingMainSource = process.hrtime.bigint(); const src = require(srcMod); +mongoshStartupTiming.finishReadingMainSource = process.hrtime.bigint(); const hydatedRequireMappings = requireMappings.map(([re, reFlags, linked]) => [new RegExp(re, reFlags), linked]); @@ -79,10 +81,13 @@ module.exports = (() => { path: __dirname, require }; - vm.compileFunction(src, [ + mongoshStartupTiming.startCompilingMainSource = process.hrtime.bigint(); + const fn = vm.compileFunction(src, [ '__filename', '__dirname', 'require', 'exports', 'module' ], { filename: __filename - })(__filename, __dirname, require, exports, module); + }); + mongoshStartupTiming.finishCompilingMainSource = process.hrtime.bigint(); + fn(__filename, __dirname, require, exports, module); return module.exports; })(); diff --git a/resources/main-template.cc b/resources/main-template.cc index 8c19c30..4e0a244 100644 --- a/resources/main-template.cc +++ b/resources/main-template.cc @@ -16,6 +16,8 @@ #include #endif +static uint64_t process_start_time = uv_hrtime(); + using namespace node; using namespace v8; @@ -125,9 +127,13 @@ static int RunNodeInstance(MultiIsolatePlatform* platform, // instead of the internal-only `require` function. MaybeLocal loadenv_ret = node::LoadEnvironment( env.get(), + ("globalThis.mongoshStartupTiming = {" + " processStartTime: " + std::to_string(process_start_time) + "n,\n" + " nodeStartup: process.hrtime.bigint()\n" + "};\n" "const path = require('path');\n" "if (process.argv[2] === '--') process.argv.splice(2, 1);\n" - "require(" REPLACE_WITH_ENTRY_POINT ")"); + "require(" REPLACE_WITH_ENTRY_POINT ")").c_str()); if (loadenv_ret.IsEmpty()) // There has been a JS exception. return 1;