| #!/bin/env python |
| # Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # quantify_test.py |
| |
| '''Runs an app through Quantify and verifies that Quantify was able to |
| successfully instrument and run it. The original purpose was to allow people |
| to run Quantify in a consistent manner without having to worry about broken |
| PATHs, corrupt instrumentation, or other per-machine flakiness that Quantify is |
| sometimes subject to. Unlike purify_test, the output from quantify_test is |
| a binary file, which is much more useful in manual analysis. As such, this |
| tool is not particularly interesting for automated analysis yet. |
| ''' |
| |
| import os |
| import sys |
| |
| # local modules |
| import common |
| |
| class Quantify(common.Rational): |
| def __init__(self): |
| common.Rational.__init__(self) |
| |
| def CreateOptionParser(self): |
| common.Rational.CreateOptionParser(self) |
| self._parser.description = __doc__ |
| |
| def ParseArgv(self): |
| if common.Rational.ParseArgv(self): |
| if not self._out_file: |
| self._out_file = os.path.join(self._cache_dir, |
| "%s.qfy" % (os.path.basename(self._exe))) |
| return True |
| return False |
| |
| def Instrument(self): |
| proc = [common.QUANTIFYE_PATH, "-quantify", |
| '-quantify_home="' + common.PPLUS_PATH + '"' , |
| "/CacheDir=" + self._cache_dir, |
| "-first-search-dir=" + self._exe_dir, self._exe] |
| return common.Rational.Instrument(self, proc) |
| |
| def Execute(self): |
| # TODO(erikkay): add an option to also do /SaveTextData and add an |
| # Analyze method for automated analysis of that data. |
| proc = [common.QUANTIFYW_PATH, "/CacheDir=" + self._cache_dir, |
| "/ShowInstrumentationProgress=no", "/ShowLoadLibraryProgress=no", |
| "/SaveData=" + self._out_file] |
| return common.Rational.Execute(self, proc) |
| |
| if __name__ == "__main__": |
| retcode = -1 |
| rational = Quantify() |
| if rational.Run(): |
| retcode = 0 |
| sys.exit(retcode) |
| |
| |