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

Side by Side Diff: scripts/slave/recipes/skia/skia.expected/Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Debug.json

Issue 1128823007: Skia recipes: Move Android and ChromeOS config info in from slaves.cfg (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Created 5 years, 7 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 [
2 {
3 "cmd": [
4 "git",
5 "fetch"
6 ],
7 "cwd": "[SLAVE_BUILD]/skia",
8 "name": "git fetch"
9 },
10 {
11 "cmd": [
12 "git",
13 "reset",
14 "--hard",
15 "abc123"
16 ],
17 "cwd": "[SLAVE_BUILD]/skia",
18 "name": "git reset"
19 },
20 {
21 "cmd": [
22 "git",
23 "clean",
24 "-d",
25 "-f"
26 ],
27 "cwd": "[SLAVE_BUILD]/skia",
28 "name": "git clean"
29 },
30 {
31 "cmd": [
32 "python",
33 "-u",
34 "[DEPOT_TOOLS]/gclient.py",
35 "config",
36 "--spec",
37 "cache_dir = None\nsolutions = [{'deps_file': 'DEPS', 'managed': True, 'na me': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['an droid']"
38 ],
39 "cwd": "[SLAVE_BUILD]",
40 "name": "gclient setup"
41 },
42 {
43 "cmd": [
44 "python",
45 "-u",
46 "[DEPOT_TOOLS]/gclient.py",
47 "sync",
48 "--nohooks",
49 "--force",
50 "--verbose",
51 "--delete_unversioned_trees",
52 "--revision",
53 "skia@abc123",
54 "--output-json",
55 "/path/to/tmp/json"
56 ],
57 "cwd": "[SLAVE_BUILD]",
58 "name": "gclient sync",
59 "~followup_annotations": [
60 "@@@STEP_LOG_LINE@json.output@{@@@",
61 "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@",
62 "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@",
63 "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@",
64 "@@@STEP_LOG_LINE@json.output@ }@@@",
65 "@@@STEP_LOG_LINE@json.output@ }@@@",
66 "@@@STEP_LOG_LINE@json.output@}@@@",
67 "@@@STEP_LOG_END@json.output@@@",
68 "@@@SET_BUILD_PROPERTY@got_revision@164710@@@"
69 ]
70 },
71 {
72 "cmd": [
73 "which",
74 "ccache"
75 ],
76 "cwd": "[SLAVE_BUILD]",
77 "name": "has ccache?",
78 "stdout": "/path/to/tmp/",
79 "~followup_annotations": [
80 "step returned non-zero exit code: 1",
81 "@@@STEP_FAILURE@@@"
82 ]
83 },
84 {
85 "cmd": [
86 "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_ninja",
87 "dm",
88 "-d",
89 "arm_v7_neon"
90 ],
91 "cwd": "[SLAVE_BUILD]/skia",
92 "env": {
93 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
94 "BUILDTYPE": "Debug",
95 "GYP_DEFINES": "skia_arch_type=arm skia_arch_width=32 skia_warnings_as_err ors=0",
96 "SKIA_ANDROID_VERBOSE_SETUP": "1"
97 },
98 "name": "build dm"
99 },
100 {
101 "cmd": [
102 "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_ninja",
103 "nanobench",
104 "-d",
105 "arm_v7_neon"
106 ],
107 "cwd": "[SLAVE_BUILD]/skia",
108 "env": {
109 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
110 "BUILDTYPE": "Debug",
111 "GYP_DEFINES": "skia_arch_type=arm skia_arch_width=32 skia_warnings_as_err ors=0",
112 "SKIA_ANDROID_VERBOSE_SETUP": "1"
113 },
114 "name": "build nanobench"
115 },
116 {
117 "cmd": [
118 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
119 "-s",
120 "4d00353cd8ed61c3",
121 "wait-for-device"
122 ],
123 "cwd": "[SLAVE_BUILD]",
124 "name": "wait for device (1)"
125 },
126 {
127 "cmd": [
128 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
129 "-s",
130 "4d00353cd8ed61c3",
131 "shell",
132 "echo",
133 "$EXTERNAL_STORAGE"
134 ],
135 "cwd": "[SLAVE_BUILD]",
136 "name": "get EXTERNAL_STORAGE dir",
137 "stdout": "/path/to/tmp/"
138 },
139 {
140 "cmd": [
141 "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia",
142 "-s",
143 "4d00353cd8ed61c3"
144 ],
145 "cwd": "[SLAVE_BUILD]",
146 "env": {
147 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
148 "SKIA_ANDROID_VERBOSE_SETUP": "1"
149 },
150 "name": "kill skia"
151 },
152 {
153 "cmd": [
154 "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed",
155 "-s",
156 "4d00353cd8ed61c3",
157 "[SLAVE_BUILD]/skia/resources",
158 "/storage/emulated/legacy/skiabot/skia_resources"
159 ],
160 "cwd": "[SLAVE_BUILD]",
161 "env": {
162 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
163 "SKIA_ANDROID_VERBOSE_SETUP": "1"
164 },
165 "name": "push resources"
166 },
167 {
168 "cmd": [
169 "python",
170 "-u",
171 "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os. path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
172 "[SLAVE_BUILD]/tmp",
173 "511"
174 ],
175 "cwd": "[SLAVE_BUILD]",
176 "name": "makedirs tmp_dir",
177 "~followup_annotations": [
178 "@@@STEP_LOG_LINE@python.inline@@@@",
179 "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
180 "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
181 "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
182 "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
183 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
184 "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
185 "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
186 "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
187 "@@@STEP_LOG_END@python.inline@@@"
188 ]
189 },
190 {
191 "cmd": [
192 "python",
193 "-u",
194 "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
195 "[SLAVE_BUILD]/skia/SKP_VERSION",
196 "/path/to/tmp/"
197 ],
198 "cwd": "[SLAVE_BUILD]",
199 "name": "Get expected SKP_VERSION"
200 },
201 {
202 "cmd": [
203 "python",
204 "-u",
205 "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
206 "[SLAVE_BUILD]/tmp/SKP_VERSION",
207 "/path/to/tmp/"
208 ],
209 "cwd": "[SLAVE_BUILD]",
210 "name": "Get downloaded SKP_VERSION"
211 },
212 {
213 "cmd": [
214 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
215 "-s",
216 "4d00353cd8ed61c3",
217 "shell",
218 "cat",
219 "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION"
220 ],
221 "cwd": "[SLAVE_BUILD]",
222 "name": "read SKP_VERSION",
223 "stdout": "/path/to/tmp/"
224 },
225 {
226 "cmd": [
227 "python",
228 "-u",
229 "RECIPE_MODULE[gsutil]/resources/gsutil_wrapper.py",
230 "--",
231 "[DEPOT_TOOLS]/gsutil.py",
232 "--force-version",
233 "3.25",
234 "----",
235 "cat",
236 "gs://chromium-skia-gm/skimage/input/TIMESTAMP_LAST_UPLOAD_COMPLETED"
237 ],
238 "cwd": "[SLAVE_BUILD]",
239 "name": "gsutil cat TIMESTAMP_LAST_UPLOAD_COMPLETED",
240 "stdout": "/path/to/tmp/"
241 },
242 {
243 "cmd": [
244 "python",
245 "-u",
246 "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
247 "[SLAVE_BUILD]/tmp/SKIMAGE_VERSION",
248 "/path/to/tmp/"
249 ],
250 "cwd": "[SLAVE_BUILD]",
251 "name": "Get downloaded SKIMAGE_VERSION"
252 },
253 {
254 "cmd": [
255 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
256 "-s",
257 "4d00353cd8ed61c3",
258 "shell",
259 "cat",
260 "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKIMAGE_VERSION"
261 ],
262 "cwd": "[SLAVE_BUILD]",
263 "name": "read SKIMAGE_VERSION",
264 "stdout": "/path/to/tmp/"
265 },
266 {
267 "cmd": [
268 "python",
269 "-u",
270 "\nimport os, sys\nfrom common import chromium_utils\n\nif os.path.exists( sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n",
271 "[SLAVE_BUILD]/dm"
272 ],
273 "cwd": "[SLAVE_BUILD]",
274 "name": "rmtree dm",
275 "~followup_annotations": [
276 "@@@STEP_LOG_LINE@python.inline@@@@",
277 "@@@STEP_LOG_LINE@python.inline@import os, sys@@@",
278 "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils@@@",
279 "@@@STEP_LOG_LINE@python.inline@@@@",
280 "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@",
281 "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[ 1])@@@",
282 "@@@STEP_LOG_END@python.inline@@@"
283 ]
284 },
285 {
286 "cmd": [
287 "python",
288 "-u",
289 "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os. path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
290 "[SLAVE_BUILD]/dm",
291 "511"
292 ],
293 "cwd": "[SLAVE_BUILD]",
294 "name": "makedirs dm",
295 "~followup_annotations": [
296 "@@@STEP_LOG_LINE@python.inline@@@@",
297 "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
298 "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
299 "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
300 "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
301 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
302 "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
303 "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
304 "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
305 "@@@STEP_LOG_END@python.inline@@@"
306 ]
307 },
308 {
309 "cmd": [
310 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
311 "-s",
312 "4d00353cd8ed61c3",
313 "shell",
314 "rm",
315 "-r",
316 "/storage/emulated/legacy/skiabot/skia_dm"
317 ],
318 "cwd": "[SLAVE_BUILD]",
319 "name": "rmdir skia_dm"
320 },
321 {
322 "cmd": [
323 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
324 "-s",
325 "4d00353cd8ed61c3",
326 "shell",
327 "if",
328 "[",
329 "-e",
330 "/storage/emulated/legacy/skiabot/skia_dm",
331 "];",
332 "then",
333 "echo",
334 "FILE_EXISTS;",
335 "fi"
336 ],
337 "cwd": "[SLAVE_BUILD]",
338 "name": "exists skia_dm",
339 "stdout": "/path/to/tmp/"
340 },
341 {
342 "cmd": [
343 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
344 "-s",
345 "4d00353cd8ed61c3",
346 "shell",
347 "mkdir",
348 "-p",
349 "/storage/emulated/legacy/skiabot/skia_dm"
350 ],
351 "cwd": "[SLAVE_BUILD]",
352 "name": "mkdir skia_dm"
353 },
354 {
355 "cmd": [
356 "python",
357 "-u",
358 "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\ nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/2/_/hashes'\nRETRIES = 5\ nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen( HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sy s.argv[1], 'w') as f:\n f.write(hashes)\n break\n except:\n pr int 'Failed to get uninteresting hashes from %s' % HASHES_URL\n if retry == R ETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print ' Retry in %d seconds.' % waittime\n time.sleep(waittime)\n",
359 "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt"
360 ],
361 "cwd": "[SLAVE_BUILD]/skia",
362 "name": "get uninteresting hashes",
363 "~followup_annotations": [
364 "@@@STEP_LOG_LINE@python.inline@@@@",
365 "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
366 "@@@STEP_LOG_LINE@python.inline@import math@@@",
367 "@@@STEP_LOG_LINE@python.inline@import socket@@@",
368 "@@@STEP_LOG_LINE@python.inline@import sys@@@",
369 "@@@STEP_LOG_LINE@python.inline@import time@@@",
370 "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
371 "@@@STEP_LOG_LINE@python.inline@@@@",
372 "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/2/_/ha shes'@@@",
373 "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
374 "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
375 "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
376 "@@@STEP_LOG_LINE@python.inline@@@@",
377 "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
378 "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
379 "@@@STEP_LOG_LINE@python.inline@ try:@@@",
380 "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@",
381 "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeou t=TIMEOUT)) as w:@@@",
382 "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@",
383 "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@ ",
384 "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@",
385 "@@@STEP_LOG_LINE@python.inline@ break@@@",
386 "@@@STEP_LOG_LINE@python.inline@ except:@@@",
387 "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting has hes from %s' % HASHES_URL@@@",
388 "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@",
389 "@@@STEP_LOG_LINE@python.inline@ raise@@@",
390 "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, ret ry)@@@",
391 "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittim e@@@",
392 "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@",
393 "@@@STEP_LOG_END@python.inline@@@"
394 ]
395 },
396 {
397 "cmd": [
398 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
399 "-s",
400 "4d00353cd8ed61c3",
401 "push",
402 "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt",
403 "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt"
404 ],
405 "cwd": "[SLAVE_BUILD]",
406 "name": "push uninteresting_hashes.txt"
407 },
408 {
409 "cmd": [
410 "python",
411 "-u",
412 "[SLAVE_BUILD]/skia/tools/dm_flags.py",
413 "/path/to/tmp/json",
414 "Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Debug"
415 ],
416 "cwd": "[SLAVE_BUILD]/skia",
417 "name": "exec dm_flags.py",
418 "~followup_annotations": [
419 "@@@STEP_LOG_LINE@json.output@[@@@",
420 "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@",
421 "@@@STEP_LOG_LINE@json.output@]@@@",
422 "@@@STEP_LOG_END@json.output@@@"
423 ]
424 },
425 {
426 "cmd": [
427 "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia",
428 "--logcat",
429 "-d",
430 "arm_v7_neon",
431 "-s",
432 "4d00353cd8ed61c3",
433 "dm",
434 "--undefok",
435 "--verbose",
436 "--resourcePath",
437 "/storage/emulated/legacy/skiabot/skia_resources",
438 "--skps",
439 "/storage/emulated/legacy/skiabot/skia_skp/skps",
440 "--images",
441 "/storage/emulated/legacy/skiabot/skia_images",
442 "--writePath",
443 "/storage/emulated/legacy/skiabot/skia_dm",
444 "--nameByHash",
445 "--properties",
446 "gitHash",
447 "164710",
448 "build_number",
449 "5",
450 "--key",
451 "arch",
452 "Arm7",
453 "compiler",
454 "GCC",
455 "configuration",
456 "Debug",
457 "cpu_or_gpu",
458 "GPU",
459 "cpu_or_gpu_value",
460 "SGX544",
461 "model",
462 "GalaxyS4",
463 "os",
464 "Android",
465 "--uninterestingHashesFile",
466 "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt",
467 "--nocpu",
468 "--dummy-flags"
469 ],
470 "cwd": "[SLAVE_BUILD]",
471 "env": {
472 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
473 "SKIA_ANDROID_VERBOSE_SETUP": "1"
474 },
475 "name": "dm"
476 },
477 {
478 "cmd": [
479 "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed",
480 "-s",
481 "4d00353cd8ed61c3",
482 "/storage/emulated/legacy/skiabot/skia_dm",
483 "[SLAVE_BUILD]/dm"
484 ],
485 "cwd": "[SLAVE_BUILD]",
486 "env": {
487 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
488 "SKIA_ANDROID_VERBOSE_SETUP": "1"
489 },
490 "name": "pull skia_dm"
491 },
492 {
493 "cmd": [
494 "python",
495 "-u",
496 "RECIPE_MODULE[skia]/resources/upload_dm_results.py",
497 "[SLAVE_BUILD]/dm",
498 "164710",
499 "Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Debug",
500 "5",
501 "",
502 "[SLAVE_BUILD]/skia/common/py/utils"
503 ],
504 "cwd": "[SLAVE_BUILD]/skia",
505 "name": "Upload DM Results"
506 },
507 {
508 "cmd": [
509 "python",
510 "-u",
511 "[SLAVE_BUILD]/skia/tools/nanobench_flags.py",
512 "/path/to/tmp/json",
513 "Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Debug"
514 ],
515 "cwd": "[SLAVE_BUILD]/skia",
516 "name": "exec nanobench_flags.py",
517 "~followup_annotations": [
518 "@@@STEP_LOG_LINE@json.output@[@@@",
519 "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@",
520 "@@@STEP_LOG_LINE@json.output@]@@@",
521 "@@@STEP_LOG_END@json.output@@@"
522 ]
523 },
524 {
525 "cmd": [
526 "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia",
527 "--logcat",
528 "-d",
529 "arm_v7_neon",
530 "-s",
531 "4d00353cd8ed61c3",
532 "nanobench",
533 "--undefok",
534 "-i",
535 "/storage/emulated/legacy/skiabot/skia_resources",
536 "--skps",
537 "/storage/emulated/legacy/skiabot/skia_skp/skps",
538 "--nocpu",
539 "--dummy-flags"
540 ],
541 "cwd": "[SLAVE_BUILD]",
542 "env": {
543 "ANDROID_SDK_ROOT": "/home/chrome-bot/android-sdk-linux",
544 "SKIA_ANDROID_VERBOSE_SETUP": "1"
545 },
546 "name": "nanobench"
547 },
548 {
549 "cmd": [
550 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
551 "-s",
552 "4d00353cd8ed61c3",
553 "reboot"
554 ],
555 "cwd": "[SLAVE_BUILD]",
556 "name": "reboot"
557 },
558 {
559 "cmd": [
560 "sleep",
561 "10"
562 ],
563 "cwd": "[SLAVE_BUILD]",
564 "name": "wait for reboot"
565 },
566 {
567 "cmd": [
568 "/home/chrome-bot/android-sdk-linux/platform-tools/adb",
569 "-s",
570 "4d00353cd8ed61c3",
571 "wait-for-device"
572 ],
573 "cwd": "[SLAVE_BUILD]",
574 "name": "wait for device (2)"
575 }
576 ]
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698