OLD | NEW |
| (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 | |
13 | |
14 """iOS flavor utils, used for building for and running tests on iOS.""" | |
15 | |
16 | |
17 class iOSFlavorUtils(default_flavor.DefaultFlavorUtils): | |
18 def __init__(self, bot_info): | |
19 super(iOSFlavorUtils, self).__init__(bot_info) | |
20 self.ios_bin = os.path.join(self._bot_info.skia_dir, 'platform_tools', | |
21 'ios', 'bin') | |
22 | |
23 def step(self, cmd, **kwargs): | |
24 args = [os.path.join(self.ios_bin, 'ios_run_skia')] | |
25 | |
26 # Convert 'dm' and 'nanobench' from positional arguments | |
27 # to flags, which is what iOSShell expects to select which | |
28 # one is being run. | |
29 cmd = ["--" + c if c in ['dm', 'nanobench'] else c | |
30 for c in cmd] | |
31 return self._bot_info.run(args + cmd, **kwargs) | |
32 | |
33 def compile(self, target): | |
34 """Build the given target.""" | |
35 cmd = [os.path.join(self.ios_bin, 'ios_ninja')] | |
36 self._bot_info.run(cmd) | |
37 | |
38 def device_path_join(self, *args): | |
39 """Like os.path.join(), but for paths on a connected iOS device.""" | |
40 return '/'.join(args) | |
41 | |
42 def device_path_exists(self, path): | |
43 """Like os.path.exists(), but for paths on a connected device.""" | |
44 return self._bot_info.run( | |
45 [os.path.join(self.ios_bin, 'ios_path_exists'), path], | |
46 ) # pragma: no cover | |
47 | |
48 def _remove_device_dir(self, path): | |
49 """Remove the directory on the device.""" | |
50 return self._bot_info.run( | |
51 [os.path.join(self.ios_bin, 'ios_rm'), path], | |
52 ) | |
53 | |
54 def _create_device_dir(self, path): | |
55 """Create the directory on the device.""" | |
56 return self._bot_info.run( | |
57 [os.path.join(self.ios_bin, 'ios_mkdir'), path], | |
58 ) | |
59 | |
60 def copy_directory_contents_to_device(self, host_dir, device_dir): | |
61 """Like shutil.copytree(), but for copying to a connected device.""" | |
62 return self._bot_info.run([ | |
63 os.path.join(self.ios_bin, 'ios_push_if_needed'), | |
64 host_dir, device_dir | |
65 ]) | |
66 | |
67 def copy_directory_contents_to_host(self, device_dir, host_dir): | |
68 """Like shutil.copytree(), but for copying from a connected device.""" | |
69 return self._bot_info.run( | |
70 [os.path.join(self.ios_bin, 'ios_pull_if_needed'), | |
71 device_dir, host_dir], | |
72 ) | |
73 | |
74 def copy_file_to_device(self, host_path, device_path): | |
75 """Like shutil.copyfile, but for copying to a connected device.""" | |
76 self._bot_info.run( | |
77 [os.path.join(self.ios_bin, 'ios_push_file'), host_path, device_path], | |
78 ) # pragma: no cover | |
79 | |
80 def create_clean_device_dir(self, path): | |
81 """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" | |
82 self._remove_device_dir(path) | |
83 self._create_device_dir(path) | |
84 | |
85 def install(self): | |
86 """Run device-specific installation steps.""" | |
87 self._bot_info.run([os.path.join(self.ios_bin, 'ios_install')]) | |
88 | |
89 def cleanup_steps(self): | |
90 """Run any device-specific cleanup steps.""" | |
91 self._bot_info.run([os.path.join(self.ios_bin, 'ios_restart')]) | |
92 self._bot_info.run(['sleep', '20']) | |
93 | |
94 def read_file_on_device(self, path): | |
95 """Read the given file.""" | |
96 return subprocess.check_output( | |
97 [os.path.join(self.ios_bin, 'ios_cat_file'), path]).rstrip() | |
98 | |
99 def remove_file_on_device(self, path): | |
100 """Remove the file on the device.""" | |
101 return self._bot_info.run( | |
102 [os.path.join(self.ios_bin, 'ios_rm'), path], | |
103 ) | |
104 | |
105 def get_device_dirs(self): | |
106 """ Set the directories which will be used by the build steps.""" | |
107 prefix = self.device_path_join('skiabot', 'skia_') | |
108 return default_flavor.DeviceDirs( | |
109 dm_dir=prefix + 'dm', | |
110 perf_data_dir=prefix + 'perf', | |
111 resource_dir=prefix + 'resources', | |
112 images_dir=prefix + 'images', | |
113 skp_dir=prefix + 'skp/skps', | |
114 tmp_dir=prefix + 'tmp_dir') | |
OLD | NEW |