Index: test/win/linker-flags/update_pgd.py |
=================================================================== |
--- test/win/linker-flags/update_pgd.py (revision 0) |
+++ test/win/linker-flags/update_pgd.py (revision 0) |
@@ -0,0 +1,35 @@ |
+#!/usr/bin/env python |
+ |
+# Copyright (c) 2013 Google Inc. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+from optparse import OptionParser |
+import glob |
+import os |
+import subprocess |
+ |
+parser = OptionParser() |
+parser.add_option('--exe', dest='exe') |
+parser.add_option('--vcbindir', dest='vcbindir') |
+parser.add_option('--pgd', dest='pgd') |
+(options, args) = parser.parse_args() |
+ |
+# Instrumented binaries fail to run unless the Visual C++'s bin dir is included |
+# in the PATH environment variable. |
+os.environ['PATH'] = os.environ['PATH'] + os.pathsep + options.vcbindir |
+ |
+# Run Instrumented binary. The profile will be recorded into *.pgc file. |
+subprocess.call([options.exe]) |
+ |
+# Merge *.pgc files into a *.pgd (Profile-Guided Database) file. |
+subprocess.call(['pgomgr', '/merge', options.pgd]) |
+ |
+# *.pgc files are no longer necessary. Clear all of them. |
+pgd_file = os.path.abspath(options.pgd) |
+pgd_dir = os.path.dirname(pgd_file) |
+(pgd_basename, _) = os.path.splitext(os.path.basename(pgd_file)) |
+pgc_filepattern = os.path.join(pgd_dir, '%s!*.pgc' % pgd_basename) |
+pgc_files= glob.glob(pgc_filepattern) |
+for pgc_file in pgc_files: |
+ os.unlink(pgc_file) |