OLD | NEW |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 | 5 |
| 6 # pylint: disable=W0201 |
| 7 |
| 8 |
6 import copy | 9 import copy |
7 import default_flavor | 10 import default_flavor |
8 | 11 |
9 | 12 |
10 """iOS flavor utils, used for building for and running tests on iOS.""" | 13 """iOS flavor utils, used for building for and running tests on iOS.""" |
11 | 14 |
12 | 15 |
13 class iOSFlavorUtils(default_flavor.DefaultFlavorUtils): | 16 class iOSFlavorUtils(default_flavor.DefaultFlavorUtils): |
14 def __init__(self, skia_api): | 17 def __init__(self, m): |
15 super(iOSFlavorUtils, self).__init__(skia_api) | 18 super(iOSFlavorUtils, self).__init__(m) |
16 self.default_env = {} | 19 self.default_env = {} |
17 self.default_env['XCODEBUILD'] = ( | 20 self.default_env['XCODEBUILD'] = ( |
18 self._skia_api.slave_dir.join('xcodebuild')) | 21 self.m.vars.slave_dir.join('xcodebuild')) |
19 self.ios_bin = self._skia_api.skia_dir.join( | 22 self.ios_bin = self.m.vars.skia_dir.join( |
20 'platform_tools', 'ios', 'bin') | 23 'platform_tools', 'ios', 'bin') |
21 | 24 |
22 def step(self, name, cmd, **kwargs): | 25 def step(self, name, cmd, **kwargs): |
23 args = [self.ios_bin.join('ios_run_skia')] | 26 args = [self.ios_bin.join('ios_run_skia')] |
24 env = {} | 27 env = {} |
25 env.update(kwargs.pop('env', {})) | 28 env.update(kwargs.pop('env', {})) |
26 env.update(self.default_env) | 29 env.update(self.default_env) |
27 # Convert 'dm' and 'nanobench' from positional arguments | 30 # Convert 'dm' and 'nanobench' from positional arguments |
28 # to flags, which is what iOSShell expects to select which | 31 # to flags, which is what iOSShell expects to select which |
29 # one is being run. | 32 # one is being run. |
30 cmd = ["--" + c if c in ['dm', 'nanobench'] else c | 33 cmd = ["--" + c if c in ['dm', 'nanobench'] else c |
31 for c in cmd] | 34 for c in cmd] |
32 return self._skia_api.run(self._skia_api.m.step, name=name, cmd=args + cmd, | 35 return self.m.run(self.m.step, name=name, cmd=args + cmd, |
33 env=env, | 36 env=env, **kwargs) |
34 **kwargs) | |
35 | 37 |
36 def compile(self, target): | 38 def compile(self, target): |
37 """Build the given target.""" | 39 """Build the given target.""" |
38 cmd = [self.ios_bin.join('ios_ninja')] | 40 cmd = [self.ios_bin.join('ios_ninja')] |
39 self._skia_api.run(self._skia_api.m.step, 'build iOSShell', cmd=cmd, | 41 self.m.run(self.m.step, 'build iOSShell', cmd=cmd, |
40 cwd=self._skia_api.m.path['checkout']) | 42 cwd=self.m.path['checkout']) |
41 | 43 |
42 def device_path_join(self, *args): | 44 def device_path_join(self, *args): |
43 """Like os.path.join(), but for paths on a connected iOS device.""" | 45 """Like os.path.join(), but for paths on a connected iOS device.""" |
44 return '/'.join(args) | 46 return '/'.join(args) |
45 | 47 |
46 def device_path_exists(self, path): | 48 def device_path_exists(self, path): |
47 """Like os.path.exists(), but for paths on a connected device.""" | 49 """Like os.path.exists(), but for paths on a connected device.""" |
48 return self._skia_api.run( | 50 return self.m.run( |
49 self._skia_api.m.step, | 51 self.m.step, |
50 'exists %s' % path, | 52 'exists %s' % path, |
51 cmd=[self.ios_bin.join('ios_path_exists'), path], | 53 cmd=[self.ios_bin.join('ios_path_exists'), path], |
52 env=self.default_env, | 54 env=self.default_env, |
53 infra_step=True, | 55 infra_step=True, |
54 ) # pragma: no cover | 56 ) # pragma: no cover |
55 | 57 |
56 def _remove_device_dir(self, path): | 58 def _remove_device_dir(self, path): |
57 """Remove the directory on the device.""" | 59 """Remove the directory on the device.""" |
58 return self._skia_api.run( | 60 return self.m.run( |
59 self._skia_api.m.step, | 61 self.m.step, |
60 'rmdir %s' % path, | 62 'rmdir %s' % path, |
61 cmd=[self.ios_bin.join('ios_rm'), path], | 63 cmd=[self.ios_bin.join('ios_rm'), path], |
62 env=self.default_env, | 64 env=self.default_env, |
63 infra_step=True, | 65 infra_step=True, |
64 ) | 66 ) |
65 | 67 |
66 def _create_device_dir(self, path): | 68 def _create_device_dir(self, path): |
67 """Create the directory on the device.""" | 69 """Create the directory on the device.""" |
68 return self._skia_api.run( | 70 return self.m.run( |
69 self._skia_api.m.step, | 71 self.m.step, |
70 'mkdir %s' % path, | 72 'mkdir %s' % path, |
71 cmd=[self.ios_bin.join('ios_mkdir'), path], | 73 cmd=[self.ios_bin.join('ios_mkdir'), path], |
72 env=self.default_env, | 74 env=self.default_env, |
73 infra_step=True, | 75 infra_step=True, |
74 ) | 76 ) |
75 | 77 |
76 def copy_directory_contents_to_device(self, host_dir, device_dir): | 78 def copy_directory_contents_to_device(self, host_dir, device_dir): |
77 """Like shutil.copytree(), but for copying to a connected device.""" | 79 """Like shutil.copytree(), but for copying to a connected device.""" |
78 return self._skia_api.run( | 80 return self.m.run( |
79 self._skia_api.m.step, | 81 self.m.step, |
80 name='push %s to %s' % (self._skia_api.m.path.basename(host_dir), | 82 name='push %s to %s' % (self.m.path.basename(host_dir), |
81 self._skia_api.m.path.basename(device_dir)), | 83 self.m.path.basename(device_dir)), |
82 cmd=[self.ios_bin.join('ios_push_if_needed'), | 84 cmd=[self.ios_bin.join('ios_push_if_needed'), |
83 host_dir, device_dir], | 85 host_dir, device_dir], |
84 env=self.default_env, | 86 env=self.default_env, |
85 infra_step=True, | 87 infra_step=True, |
86 ) | 88 ) |
87 | 89 |
88 def copy_directory_contents_to_host(self, device_dir, host_dir): | 90 def copy_directory_contents_to_host(self, device_dir, host_dir): |
89 """Like shutil.copytree(), but for copying from a connected device.""" | 91 """Like shutil.copytree(), but for copying from a connected device.""" |
90 self._skia_api.run( | 92 self.m.run( |
91 self._skia_api.m.step, | 93 self.m.step, |
92 name='pull %s' % self._skia_api.m.path.basename(device_dir), | 94 name='pull %s' % self.m.path.basename(device_dir), |
93 cmd=[self.ios_bin.join('ios_pull_if_needed'), | 95 cmd=[self.ios_bin.join('ios_pull_if_needed'), |
94 device_dir, host_dir], | 96 device_dir, host_dir], |
95 env=self.default_env, | 97 env=self.default_env, |
96 infra_step=True, | 98 infra_step=True, |
97 ) | 99 ) |
98 | 100 |
99 def copy_file_to_device(self, host_path, device_path): | 101 def copy_file_to_device(self, host_path, device_path): |
100 """Like shutil.copyfile, but for copying to a connected device.""" | 102 """Like shutil.copyfile, but for copying to a connected device.""" |
101 self._skia_api.run( | 103 self.m.run( |
102 self._skia_api.m.step, | 104 self.m.step, |
103 name='push %s' % host_path, | 105 name='push %s' % host_path, |
104 cmd=[self.ios_bin.join('ios_push_file'), host_path, device_path], | 106 cmd=[self.ios_bin.join('ios_push_file'), host_path, device_path], |
105 env=self.default_env, | 107 env=self.default_env, |
106 infra_step=True, | 108 infra_step=True, |
107 ) # pragma: no cover | 109 ) # pragma: no cover |
108 | 110 |
109 def copy_extra_build_products(self, swarming_out_dir): | 111 def copy_extra_build_products(self, swarming_out_dir): |
110 xcode_dir = self._skia_api.m.path.join( | 112 xcode_dir = self.m.path.join( |
111 'xcodebuild', '%s-iphoneos' % self._skia_api.configuration) | 113 'xcodebuild', '%s-iphoneos' % self.m.vars.configuration) |
112 self._skia_api.copy_build_products( | 114 self.m.run.copy_build_products( |
113 self._skia_api.skia_dir.join(xcode_dir), | 115 self.m.vars.skia_dir.join(xcode_dir), |
114 swarming_out_dir.join(xcode_dir)) | 116 swarming_out_dir.join(xcode_dir)) |
115 | 117 |
116 def create_clean_device_dir(self, path): | 118 def create_clean_device_dir(self, path): |
117 """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" | 119 """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" |
118 self._remove_device_dir(path) | 120 self._remove_device_dir(path) |
119 self._create_device_dir(path) | 121 self._create_device_dir(path) |
120 | 122 |
121 def install(self): | 123 def install(self): |
122 """Run device-specific installation steps.""" | 124 """Run device-specific installation steps.""" |
123 self._skia_api.run( | 125 prefix = self.device_path_join('skiabot', 'skia_') |
124 self._skia_api.m.step, | 126 self.device_dirs = default_flavor.DeviceDirs( |
| 127 dm_dir=prefix + 'dm', |
| 128 perf_data_dir=prefix + 'perf', |
| 129 resource_dir=prefix + 'resources', |
| 130 images_dir=prefix + 'images', |
| 131 skp_dir=prefix + 'skp/skps', |
| 132 tmp_dir=prefix + 'tmp_dir') |
| 133 |
| 134 self.m.run( |
| 135 self.m.step, |
125 name='install iOSShell', | 136 name='install iOSShell', |
126 cmd=[self.ios_bin.join('ios_install')], | 137 cmd=[self.ios_bin.join('ios_install')], |
127 env=self.default_env, | 138 env=self.default_env, |
128 infra_step=True) | 139 infra_step=True) |
129 | 140 |
130 def cleanup_steps(self): | 141 def cleanup_steps(self): |
131 """Run any device-specific cleanup steps.""" | 142 """Run any device-specific cleanup steps.""" |
132 if self._skia_api.do_test_steps or self._skia_api.do_perf_steps: | 143 if self.m.vars.do_test_steps or self.m.vars.do_perf_steps: |
133 self._skia_api.run( | 144 self.m.run( |
134 self._skia_api.m.step, | 145 self.m.step, |
135 name='reboot', | 146 name='reboot', |
136 cmd=[self.ios_bin.join('ios_restart')], | 147 cmd=[self.ios_bin.join('ios_restart')], |
137 env=self.default_env, | 148 env=self.default_env, |
138 infra_step=True) | 149 infra_step=True) |
139 self._skia_api.run( | 150 self.m.run( |
140 self._skia_api.m.step, | 151 self.m.step, |
141 name='wait for reboot', | 152 name='wait for reboot', |
142 cmd=['sleep', '20'], | 153 cmd=['sleep', '20'], |
143 env=self.default_env, | 154 env=self.default_env, |
144 infra_step=True) | 155 infra_step=True) |
145 | 156 |
146 def read_file_on_device(self, path): | 157 def read_file_on_device(self, path): |
147 """Read the given file.""" | 158 """Read the given file.""" |
148 ret = self._skia_api.run( | 159 ret = self.m.run( |
149 self._skia_api.m.step, | 160 self.m.step, |
150 name='read %s' % self._skia_api.m.path.basename(path), | 161 name='read %s' % self.m.path.basename(path), |
151 cmd=[self.ios_bin.join('ios_cat_file'), path], | 162 cmd=[self.ios_bin.join('ios_cat_file'), path], |
152 env=self.default_env, | 163 env=self.default_env, |
153 stdout=self._skia_api.m.raw_io.output(), | 164 stdout=self.m.raw_io.output(), |
154 infra_step=True) | 165 infra_step=True) |
155 return ret.stdout.rstrip() if ret.stdout else ret.stdout | 166 return ret.stdout.rstrip() if ret.stdout else ret.stdout |
156 | 167 |
157 def remove_file_on_device(self, path): | 168 def remove_file_on_device(self, path): |
158 """Remove the file on the device.""" | 169 """Remove the file on the device.""" |
159 return self._skia_api.run( | 170 return self.m.run( |
160 self._skia_api.m.step, | 171 self.m.step, |
161 'rm %s' % path, | 172 'rm %s' % path, |
162 cmd=[self.ios_bin.join('ios_rm'), path], | 173 cmd=[self.ios_bin.join('ios_rm'), path], |
163 env=self.default_env, | 174 env=self.default_env, |
164 infra_step=True, | 175 infra_step=True, |
165 ) | 176 ) |
166 | |
167 def get_device_dirs(self): | |
168 """ Set the directories which will be used by the build steps.""" | |
169 prefix = self.device_path_join('skiabot', 'skia_') | |
170 return default_flavor.DeviceDirs( | |
171 dm_dir=prefix + 'dm', | |
172 perf_data_dir=prefix + 'perf', | |
173 resource_dir=prefix + 'resources', | |
174 images_dir=prefix + 'images', | |
175 skp_dir=prefix + 'skp/skps', | |
176 tmp_dir=prefix + 'tmp_dir') | |
OLD | NEW |