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

Side by Side Diff: third_party/android_testrunner/patch.diff

Issue 1288993002: Revert of [Android] Remove android_commands and android_testrunner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 | « third_party/android_testrunner/logger.py ('k') | third_party/android_testrunner/run_command.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 diff --git a/third_party/android_testrunner/run_command.py b/third_party/android _testrunner/run_command.py
2 index d398daa..6b84156 100644
3 --- a/third_party/android_testrunner/run_command.py
4 +++ b/third_party/android_testrunner/run_command.py
5 @@ -19,6 +19,7 @@
6 import os
7 import signal
8 import subprocess
9 +import tempfile
10 import threading
11 import time
12
13 @@ -80,31 +81,36 @@ def RunOnce(cmd, timeout_time=None, return_output=True, stdi n_input=None):
14 """
15 start_time = time.time()
16 so = []
17 - pid = []
18 global _abort_on_error, error_occurred
19 error_occurred = False
20
21 + if return_output:
22 + output_dest = tempfile.TemporaryFile(bufsize=0)
23 + else:
24 + # None means direct to stdout
25 + output_dest = None
26 + if stdin_input:
27 + stdin_dest = subprocess.PIPE
28 + else:
29 + stdin_dest = None
30 + pipe = subprocess.Popen(
31 + cmd,
32 + executable='/bin/bash',
33 + stdin=stdin_dest,
34 + stdout=output_dest,
35 + stderr=subprocess.STDOUT,
36 + shell=True, close_fds=True,
37 + preexec_fn=lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL))
38 +
39 def Run():
40 global error_occurred
41 - if return_output:
42 - output_dest = subprocess.PIPE
43 - else:
44 - # None means direct to stdout
45 - output_dest = None
46 - if stdin_input:
47 - stdin_dest = subprocess.PIPE
48 - else:
49 - stdin_dest = None
50 - pipe = subprocess.Popen(
51 - cmd,
52 - executable='/bin/bash',
53 - stdin=stdin_dest,
54 - stdout=output_dest,
55 - stderr=subprocess.STDOUT,
56 - shell=True)
57 - pid.append(pipe.pid)
58 try:
59 - output = pipe.communicate(input=stdin_input)[0]
60 + pipe.communicate(input=stdin_input)
61 + output = None
62 + if return_output:
63 + output_dest.seek(0)
64 + output = output_dest.read()
65 + output_dest.close()
66 if output is not None and len(output) > 0:
67 so.append(output)
68 except OSError, e:
69 @@ -119,27 +125,17 @@ def RunOnce(cmd, timeout_time=None, return_output=True, st din_input=None):
70
71 t = threading.Thread(target=Run)
72 t.start()
73 -
74 - break_loop = False
75 - while not break_loop:
76 - if not t.isAlive():
77 - break_loop = True
78 -
79 - # Check the timeout
80 - if (not break_loop and timeout_time is not None
81 - and time.time() > start_time + timeout_time):
82 - try:
83 - os.kill(pid[0], signal.SIGKILL)
84 - except OSError:
85 - # process already dead. No action required.
86 - pass
87 -
88 + t.join(timeout_time)
89 + if t.isAlive():
90 + try:
91 + pipe.kill()
92 + except OSError:
93 + # Can't kill a dead process.
94 + pass
95 + finally:
96 logger.SilentLog("about to raise a timeout for: %s" % cmd)
97 raise errors.WaitForResponseTimedOutError
98 - if not break_loop:
99 - time.sleep(0.1)
100
101 - t.join()
102 output = "".join(so)
103 if _abort_on_error and error_occurred:
104 raise errors.AbortError(msg=output)
OLDNEW
« no previous file with comments | « third_party/android_testrunner/logger.py ('k') | third_party/android_testrunner/run_command.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698