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

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

Issue 1703663002: Port Skia recipe to normal Python scripts, move to Skia repo (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments Created 4 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 unified diff | Download patch
« no previous file with comments | « infra/bots/flavor/coverage_flavor.py ('k') | infra/bots/flavor/ios_flavor.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 """Default flavor utils class, used for desktop bots."""
10
11
12 import os
13 import shutil
14 import sys
15
16
17 class DeviceDirs(object):
18 def __init__(self,
19 dm_dir,
20 perf_data_dir,
21 resource_dir,
22 images_dir,
23 skp_dir,
24 tmp_dir):
25 self._dm_dir = dm_dir
26 self._perf_data_dir = perf_data_dir
27 self._resource_dir = resource_dir
28 self._images_dir = images_dir
29 self._skp_dir = skp_dir
30 self._tmp_dir = tmp_dir
31
32 @property
33 def dm_dir(self):
34 """Where DM writes."""
35 return self._dm_dir
36
37 @property
38 def perf_data_dir(self):
39 return self._perf_data_dir
40
41 @property
42 def resource_dir(self):
43 return self._resource_dir
44
45 @property
46 def images_dir(self):
47 return self._images_dir
48
49 @property
50 def skp_dir(self):
51 return self._skp_dir
52
53 @property
54 def tmp_dir(self):
55 return self._tmp_dir
56
57
58 class DefaultFlavorUtils(object):
59 """Utilities to be used by build steps.
60
61 The methods in this class define how certain high-level functions should
62 work. Each build step flavor should correspond to a subclass of
63 DefaultFlavorUtils which may override any of these functions as appropriate
64 for that flavor.
65
66 For example, the AndroidFlavorUtils will override the functions for
67 copying files between the host and Android device, as well as the
68 'step' function, so that commands may be run through ADB.
69 """
70 def __init__(self, bot_info, *args, **kwargs):
71 self._bot_info = bot_info
72 self.chrome_path = os.path.join(os.path.expanduser('~'), 'src')
73
74 def step(self, cmd, **kwargs):
75 """Runs a step as appropriate for this flavor."""
76 path_to_app = self._bot_info.out_dir.join(
77 self._bot_info.configuration, cmd[0])
78 if (sys.platform == 'linux' and
79 'x86_64' in self._bot_info.bot_name and
80 not 'TSAN' in self._bot_info.bot_name):
81 new_cmd = ['catchsegv', path_to_app]
82 else:
83 new_cmd = [path_to_app]
84 new_cmd.extend(cmd[1:])
85 return self._bot_info.run(new_cmd, **kwargs)
86
87
88 def compile(self, target):
89 """Build the given target."""
90 # The CHROME_PATH environment variable is needed for bots that use
91 # toolchains downloaded by Chrome.
92 env = {'CHROME_PATH': self.chrome_path}
93 if sys.platform == 'win32':
94 make_cmd = ['python', 'make.py']
95 else:
96 make_cmd = ['make']
97 cmd = make_cmd + [target]
98 self._bot_info.run(cmd, env=env)
99
100 def device_path_join(self, *args):
101 """Like os.path.join(), but for paths on a connected device."""
102 return os.path.join(*args)
103
104 def device_path_exists(self, path):
105 """Like os.path.exists(), but for paths on a connected device."""
106 return os.path.exists(path, infra_step=True) # pragma: no cover
107
108 def copy_directory_contents_to_device(self, host_dir, device_dir):
109 """Like shutil.copytree(), but for copying to a connected device."""
110 # For "normal" bots who don't have an attached device, we expect
111 # host_dir and device_dir to be the same.
112 if str(host_dir) != str(device_dir):
113 raise ValueError('For bots who do not have attached devices, copying '
114 'from host to device is undefined and only allowed if '
115 'host_path and device_path are the same (%s vs %s).' % (
116 str(host_dir), str(device_dir))) # pragma: no cover
117
118 def copy_directory_contents_to_host(self, device_dir, host_dir):
119 """Like shutil.copytree(), but for copying from a connected device."""
120 # For "normal" bots who don't have an attached device, we expect
121 # host_dir and device_dir to be the same.
122 if str(host_dir) != str(device_dir):
123 raise ValueError('For bots who do not have attached devices, copying '
124 'from device to host is undefined and only allowed if '
125 'host_path and device_path are the same (%s vs %s).' % (
126 str(host_dir), str(device_dir))) # pragma: no cover
127
128 def copy_file_to_device(self, host_path, device_path):
129 """Like shutil.copyfile, but for copying to a connected device."""
130 # For "normal" bots who don't have an attached device, we expect
131 # host_dir and device_dir to be the same.
132 if str(host_path) != str(device_path): # pragma: no cover
133 raise ValueError('For bots who do not have attached devices, copying '
134 'from host to device is undefined and only allowed if '
135 'host_path and device_path are the same (%s vs %s).' % (
136 str(host_path), str(device_path)))
137
138 def create_clean_device_dir(self, path):
139 """Like shutil.rmtree() + os.makedirs(), but on a connected device."""
140 self.create_clean_host_dir(path)
141
142 def create_clean_host_dir(self, path):
143 """Convenience function for creating a clean directory."""
144 shutil.rmtree(path)
145 os.makedirs(path)
146
147 def install(self):
148 """Run device-specific installation steps."""
149 pass
150
151 def cleanup_steps(self):
152 """Run any device-specific cleanup steps."""
153 pass
154
155 def get_device_dirs(self):
156 """ Set the directories which will be used by the build steps.
157
158 These refer to paths on the same device where the test executables will
159 run, for example, for Android bots these are paths on the Android device
160 itself. For desktop bots, these are just local paths.
161 """
162 join = lambda p: os.path.join(self._bot_info.build_dir, p)
163 return DeviceDirs(
164 dm_dir=join('dm'),
165 perf_data_dir=self._bot_info.perf_data_dir,
166 resource_dir=self._bot_info.resource_dir,
167 images_dir=join('images'),
168 skp_dir=self._bot_info.local_skp_dir,
169 tmp_dir=join('tmp'))
170
171 def __repr__(self):
172 return '<%s object>' % self.__class__.__name__ # pragma: no cover
OLDNEW
« no previous file with comments | « infra/bots/flavor/coverage_flavor.py ('k') | infra/bots/flavor/ios_flavor.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698