@@ -1750,6 +1750,18 @@ def warning_only(self):
17501750 return True
17511751
17521752
1753+ def _prebuilt_vm_arg_parser ():
1754+ parser = ArgumentParser (add_help = False , usage = _mx_benchmark_usage_example + " -- <options> -- ..." )
1755+ group = parser .add_mutually_exclusive_group ()
1756+ group .add_argument ("--prebuilt-vm" , action = "store_true" , help = "Uses the VM pointed to by JAVA_HOME to run benchmarks." )
1757+ return parser
1758+
1759+ _prebuilt_vm_parser_name = "prebuilt_vm_parser"
1760+ parsers [_prebuilt_vm_parser_name ] = ParserEntry (
1761+ _prebuilt_vm_arg_parser (),
1762+ "Alternative VM selection:"
1763+ )
1764+
17531765class VmBenchmarkSuite (StdOutBenchmarkSuite ):
17541766 def vmArgs (self , bmSuiteArgs ):
17551767 args = self .vmAndRunArgs (bmSuiteArgs )[0 ]
@@ -1776,7 +1788,7 @@ def func(cmd, bmSuite, prefix_command=prefix_command):
17761788 return args
17771789
17781790 def parserNames (self ):
1779- names = []
1791+ names = [_prebuilt_vm_parser_name ]
17801792
17811793 def _acc (reg ):
17821794 names .append (reg .get_parser_name ())
@@ -1837,7 +1849,11 @@ def runAndReturnStdOut(self, benchmarks, bmSuiteArgs):
18371849 if command is None :
18381850 return 0 , "" , {}
18391851 vm = self .get_vm_registry ().get_vm_from_suite_args (bmSuiteArgs )
1840- vm .extract_vm_info (self .vmArgs (bmSuiteArgs ))
1852+ prebuilt_args , _ = get_parser (_prebuilt_vm_parser_name ).parse_known_args (bmSuiteArgs )
1853+ if hasattr (vm , 'set_run_on_java_home' ):
1854+ vm .set_run_on_java_home (prebuilt_args .prebuilt_vm )
1855+ vmArgs = self .vmArgs (bmSuiteArgs )
1856+ vm .extract_vm_info (vmArgs )
18411857 vm .command_mapper_hooks = [(name , func , self ) for name , func in self ._command_mapper_hooks .items ()]
18421858 with self .new_execution_context (vm , benchmarks , bmSuiteArgs ):
18431859 t = self ._vmRun (vm , cwd , command , benchmarks , bmSuiteArgs )
@@ -2188,6 +2204,7 @@ class OutputCapturingJavaVm(OutputCapturingVm): #pylint: disable=R0921
21882204 def __init__ (self ):
21892205 super (OutputCapturingJavaVm , self ).__init__ ()
21902206 self ._vm_info = {}
2207+ self ._run_on_java_home = None
21912208 # prevents an infinite loop when the host-vm is a GraalVm since its `run_java()` function calls `extract_vm_info()`, which calls `run_java()`
21922209 self .currently_extracting_vm_info = False
21932210
@@ -2266,6 +2283,8 @@ def extract_vm_info(self, args=None):
22662283 self .currently_extracting_vm_info = False
22672284 self .command_mapper_hooks = hooks
22682285
2286+ vm_info ["platform.prebuilt-vm" ] = self .run_on_java_home () is True
2287+
22692288 self ._vm_info [args_str ] = vm_info
22702289
22712290 def dimensions (self , cwd , args , code , out ):
@@ -2288,6 +2307,14 @@ def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False):
22882307 """Runs JVM with the specified arguments stdout and stderr, and working dir."""
22892308 raise NotImplementedError ()
22902309
2310+ def run_on_java_home (self ):
2311+ """Describes if we should run on the given VM or on a one derived from it as some subclasses would do by default"""
2312+ return self ._run_on_java_home
2313+
2314+ def set_run_on_java_home (self , value ):
2315+ """When setting to True, it would force the use of the VM pointed by JAVA_HOME to be used as runtime"""
2316+ self ._run_on_java_home = value
2317+
22912318 def home (self ):
22922319 """Returns the JAVA_HOME location of that vm"""
22932320 return mx .get_jdk ().home
0 commit comments