summaryrefslogtreecommitdiff
path: root/src/node_perf.cc
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2018-10-20 12:13:40 +0200
committerDaniel Bevenius <daniel.bevenius@gmail.com>2018-10-24 05:06:40 +0200
commit22ee5d920970bcbd3103b986be9b8f68394a5361 (patch)
treeaf0515394013c8d6051fa0109ece0430a436ee60 /src/node_perf.cc
parentacb363ffc40a0a76f7314385309a6d4ed78ef354 (diff)
downloadandroid-node-v8-22ee5d920970bcbd3103b986be9b8f68394a5361.tar.gz
android-node-v8-22ee5d920970bcbd3103b986be9b8f68394a5361.tar.bz2
android-node-v8-22ee5d920970bcbd3103b986be9b8f68394a5361.zip
src: simplify `TimerFunctionCall()` in `node_perf.cc`
Picking a path according to a boolean is essentially free, compared to the cost of a function call. Also, remove an unnecessary `TryCatch`. PR-URL: https://github.com/nodejs/node/pull/23782 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Matheus Marchini <mat@mmarchini.me> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src/node_perf.cc')
-rw-r--r--src/node_perf.cc59
1 files changed, 20 insertions, 39 deletions
diff --git a/src/node_perf.cc b/src/node_perf.cc
index 1e1fe13d93..5f1b70a5c4 100644
--- a/src/node_perf.cc
+++ b/src/node_perf.cc
@@ -317,49 +317,30 @@ void TimerFunctionCall(const FunctionCallbackInfo<Value>& args) {
size_t idx;
SlicedArguments call_args(args);
Utf8Value name(isolate, GetName(fn));
+ bool is_construct_call = args.IsConstructCall();
- uint64_t start;
- uint64_t end;
- v8::TryCatch try_catch(isolate);
- if (args.IsConstructCall()) {
- start = PERFORMANCE_NOW();
- TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(
- TRACING_CATEGORY_NODE2(perf, timerify),
- *name, *name, start / 1000);
- v8::MaybeLocal<Object> ret = fn->NewInstance(context,
- call_args.size(),
- call_args.data());
- end = PERFORMANCE_NOW();
- TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(
- TRACING_CATEGORY_NODE2(perf, timerify),
- *name, *name, end / 1000);
-
- if (ret.IsEmpty()) {
- try_catch.ReThrow();
- return;
- }
- args.GetReturnValue().Set(ret.ToLocalChecked());
+ uint64_t start = PERFORMANCE_NOW();
+ TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(
+ TRACING_CATEGORY_NODE2(perf, timerify),
+ *name, *name, start / 1000);
+ v8::MaybeLocal<Value> ret;
+
+ if (is_construct_call) {
+ ret = fn->NewInstance(context, call_args.size(), call_args.data())
+ .FromMaybe(Local<Object>());
} else {
- start = PERFORMANCE_NOW();
- TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(
- TRACING_CATEGORY_NODE2(perf, timerify),
- *name, *name, start / 1000);
- v8::MaybeLocal<Value> ret = fn->Call(context,
- args.This(),
- call_args.size(),
- call_args.data());
- end = PERFORMANCE_NOW();
- TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(
- TRACING_CATEGORY_NODE2(perf, timerify),
- *name, *name, end / 1000);
-
- if (ret.IsEmpty()) {
- try_catch.ReThrow();
- return;
- }
- args.GetReturnValue().Set(ret.ToLocalChecked());
+ ret = fn->Call(context, args.This(), call_args.size(), call_args.data());
}
+ uint64_t end = PERFORMANCE_NOW();
+ TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(
+ TRACING_CATEGORY_NODE2(perf, timerify),
+ *name, *name, end / 1000);
+
+ if (ret.IsEmpty())
+ return;
+ args.GetReturnValue().Set(ret.ToLocalChecked());
+
AliasedBuffer<uint32_t, v8::Uint32Array>& observers =
env->performance_state()->observers;
if (!observers[NODE_PERFORMANCE_ENTRY_TYPE_FUNCTION])