From: Ben Noordhuis Date: Wed, 30 Sep 2015 00:07:56 +0000 (+0200) Subject: util: optimize promise introspection X-Git-Tag: v4.1.2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d8ab4e185dc9f664084bb12a66c8e1d136676e9b;p=platform%2Fupstream%2Fnodejs.git util: optimize promise introspection Use V8's builtin ObjectIsPromise() to check that the value is a promise before creating the promise mirror. Reduces garbage collector strain in the (common) non-promise case, which is beneficial when inspecting deep object graphs. PR-URL: https://github.com/nodejs/node/pull/3130 Reviewed-By: Evan Lucas Reviewed-By: Sakthipriyan Vairamani --- diff --git a/lib/util.js b/lib/util.js index c5d7bea..7b2bfd2 100644 --- a/lib/util.js +++ b/lib/util.js @@ -3,7 +3,9 @@ const uv = process.binding('uv'); const Buffer = require('buffer').Buffer; const internalUtil = require('internal/util'); + var Debug; +var ObjectIsPromise; const formatRegExp = /%[sdj%]/g; exports.format = function(f) { @@ -183,11 +185,21 @@ function getConstructorOf(obj) { } +function ensureDebugIsInitialized() { + if (Debug === undefined) { + const runInDebugContext = require('vm').runInDebugContext; + const result = runInDebugContext('[Debug, ObjectIsPromise]'); + Debug = result[0]; + ObjectIsPromise = result[1]; + } +} + + function inspectPromise(p) { - Debug = Debug || require('vm').runInDebugContext('Debug'); - var mirror = Debug.MakeMirror(p, true); - if (!mirror.isPromise()) + ensureDebugIsInitialized(); + if (!ObjectIsPromise(p)) return null; + const mirror = Debug.MakeMirror(p, true); return {status: mirror.status(), value: mirror.promiseValue().value_}; }