Skip to content

Commit

Permalink
build: add target for checking for perm deopts
Browse files Browse the repository at this point in the history
PR-URL: #12456
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
mscdex authored and evanlucas committed May 2, 2017
1 parent 4cd73b4 commit 0f58599
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 2 deletions.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
46 changes: 45 additions & 1 deletion tools/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,39 @@ def HasRun(self, output):
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):

Expand Down Expand Up @@ -432,7 +465,8 @@ def ClearLine(self, last_line_length):
'dots': DotsProgressIndicator,
'color': ColorProgressIndicator,
'tap': TapProgressIndicator,
'mono': MonochromeProgressIndicator
'mono': MonochromeProgressIndicator,
'deopts': DeoptsCheckProgressIndicator
}


Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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)

Expand Down
13 changes: 12 additions & 1 deletion vcbuild.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 0f58599

Please sign in to comment.