⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 benchmark.py

📁 distcc编译器的源代码.好像是readhat公司开发的.
💻 PY
字号:
#! /usr/bin/python# distcc/benchmark -- automated system for testing distcc correctness# and performance on various source trees.# Copyright (C) 2002, 2003, 2004 by Martin Pool# This program is free software; you can redistribute it and/or# modify it under the terms of the GNU General Public License as# published by the Free Software Foundation; either version 2 of the# License, or (at your option) any later version.# This program is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU# General Public License for more details. # You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307# USA# Unlike the main distcc test suite, this program *does* require you# to manually set up servers on your choice of machines on the# network, and make sure that they all have appropriate compilers# installed.  The performance measurements obviously depend on the# network and hardware available.# It also depends on you having the necessary dependencies to build# the software.  If you regularly build software on Linux you should# be OK.  Some things (the GIMP) will be harder than others.# On some platforms, it may be impossible to build some targets -- for# example, Linux depends on having a real-mode x86 assembler, which# probably isn't installed on Solaris.# Note that running this program will potentially download many# megabytes of test data.# TODO: Support applying patches after unpacking, before building.# For example, they might be needed to fix -j bugs in the Makefile.# TODO: In stats, show ratio of build time to slowest build time.  (Or# to first one run?)# TODO: Allow choice of which compiler and make options to use.# TODO: Try building something large in C++.# TODO: Set CXX as well.# TODO: Add option to run tests repeatedly and show mean and std. dev.# TODO: Perhaps add option to do "make clean" -- this might be faster# than unzipping and configuring every time.  But perhaps also less# reproducible.# TODO: Add option to run tests on different sets or orderings of# machines.import re, os, sys, timefrom getopt import getoptfrom Summary import Summaryfrom Project import Project, treesfrom compiler import CompilerSpecfrom Build import Buildimport actions, compilerimport ProjectDefs         # this adds a lot of definitions to 'trees'def error(msg):    sys.stderr.write(msg + "\n")def list_projects():    names = trees.keys()    names.sort()    for n in names:        print n        def find_project(name):    """    Return the nearest unique match for name.    """    best_match = None    for pn in trees.keys():        if pn.startswith(name):            if best_match:                raise ValueError, "ambiguous prefix %s" % name            else:                best_match = pn                    if not best_match:        raise ValueError, "nothing matches %s" % name    else:        return trees[best_match]def show_help():    print """Usage: benchmark.py [OPTION]... [PROJECT]...Test distcc relative performance building different projects.By default, all known projects are built.Options:  --help                     show brief help message  --list-projects            show defined projects  -c, --compiler=COMPILER    specify one compiler to use  -n N                       repeat compilation N times  -a, --actions=ACTIONS      comma-separated list of action phases                             to performCompilers can be specified as either "local,N" to run N copies of gcc,or dist,N to run N copies of distcc.  Multiple -c options specifydifferent scenarios to measure.  The default is to run a nonparallellocal compile and a parallel distributed compile."""actions.action_help()# -a is for developer use only and not documented; unless you're# careful the results will just be confusing.            ######################################################################def main():    """Run the benchmark per arguments"""    sum = Summary()    options, args = getopt(sys.argv[1:], 'a:c:n:',                           ['list-projects', 'actions=', 'help', 'compiler='])    opt_actions = actions.default_actions    set_compilers = []    opt_repeats = 1    for opt, optarg in options:        if opt == '--help':            show_help()            return        elif opt == '--list-projects':            list_projects()            return        elif opt == '--actions' or opt == '-a':            opt_actions = actions.parse_opt_actions(optarg)        elif opt == '--compiler' or opt == '-c':            set_compilers.append(compiler.parse_opt(optarg))        elif opt == '-n':            opt_repeats = int(optarg)    if not set_compilers:        set_compilers = compiler.default_compilers()    # Find named projects, or run all by default    if args:        chosen_projects = [find_project(name) for name in args]    else:        chosen_projects = trees.values()    for proj in chosen_projects:        proj.pre_actions(opt_actions)        for comp in set_compilers:            build = Build(proj, comp, opt_repeats)            build.build_actions(opt_actions, sum)    sum.print_table()if __name__ == '__main__':    main()    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -