trace_events: add node.promises category, rejection counter · nodejs/node@fd318e7 · GitHub
Skip to content

Commit fd318e7

Browse files
jasnelltargos
authored andcommitted
trace_events: add node.promises category, rejection counter
Allow the trace event log to include a count of unhandled rejections and handled after rejections. This is useful primarily as a quick check to see if rejections may be going unhandled (and unnoticed in a process). PR-URL: #22124 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent 9d85a05 commit fd318e7

3 files changed

Lines changed: 66 additions & 1 deletion

File tree

doc/api/tracing.md

Lines changed: 3 additions & 1 deletion

src/bootstrapper.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#include "node_internals.h"
44
#include "v8.h"
55

6+
#include <atomic>
7+
68
namespace node {
79

810
using v8::Array;
@@ -51,6 +53,9 @@ void SetupNextTick(const FunctionCallbackInfo<Value>& args) {
5153
}
5254

5355
void PromiseRejectCallback(PromiseRejectMessage message) {
56+
static std::atomic<uint64_t> unhandledRejections{0};
57+
static std::atomic<uint64_t> rejectionsHandledAfter{0};
58+
5459
Local<Promise> promise = message.GetPromise();
5560
Isolate* isolate = promise->GetIsolate();
5661
PromiseRejectEvent event = message.GetEvent();
@@ -65,13 +70,23 @@ void PromiseRejectCallback(PromiseRejectMessage message) {
6570

6671
if (value.IsEmpty())
6772
value = Undefined(isolate);
73+
74+
unhandledRejections++;
6875
} else if (event == v8::kPromiseHandlerAddedAfterReject) {
6976
callback = env->promise_reject_handled_function();
7077
value = Undefined(isolate);
78+
79+
rejectionsHandledAfter++;
7180
} else {
7281
return;
7382
}
7483

84+
TRACE_COUNTER2(TRACING_CATEGORY_NODE2(promises, rejections),
85+
"rejections",
86+
"unhandled", unhandledRejections,
87+
"handledAfter", rejectionsHandledAfter);
88+
89+
7590
Local<Value> args[] = { promise, value };
7691
MaybeLocal<Value> ret = callback->Call(env->context(),
7792
Undefined(isolate),
Lines changed: 48 additions & 0 deletions

0 commit comments

Comments
 (0)