summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian White <mscdex@mscdex.net>2017-04-17 00:01:00 -0400
committerEvan Lucas <evanlucas@me.com>2017-05-02 20:39:18 -0500
commitcaf6506f9f56fc8d7d5fe3e8eefe2f43c50a3fd0 (patch)
tree01ca9c1778f97d50eac74ee2819ae37591ce0fde
parent9da719ab32b83592da27ba2acd31e0f0ede2a28e (diff)
downloadnode-new-caf6506f9f56fc8d7d5fe3e8eefe2f43c50a3fd0.tar.gz
build: add target for checking for perm deopts
PR-URL: https://github.com/nodejs/node/pull/12456 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--Makefile3
-rwxr-xr-xtools/test.py46
-rw-r--r--vcbuild.bat13
3 files changed, 60 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 17dcfa0616..a0323f6c81 100644
--- a/Makefile
+++ b/Makefile
@@ -204,6 +204,9 @@ test-parallel: all
test-valgrind: all
$(PYTHON) tools/test.py --mode=release --valgrind sequential parallel message
+test-check-deopts: all
+ $(PYTHON) tools/test.py --mode=release --check-deopts parallel sequential -J
+
# Implicitly depends on $(NODE_EXE). We don't depend on it explicitly because
# it always triggers a rebuild due to it being a .PHONY rule. See the comment
# near the build-addons rule for more background.
diff --git a/tools/test.py b/tools/test.py
index ff9ba7cbc4..0327484a8d 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -340,6 +340,39 @@ class TapProgressIndicator(SimpleProgressIndicator):
def Done(self):
pass
+class DeoptsCheckProgressIndicator(SimpleProgressIndicator):
+
+ def Starting(self):
+ pass
+
+ def AboutToRun(self, case):
+ pass
+
+ def HasRun(self, output):
+ # Print test name as (for example) "parallel/test-assert". Tests that are
+ # scraped from the addons documentation are all named test.js, making it
+ # hard to decipher what test is running when only the filename is printed.
+ prefix = abspath(join(dirname(__file__), '../test')) + os.sep
+ command = output.command[-1]
+ if command.endswith('.js'): command = command[:-3]
+ if command.startswith(prefix): command = command[len(prefix):]
+ command = command.replace('\\', '/')
+
+ stdout = output.output.stdout.strip()
+ printed_file = False
+ for line in stdout.splitlines():
+ if (line.startswith("[aborted optimiz") or \
+ line.startswith("[disabled optimiz")) and \
+ ("because:" in line or "reason:" in line):
+ if not printed_file:
+ printed_file = True
+ print '==== %s ====' % command
+ self.failed.append(output)
+ print ' %s' % line
+
+ def Done(self):
+ pass
+
class CompactProgressIndicator(ProgressIndicator):
@@ -432,7 +465,8 @@ PROGRESS_INDICATORS = {
'dots': DotsProgressIndicator,
'color': ColorProgressIndicator,
'tap': TapProgressIndicator,
- 'mono': MonochromeProgressIndicator
+ 'mono': MonochromeProgressIndicator,
+ 'deopts': DeoptsCheckProgressIndicator
}
@@ -1367,6 +1401,8 @@ def BuildOptions():
help="Expect test cases to fail", default=False, action="store_true")
result.add_option("--valgrind", help="Run tests through valgrind",
default=False, action="store_true")
+ result.add_option("--check-deopts", help="Check tests for permanent deoptimizations",
+ default=False, action="store_true")
result.add_option("--cat", help="Print the source of the tests",
default=False, action="store_true")
result.add_option("--flaky-tests",
@@ -1569,6 +1605,14 @@ def Main():
run_valgrind = join(workspace, "tools", "run-valgrind.py")
options.special_command = "python -u " + run_valgrind + " @"
+ if options.check_deopts:
+ options.node_args.append("--trace-opt")
+ options.node_args.append("--trace-file-names")
+ # --always-opt is needed because many tests do not run long enough for the
+ # optimizer to kick in, so this flag will force it to run.
+ options.node_args.append("--always-opt")
+ options.progress = "deopts"
+
shell = abspath(options.shell)
buildspace = dirname(shell)
diff --git a/vcbuild.bat b/vcbuild.bat
index 58594bdf61..609071ece4 100644
--- a/vcbuild.bat
+++ b/vcbuild.bat
@@ -41,6 +41,7 @@ set configure_flags=
set build_addons=
set dll=
set test_node_inspect=
+set test_check_deopts=
:next-arg
if "%1"=="" goto args-done
@@ -71,6 +72,7 @@ if /i "%1"=="test-pummel" set test_args=%test_args% pummel&goto arg-ok
if /i "%1"=="test-all" set test_args=%test_args% sequential parallel message gc inspector internet pummel&set build_testgc_addon=1&set cpplint=1&set jslint=1&goto arg-ok
if /i "%1"=="test-known-issues" set test_args=%test_args% known_issues&goto arg-ok
if /i "%1"=="test-node-inspect" set test_node_inspect=1&goto arg-ok
+if /i "%1"=="test-check-deopts" set test_check_deopts=1&goto arg-ok
if /i "%1"=="jslint" set jslint=1&goto arg-ok
if /i "%1"=="jslint-ci" set jslint_ci=1&goto arg-ok
if /i "%1"=="lint" set cpplint=1&set jslint=1&goto arg-ok
@@ -338,7 +340,16 @@ endlocal
goto run-tests
:run-tests
-if not defined test_node_inspect goto node-tests
+if defined test_check_deopts goto node-check-deopts
+if defined test_node_inspect goto node-test-inspect
+goto node-tests
+
+:node-check-deopts
+python tools\test.py --mode=release --check-deopts parallel sequential -J
+if defined test_node_inspect goto node-test-inspect
+goto node-tests
+
+:node-test-inspect
set USE_EMBEDDED_NODE_INSPECT=1
%config%\node tools\test-npm-package.js --install deps\node-inspect test
goto node-tests