def process_project(project_name, project): start_time = time.time() project = common.read_conf_if_needed(project) project_dir, sln_file = common.prepare_project(project_name, project) project_to_check = project.get("project to check") msbuild_props = project.get("msbuild properties") inspect_code_args, report_file = common.inspect_code_run_arguments( project_dir, sln_file, project_to_check, msbuild_props) inspect_code_args.append("-j=1") # reduce nondetermenism #inspect_code_args.append("--debug") snapshot_dir = path.join(snapshots_home, project_name) makedirs(snapshot_dir, exist_ok=True) snapshot_path = path.join(snapshot_dir, "snapshot.dtt") profiler_args = [ console_profiler, "start", "--profiling-type=Timeline", "--disable-tpl", "--overwrite", "--save-to=" + snapshot_path, common.inspect_code_path, "--" ] + inspect_code_args #print(subprocess.list2cmdline(profiler_args)) process = subprocess.Popen(profiler_args, stdout=PIPE, text=True) out, err = process.communicate() exit_code = process.wait() if exit_code != 0: print("Error: exit code = " + str(exit_code)) if err: print("Error:") print(err) expected_files_count = project["inspected files count"] actual_files_count = common.inspected_files_count(out) if expected_files_count != actual_files_count: print(out) print("expected count of inspected files is {0}, but actual is {1}". format(expected_files_count, actual_files_count)) return None subprocess.run([snapshot_dumper, "-i", snapshot_path, "-A"], check=True, stdout=PIPE) with open(path.join(snapshot_dir, "snapshot.dtt.alloc.stats.txt")) as f: actual_traffic = int(f.read()) // (1 << 20) expected_traffic = project.get("mem traffic") if expected_traffic: relative_delta = (actual_traffic - expected_traffic) / expected_traffic * 100 if abs(relative_delta) < (3.0 if expected_traffic < 1000 else 0.5): shutil.rmtree(snapshot_dir) print( "expected traffic is {0} MB, actual traffic is {1} MB; delta = {2:.2f}%" .format(expected_traffic, actual_traffic, relative_delta), flush=True) else: print("traffic is {0} MB".format(actual_traffic), flush=True) elapsed_time = common.duration(start_time, time.time()) print("elapsed time: {0}".format(elapsed_time), flush=True)
def test_duration(): assert duration(60) == '60.0 sec(s)' assert duration(300) == '5.0 min(s)' assert duration(3600) == '60.0 min(s)' assert duration(3601) == '1.0 hour(s)' assert duration(86400) == '24.0 hour(s)' assert duration(86401) == '1.0 day(s)'
def run_inspect_code(project_dir, sln_file, project_to_check, msbuild_props): args, report_file = common.inspect_code_run_arguments( project_dir, sln_file, project_to_check, msbuild_props) args.insert(0, common.inspect_code_path) print(subprocess.list2cmdline(args)) process = Popen(args, stdout=PIPE, text=True) start = time.time() out, err = process.communicate() exit_code = process.wait() end = time.time() if exit_code != 0: print("Error: exit code = " + str(exit_code)) if err: print("Error:") print(err) print("Elapsed time: " + common.duration(start, end)) return report_file, out
def run_inspect_code(project_dir, sln_file, project_to_check, msbuild_props, indexing): args, report_file = common.inspect_code_run_arguments( project_dir, sln_file, project_to_check, msbuild_props) args.insert(0, common.inspect_code_path) if indexing: args.append('--exclude="**"') #print(subprocess.list2cmdline(args)) assert (invoke(args) == (1 if indexing else 0)) result = [] for attempt in range(10): print("attempt {0}".format(attempt)) if indexing: shutil.rmtree(common.caches_home) start = time.time() assert (invoke(args) == (1 if indexing else 0)) end = time.time() print("Elapsed time: " + common.duration(start, end)) result.append(end - start) return result
expected_traffic = project.get("mem traffic") if expected_traffic: relative_delta = (actual_traffic - expected_traffic) / expected_traffic * 100 if abs(relative_delta) < (3.0 if expected_traffic < 1000 else 0.5): shutil.rmtree(snapshot_dir) print( "expected traffic is {0} MB, actual traffic is {1} MB; delta = {2:.2f}%" .format(expected_traffic, actual_traffic, relative_delta), flush=True) else: print("traffic is {0} MB".format(actual_traffic), flush=True) elapsed_time = common.duration(start_time, time.time()) print("elapsed time: {0}".format(elapsed_time), flush=True) args = common.argparser.parse_args() if args.project: process_project(args.project, common.projects[args.project]) else: start_time = time.time() for project_name, project in common.projects.items(): print("processing project {0}...".format(project_name), flush=True) process_project(project_name, project) print('-------------------------------------------------------', flush=True) print("Total time: " + common.duration(start_time, time.time()))