summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2009-12-10 03:42:30 +0000
committerSteven Knight <knight@baldmt.com>2009-12-10 03:42:30 +0000
commit604c4c7e621ef996797b4fd4b3371b3271fbb908 (patch)
tree752358a6720d64a6737668780d3d531a86d5ee1c
parent54a94a65aac9a5478547930a680b46fc3021d822 (diff)
downloadscons-604c4c7e621ef996797b4fd4b3371b3271fbb908.tar.gz
Infrastructure to support calibration runs of TimeSCons tests, which
only run a full build and report back the values of any variables affecting the configuration, and the elapsed time of the full build.
-rw-r--r--QMTest/TestSCons.py54
-rw-r--r--timings/CPPPATH/TimeSCons-run.py8
-rw-r--r--timings/JTimer/TimeSCons-run.py6
-rw-r--r--timings/hundred/TimeSCons-run.py8
4 files changed, 57 insertions, 19 deletions
diff --git a/QMTest/TestSCons.py b/QMTest/TestSCons.py
index 929567d9..002baaae 100644
--- a/QMTest/TestSCons.py
+++ b/QMTest/TestSCons.py
@@ -997,8 +997,23 @@ class TimeSCons(TestSCons):
directory containing the executing script to the temporary
working directory.
"""
+ self.variables = kw.get('variables')
+ if self.variables is not None:
+ for variable, value in self.variables.items():
+ value = os.environ.get(variable, value)
+ try:
+ value = int(value)
+ except ValueError:
+ try:
+ value = float(value)
+ except ValueError:
+ pass
+ self.variables[variable] = value
+ del kw['variables']
+
if not kw.has_key('verbose'):
kw['verbose'] = True
+
# TODO(1.5)
#TestSCons.__init__(self, *args, **kw)
apply(TestSCons.__init__, (self,)+args, kw)
@@ -1028,13 +1043,24 @@ class TimeSCons(TestSCons):
The elapsed time to execute each build is printed after
it has finished.
"""
- # TODO(1.5)
- #self.help(*args, **kw)
- #self.full(*args, **kw)
- #self.null(*args, **kw)
- apply(self.help, args, kw)
- apply(self.full, args, kw)
- apply(self.null, args, kw)
+ if not kw.has_key('options') and self.variables:
+ options = []
+ for variable, value in self.variables.items():
+ options.append('%s=%s' % (variable, value))
+ kw['options'] = ' '.join(options)
+ calibrate = os.environ.get('TIMESCONS_CALIBRATE')
+ if calibrate in (None, '0'):
+ # TODO(1.5)
+ #self.help(*args, **kw)
+ #self.full(*args, **kw)
+ #self.null(*args, **kw)
+ apply(self.help, args, kw)
+ apply(self.full, args, kw)
+ apply(self.null, args, kw)
+ else:
+ # TODO(1.5)
+ #self.calibration(*args, **kw)
+ apply(self.calibration, args, kw)
def trace(self, graph, name, value, units, sort=None):
fmt = "TRACE: graph=%s name=%s value=%s units=%s"
@@ -1081,6 +1107,20 @@ class TimeSCons(TestSCons):
sys.stdout.write(self.stdout())
self.report_traces('full', self.stdout())
+ def calibration(self, *args, **kw):
+ """
+ Runs a full build of SCons, but only reports calibration
+ information (the variable(s) that were set for this configuration,
+ and the elapsed time to run.
+ """
+ # TODO(1.5)
+ #self.run(*args, **kw)
+ apply(self.run, args, kw)
+ if self.variables:
+ for variable, value in self.variables.items():
+ sys.stdout.write('VARIABLE: %s=%s\n' % (variable, value))
+ sys.stdout.write('ELAPSED: %s\n' % self.elapsed_time())
+
def null(self, *args, **kw):
"""
Runs an up-to-date null build of SCons.
diff --git a/timings/CPPPATH/TimeSCons-run.py b/timings/CPPPATH/TimeSCons-run.py
index d88042e6..dcee7c5c 100644
--- a/timings/CPPPATH/TimeSCons-run.py
+++ b/timings/CPPPATH/TimeSCons-run.py
@@ -32,13 +32,11 @@ file #includes the .h file to be found in the last directory in the list.
import TestSCons
-test = TestSCons.TimeSCons()
+test = TestSCons.TimeSCons(variables={'DIR_COUNT':5000})
-dir_count = 5000
-
-for d in xrange(dir_count):
+for d in xrange(test.variables['DIR_COUNT']):
test.subdir('inc_%04d' % d)
-test.main(options='DIR_COUNT=%s' % dir_count)
+test.main()
test.pass_test()
diff --git a/timings/JTimer/TimeSCons-run.py b/timings/JTimer/TimeSCons-run.py
index 36b016f1..05ffbfb9 100644
--- a/timings/JTimer/TimeSCons-run.py
+++ b/timings/JTimer/TimeSCons-run.py
@@ -38,6 +38,8 @@ to the Taskmaster so it could be smarter about not re-evaluating Nodes.
import TestSCons
-target_count = 500
+test = TestSCons.TimeSCons(variables={'TARGET_COUNT':500})
-TestSCons.TimeSCons().main(options='TARGET_COUNT=%d' % target_count)
+test.main()
+
+test.pass_test()
diff --git a/timings/hundred/TimeSCons-run.py b/timings/hundred/TimeSCons-run.py
index d21db8a5..915c1319 100644
--- a/timings/hundred/TimeSCons-run.py
+++ b/timings/hundred/TimeSCons-run.py
@@ -33,13 +33,11 @@ equivalent of "echo contents > $TARGET".
import TestSCons
-test = TestSCons.TimeSCons()
+test = TestSCons.TimeSCons(variables={'TARGET_COUNT':500})
-target_count = 500
-
-for t in xrange(target_count):
+for t in xrange(test.variables['TARGET_COUNT']):
open('source_%04d' % t, 'wb' ).write('contents\n')
-test.main(options='TARGET_COUNT=%s' % target_count)
+test.main()
test.pass_test()