Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1017)

Unified Diff: build/win/merge_pgc_files.py

Issue 2680683002: Revert of Add a script to merge the PGC files (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/win/merge_pgc_files.py
diff --git a/build/win/merge_pgc_files.py b/build/win/merge_pgc_files.py
deleted file mode 100755
index 926a6da52e69eb4c7d9b85686668614fe3f5f205..0000000000000000000000000000000000000000
--- a/build/win/merge_pgc_files.py
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 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.
-
-"""Merge the PGC files generated during the profiling step to the PGD database.
-
-This is required to workaround a flakyness in pgomgr.exe where it can run out
-of address space while trying to merge all the PGC files at the same time.
-"""
-
-import glob
-import json
-import optparse
-import os
-import subprocess
-import sys
-
-
-def find_pgomgr(chrome_checkout_dir, target_cpu):
- """Find pgomgr.exe."""
- if target_cpu not in ('x86', 'x64'):
- raise Exception('target_cpu should be x86 or x64.')
-
- win_toolchain_json_file = os.path.join(chrome_checkout_dir, 'build',
- 'win_toolchain.json')
- if not os.path.exists(win_toolchain_json_file):
- raise Exception('The toolchain JSON file is missing.')
- with open(win_toolchain_json_file) as temp_f:
- toolchain_data = json.load(temp_f)
- if not os.path.isdir(toolchain_data['path']):
- raise Exception('The toolchain JSON file is invalid.')
-
- pgomgr_dir = os.path.join(toolchain_data['path'], 'VC', 'bin')
- if target_cpu == 'x64':
- pgomgr_dir = os.path.join(pgomgr_dir, 'amd64')
-
- pgomgr_path = os.path.join(pgomgr_dir, 'pgomgr.exe')
- if not os.path.exists(pgomgr_path):
- raise Exception('pgomgr.exe is missing from %s.' % pgomgr_dir)
-
- return pgomgr_path
-
-
-def main():
- parser = optparse.OptionParser(usage='%prog [options]')
- parser.add_option('--checkout-dir', help='The Chrome checkout directory.')
- parser.add_option('--target-cpu', help='The target\'s bitness.')
- parser.add_option('--build-dir', help='Chrome build directory.')
- parser.add_option('--binary-name', help='The binary for which the PGC files '
- 'should be merged, without extension.')
- options, _ = parser.parse_args()
-
- if not options.checkout_dir:
- parser.error('--checkout-dir is required')
- if not options.target_cpu:
- parser.error('--target-cpu is required')
- if not options.build_dir:
- parser.error('--build-dir is required')
- if not options.binary_name:
- parser.error('--binary-name is required')
-
- # Starts by finding pgomgr.exe.
- pgomgr_path = find_pgomgr(options.checkout_dir, options.target_cpu)
-
- pgc_files = glob.glob(os.path.join(options.build_dir,
- '%s*.pgc' % options.binary_name))
-
- # Number of PGC files that should be merged in each iterations, merging all
- # the files one by one is really slow but merging more to 10 at a time doesn't
- # really seem to impact the total time.
- #
- # Number of pgc merged per iteration | Time (in min)
- # 1 | 27.2
- # 10 | 12.8
- # 20 | 12.0
- # 30 | 11.5
- # 40 | 11.4
- # 50 | 11.5
- # 60 | 11.6
- # 70 | 11.6
- # 80 | 11.7
- #
- # TODO(sebmarchand): Measure the memory usage of pgomgr.exe to see how it get
- # affected by the number of pgc files.
- pgc_per_iter = 20
-
- def _split_in_chunks(items, chunk_size):
- """Split |items| in chunks of size |chunk_size|.
-
- Source: http://stackoverflow.com/a/312464
- """
- for i in xrange(0, len(items), chunk_size):
- yield items[i:i + chunk_size]
-
- for chunk in _split_in_chunks(pgc_files, pgc_per_iter):
- merge_command = [
- pgomgr_path,
- '/merge'
- ]
- for pgc_file in chunk:
- merge_command.append([
- os.path.join(options.build_dir, pgc_file)
- ])
-
- merge_command.append([
- os.path.join(options.build_dir, '%s.pgd' % options.binary_name)
- ])
- proc = subprocess.Popen(merge_command, stdout=subprocess.PIPE)
- stdout, _ = proc.communicate()
- if proc.returncode != 0:
- raise Exception('Error while trying to merge the PGC files:\n%s' % stdout)
-
-
-if __name__ == '__main__':
- sys.exit(main())
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698