diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2018-06-27 22:31:01 +0800 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2018-07-27 14:51:27 +0800 |
commit | 186c2fb6d88c473c6b811f36c87656785131b2d7 (patch) | |
tree | 034b0a47960a67d48f61a3591240529212adb7d6 /tools/generate_code_cache.js | |
parent | c91e0ed3ad048deba9639e35570e5b6dcd7b7d39 (diff) | |
download | android-node-v8-186c2fb6d88c473c6b811f36c87656785131b2d7.tar.gz android-node-v8-186c2fb6d88c473c6b811f36c87656785131b2d7.tar.bz2 android-node-v8-186c2fb6d88c473c6b811f36c87656785131b2d7.zip |
build: create V8 code cache after script is run
This patch makes it possible to generate the code cache
for the builtins directly from the original script object
(instead of compiling a new one) and after the script has
been run (via `NativeModule.require`). Before this patch
only the top level functions (the wrapped ones)
are included in the cache, after this patch the inner
functions in those modules will be included as well.
Also blacklists modules from dependencies like V8 and
node-inspect since we cannot guarantee that they are suitable
to be executed directly.
PR-URL: https://github.com/nodejs/node/pull/21567
Refs: https://github.com/nodejs/node/issues/21563
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'tools/generate_code_cache.js')
-rw-r--r-- | tools/generate_code_cache.js | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/tools/generate_code_cache.js b/tools/generate_code_cache.js index 8aab6bc286..740cbd718a 100644 --- a/tools/generate_code_cache.js +++ b/tools/generate_code_cache.js @@ -8,12 +8,10 @@ // of `configure`. const { - nativeModuleWrap, - builtinSource, - cannotUseCache + getCodeCache, + cachableBuiltins } = require('internal/bootstrap/cache'); -const vm = require('vm'); const fs = require('fs'); const resultPath = process.argv[2]; @@ -72,25 +70,16 @@ const cacheInitializers = []; let totalCacheSize = 0; -for (const key of Object.keys(builtinSource)) { - if (cannotUseCache.includes(key)) continue; - const code = nativeModuleWrap(builtinSource[key]); - - // Note that this must corresponds to the code in - // NativeModule.prototype.compile - const script = new vm.Script(code, { - filename: `${key}.js`, - produceCachedData: true - }); - - if (!script.cachedData) { +for (const key of cachableBuiltins) { + const cachedData = getCodeCache(key); + if (!cachedData.length) { console.error(`Failed to generate code cache for '${key}'`); process.exit(1); } - const length = script.cachedData.length; + const length = cachedData.length; totalCacheSize += length; - const { definition, initializer } = getInitalizer(key, script.cachedData); + const { definition, initializer } = getInitalizer(key, cachedData); cacheDefinitions.push(definition); cacheInitializers.push(initializer); console.log(`Generated cache for '${key}', size = ${formatSize(length)}` + |