From e55c5c06e2f6cd1d258d4d73e9a3a401a4ee750c Mon Sep 17 00:00:00 2001 From: machenbach Date: Thu, 25 Feb 2016 01:19:32 -0800 Subject: [PATCH] [coverage] Filter some files from instrumentation. This filters test and third_party files to get a speed-up when running tests and when collecting profile data. BUG=chromium:568949 LOG=n Committed: https://crrev.com/761ee31be5ab4fde05c294e5d632608fbaea8ad4 Cr-Commit-Position: refs/heads/master@{#34216} Committed: https://crrev.com/906db7448702a6ac9fab2a445c57cc85f6dd1b1a Cr-Commit-Position: refs/heads/master@{#34253} Committed: https://crrev.com/fe38ad573ee737e06a74b7fcd73f557ac0f1135a Cr-Commit-Position: refs/heads/master@{#34272} Review URL: https://codereview.chromium.org/1730543002 Cr-Commit-Position: refs/heads/master@{#34276} --- build/coverage_wrapper.py | 28 ++++++++++++++++++++++++++++ build/standalone.gypi | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 5 deletions(-) create mode 100755 build/coverage_wrapper.py diff --git a/build/coverage_wrapper.py b/build/coverage_wrapper.py new file mode 100755 index 0000000000..c1db754c94 --- /dev/null +++ b/build/coverage_wrapper.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# Copyright 2016 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# CC/CXX wrapper script that excludes certain file patterns from coverage +# instrumentation. + +import re +import subprocess +import sys + +exclusions = [ + 'src/third_party', + 'third_party', + 'test', + 'testing', +] + +args = sys.argv[1:] +text = ' '.join(sys.argv[2:]) +for exclusion in exclusions: + if re.search(r'\-o obj/%s[^ ]*\.o' % exclusion, text): + args.remove('-fprofile-arcs') + args.remove('-ftest-coverage') + break + +sys.exit(subprocess.check_call(args)) diff --git a/build/standalone.gypi b/build/standalone.gypi index 5269b95f64..e4d1b4bd58 100644 --- a/build/standalone.gypi +++ b/build/standalone.gypi @@ -1262,11 +1262,36 @@ # make generator doesn't support CC_wrapper without CC # in make_global_settings yet. ['use_goma==1 and ("<(GENERATOR)"=="ninja" or clang==1)', { - 'make_global_settings': [ - ['CC_wrapper', '<(gomadir)/gomacc'], - ['CXX_wrapper', '<(gomadir)/gomacc'], - ['CC.host_wrapper', '<(gomadir)/gomacc'], - ['CXX.host_wrapper', '<(gomadir)/gomacc'], + 'conditions': [ + ['coverage==1', { + # Wrap goma with coverage wrapper. + 'make_global_settings': [ + ['CC_wrapper', '<(base_dir)/build/coverage_wrapper.py <(gomadir)/gomacc'], + ['CXX_wrapper', '<(base_dir)/build/coverage_wrapper.py <(gomadir)/gomacc'], + ['CC.host_wrapper', '<(base_dir)/build/coverage_wrapper.py <(gomadir)/gomacc'], + ['CXX.host_wrapper', '<(base_dir)/build/coverage_wrapper.py <(gomadir)/gomacc'], + ], + }, { + # Use only goma wrapper. + 'make_global_settings': [ + ['CC_wrapper', '<(gomadir)/gomacc'], + ['CXX_wrapper', '<(gomadir)/gomacc'], + ['CC.host_wrapper', '<(gomadir)/gomacc'], + ['CXX.host_wrapper', '<(gomadir)/gomacc'], + ], + }], + ], + }, { + 'conditions': [ + ['coverage==1', { + # Use only coverage wrapper. + 'make_global_settings': [ + ['CC_wrapper', '<(base_dir)/build/coverage_wrapper.py'], + ['CXX_wrapper', '<(base_dir)/build/coverage_wrapper.py'], + ['CC.host_wrapper', '<(base_dir)/build/coverage_wrapper.py'], + ['CXX.host_wrapper', '<(base_dir)/build/coverage_wrapper.py'], + ], + }], ], }], ['use_lto==1', {