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

Side by Side Diff: infra/bots/flavor/coverage_flavor.py

Issue 1827413002: Fixes for Swarming recipes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Reinstate tmp_dir Created 4 years, 8 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 unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 #
3 # Copyright 2016 Google Inc.
4 #
5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file.
7
8
9 import default_flavor
10 import os
11 import subprocess
12 import time
13
14
15 """Utils for running coverage tests."""
16
17
18 class CoverageFlavorUtils(default_flavor.DefaultFlavorUtils):
19 def compile(self, target):
20 """Build the given target."""
21 cmd = [os.path.join(self._bot_info.skia_dir, 'tools',
22 'llvm_coverage_build'),
23 target]
24 self._bot_info.run(cmd)
25
26 def step(self, cmd, **kwargs):
27 """Run the given step through coverage."""
28 # Slice out the 'key' and 'properties' arguments to be reused.
29 key = []
30 properties = []
31 current = None
32 for i in xrange(0, len(cmd)):
33 if isinstance(cmd[i], basestring) and cmd[i] == '--key':
34 current = key
35 elif isinstance(cmd[i], basestring) and cmd[i] == '--properties':
36 current = properties
37 elif isinstance(cmd[i], basestring) and cmd[i].startswith('--'):
38 current = None
39 if current is not None:
40 current.append(cmd[i])
41
42 results_dir = self._bot_info.out_dir.join('coverage_results')
43 self.create_clean_host_dir(results_dir)
44
45 # Run DM under coverage.
46 report_file_basename = '%s.cov' % self._bot_info.got_revision
47 report_file = os.path.join(results_dir, report_file_basename)
48 args = [
49 'python',
50 os.path.join(self._bot_info.skia_dir, 'tools', 'llvm_coverage_run.py'),
51 ] + cmd + ['--outResultsFile', report_file]
52 self._bot_info.run(args, **kwargs)
53
54 # Generate nanobench-style JSON output from the coverage report.
55 git_timestamp = subprocess.check_output(['git', 'log', '-n1',
56 self._bot_info.got_revision, '--format=%%ci']).rstrip()
57 nanobench_json = results_dir.join('nanobench_%s_%s.json' % (
58 self._bot_info.got_revision, git_timestamp))
59 line_by_line_basename = ('coverage_by_line_%s_%s.json' % (
60 self._bot_info.got_revision, git_timestamp))
61 line_by_line = results_dir.join(line_by_line_basename)
62 args = [
63 'python',
64 os.path.join(self._bot_info.skia_dir, 'tools',
65 'parse_llvm_coverage.py'),
66 '--report', report_file, '--nanobench', nanobench_json,
67 '--linebyline', line_by_line]
68 args.extend(key)
69 args.extend(properties)
70 self._bot_info.run(args)
71
72 # Upload raw coverage data.
73 now = time.utcnow()
74 gs_json_path = '/'.join((
75 str(now.year).zfill(4), str(now.month).zfill(2),
76 str(now.day).zfill(2), str(now.hour).zfill(2),
77 self._bot_info.name,
78 str(self._bot_info.build_number)))
79 if self._bot_info.is_trybot:
80 gs_json_path = '/'.join(('trybot', gs_json_path,
81 str(self._bot_info.issue)))
82
83 self._bot_info.gsutil_upload(
84 'upload raw coverage data',
85 source=report_file,
86 bucket='skia-infra',
87 dest='/'.join(('coverage-raw-v1', gs_json_path, report_file_basename)))
88
89 # Upload nanobench JSON data.
90 gsutil_path = self._bot_info.m.path['depot_tools'].join(
91 'third_party', 'gsutil', 'gsutil')
92 upload_args = [self._bot_info.name,
93 self._bot_info.m.properties['buildnumber'],
94 results_dir,
95 self._bot_info.got_revision, gsutil_path]
96 if self._bot_info.is_trybot:
97 upload_args.append(self._bot_info.m.properties['issue'])
98 self._bot_info.run(
99 self._bot_info.m.python,
100 'upload nanobench coverage results',
101 script=self._bot_info.resource('upload_bench_results.py'),
102 args=upload_args,
103 cwd=self._bot_info.m.path['checkout'],
104 abort_on_failure=False,
105 infra_step=True)
106
107 # Upload line-by-line coverage data.
108 self._bot_info.gsutil_upload(
109 'upload line-by-line coverage data',
110 source=line_by_line,
111 bucket='skia-infra',
112 dest='/'.join(('coverage-json-v1', gs_json_path,
113 line_by_line_basename)))
114
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698