summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-11-30 11:04:34 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2019-12-07 00:38:28 +0100
commitc430aebe8683699fc072cb87e5be03af370a3f2f (patch)
tree3f93ee11527492d5295853b93c0252a4afafa423
parentbdb1083ef54cf99c959c554b741e62943b56e2af (diff)
downloadandroid-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.tar.gz
android-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.tar.bz2
android-node-v8-c430aebe8683699fc072cb87e5be03af370a3f2f.zip
util: improve performance inspecting proxies
This makes sure we do not retrieve the handler in case it's not required. This improves the performance a tiny bit for these cases. PR-URL: https://github.com/nodejs/node/pull/30767 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Denys Otrishko <shishugi@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
-rw-r--r--benchmark/util/inspect-proxy.js2
-rw-r--r--lib/internal/util/inspect.js4
-rw-r--r--src/node_util.cc20
-rw-r--r--test/parallel/test-util-inspect-proxy.js7
4 files changed, 22 insertions, 11 deletions
diff --git a/benchmark/util/inspect-proxy.js b/benchmark/util/inspect-proxy.js
index fd89d568ab..02379cdc77 100644
--- a/benchmark/util/inspect-proxy.js
+++ b/benchmark/util/inspect-proxy.js
@@ -4,7 +4,7 @@ const util = require('util');
const common = require('../common.js');
const bench = common.createBenchmark(main, {
- n: [2e4],
+ n: [1e5],
showProxy: [0, 1],
isProxy: [0, 1]
});
diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js
index 7005911621..4e6f967c6a 100644
--- a/lib/internal/util/inspect.js
+++ b/lib/internal/util/inspect.js
@@ -643,12 +643,12 @@ function formatValue(ctx, value, recurseTimes, typedArray) {
const context = value;
// Always check for proxies to prevent side effects and to prevent triggering
// any proxy handlers.
- const proxy = getProxyDetails(value);
+ const proxy = getProxyDetails(value, !!ctx.showProxy);
if (proxy !== undefined) {
if (ctx.showProxy) {
return formatProxy(ctx, proxy, recurseTimes);
}
- value = proxy[0];
+ value = proxy;
}
// Provide a hook for user-specified inspect functions.
diff --git a/src/node_util.cc b/src/node_util.cc
index 9c24985a47..07a7b69dbd 100644
--- a/src/node_util.cc
+++ b/src/node_util.cc
@@ -91,15 +91,23 @@ static void GetProxyDetails(const FunctionCallbackInfo<Value>& args) {
if (!args[0]->IsProxy())
return;
+ CHECK(args[1]->IsBoolean());
+
Local<Proxy> proxy = args[0].As<Proxy>();
- Local<Value> ret[] = {
- proxy->GetTarget(),
- proxy->GetHandler()
- };
+ if (args[1]->IsTrue()) {
+ Local<Value> ret[] = {
+ proxy->GetTarget(),
+ proxy->GetHandler()
+ };
- args.GetReturnValue().Set(
- Array::New(args.GetIsolate(), ret, arraysize(ret)));
+ args.GetReturnValue().Set(
+ Array::New(args.GetIsolate(), ret, arraysize(ret)));
+ } else {
+ Local<Value> ret = proxy->GetTarget();
+
+ args.GetReturnValue().Set(ret);
+ }
}
static void PreviewEntries(const FunctionCallbackInfo<Value>& args) {
diff --git a/test/parallel/test-util-inspect-proxy.js b/test/parallel/test-util-inspect-proxy.js
index da0512eda1..c684026b19 100644
--- a/test/parallel/test-util-inspect-proxy.js
+++ b/test/parallel/test-util-inspect-proxy.js
@@ -43,10 +43,13 @@ util.inspect(proxyObj, opts);
// getProxyDetails is an internal method, not intended for public use.
// This is here to test that the internals are working correctly.
-const details = processUtil.getProxyDetails(proxyObj);
+let details = processUtil.getProxyDetails(proxyObj, true);
assert.strictEqual(target, details[0]);
assert.strictEqual(handler, details[1]);
+details = processUtil.getProxyDetails(proxyObj, false);
+assert.strictEqual(target, details);
+
assert.strictEqual(
util.inspect(proxyObj, opts),
'Proxy [\n' +
@@ -105,7 +108,7 @@ const expected6 = 'Proxy [\n' +
' ]\n' +
']';
assert.strictEqual(
- util.inspect(proxy1, { showProxy: true, depth: null }),
+ util.inspect(proxy1, { showProxy: 1, depth: null }),
expected1);
assert.strictEqual(util.inspect(proxy2, opts), expected2);
assert.strictEqual(util.inspect(proxy3, opts), expected3);