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

Side by Side Diff: build/android/pylib/forwarder.py

Issue 132463007: Enable presubmit pylint in build/android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase vs tot and only disabling F0401 in specific spots Created 6 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 | « build/android/pylib/flag_changer.py ('k') | build/android/pylib/gtest/setup.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 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 # pylint: disable=W0212
6
5 import fcntl 7 import fcntl
6 import logging 8 import logging
7 import os 9 import os
8 import psutil 10 import psutil
9 import re
10 import sys
11 import time
12 11
13 import android_commands 12 from pylib import cmd_helper
14 import cmd_helper 13 from pylib import constants
15 import constants
16
17 from pylib import valgrind_tools 14 from pylib import valgrind_tools
18 15
19 16
20 def _GetProcessStartTime(pid): 17 def _GetProcessStartTime(pid):
21 return psutil.Process(pid).create_time 18 return psutil.Process(pid).create_time
22 19
23 20
24 class _FileLock(object): 21 class _FileLock(object):
25 """With statement-aware implementation of a file lock. 22 """With statement-aware implementation of a file lock.
26 23
27 File locks are needed for cross-process synchronization when the 24 File locks are needed for cross-process synchronization when the
28 multiprocessing Python module is used. 25 multiprocessing Python module is used.
29 """ 26 """
30 def __init__(self, path): 27 def __init__(self, path):
28 self._fd = -1
31 self._path = path 29 self._path = path
32 30
33 def __enter__(self): 31 def __enter__(self):
34 self._fd = os.open(self._path, os.O_RDONLY | os.O_CREAT) 32 self._fd = os.open(self._path, os.O_RDONLY | os.O_CREAT)
35 if self._fd < 0: 33 if self._fd < 0:
36 raise Exception('Could not open file %s for reading' % self._path) 34 raise Exception('Could not open file %s for reading' % self._path)
37 fcntl.flock(self._fd, fcntl.LOCK_EX) 35 fcntl.flock(self._fd, fcntl.LOCK_EX)
38 36
39 def __exit__(self, type, value, traceback): 37 def __exit__(self, _exception_type, _exception_value, traceback):
40 fcntl.flock(self._fd, fcntl.LOCK_UN) 38 fcntl.flock(self._fd, fcntl.LOCK_UN)
41 os.close(self._fd) 39 os.close(self._fd)
42 40
43 41
44 class Forwarder(object): 42 class Forwarder(object):
45 """Thread-safe class to manage port forwards from the device to the host.""" 43 """Thread-safe class to manage port forwards from the device to the host."""
46 44
47 _DEVICE_FORWARDER_FOLDER = (constants.TEST_EXECUTABLE_DIR + 45 _DEVICE_FORWARDER_FOLDER = (constants.TEST_EXECUTABLE_DIR +
48 '/forwarder/') 46 '/forwarder/')
49 _DEVICE_FORWARDER_PATH = (constants.TEST_EXECUTABLE_DIR + 47 _DEVICE_FORWARDER_PATH = (constants.TEST_EXECUTABLE_DIR +
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 # There are no more ports mapped, kill the device_forwarder. 145 # There are no more ports mapped, kill the device_forwarder.
148 tool = valgrind_tools.CreateTool(None, adb) 146 tool = valgrind_tools.CreateTool(None, adb)
149 Forwarder._KillDeviceLocked(adb, tool) 147 Forwarder._KillDeviceLocked(adb, tool)
150 Forwarder._instance._initialized_devices.remove(adb_serial) 148 Forwarder._instance._initialized_devices.remove(adb_serial)
151 149
152 150
153 @staticmethod 151 @staticmethod
154 def DevicePortForHostPort(host_port): 152 def DevicePortForHostPort(host_port):
155 """Returns the device port that corresponds to a given host port.""" 153 """Returns the device port that corresponds to a given host port."""
156 with _FileLock(Forwarder._LOCK_PATH): 154 with _FileLock(Forwarder._LOCK_PATH):
157 (device_serial, device_port) = Forwarder._GetInstanceLocked( 155 (_device_serial, device_port) = Forwarder._GetInstanceLocked(
158 None)._host_to_device_port_map.get(host_port) 156 None)._host_to_device_port_map.get(host_port)
159 return device_port 157 return device_port
160 158
161 @staticmethod 159 @staticmethod
162 def RemoveHostLog(): 160 def RemoveHostLog():
163 if os.path.exists(Forwarder._HOST_FORWARDER_LOG): 161 if os.path.exists(Forwarder._HOST_FORWARDER_LOG):
164 os.unlink(Forwarder._HOST_FORWARDER_LOG) 162 os.unlink(Forwarder._HOST_FORWARDER_LOG)
165 163
166 @staticmethod 164 @staticmethod
167 def GetHostLog(): 165 def GetHostLog():
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 Note that the global lock must be acquired before calling this method. 310 Note that the global lock must be acquired before calling this method.
313 311
314 Args: 312 Args:
315 adb: Instance of AndroidCommands for talking to the device. 313 adb: Instance of AndroidCommands for talking to the device.
316 tool: Wrapper tool (e.g. valgrind) that can be used to execute the device 314 tool: Wrapper tool (e.g. valgrind) that can be used to execute the device
317 forwarder (see valgrind_tools.py). 315 forwarder (see valgrind_tools.py).
318 """ 316 """
319 logging.info('Killing device_forwarder.') 317 logging.info('Killing device_forwarder.')
320 if not adb.FileExistsOnDevice(Forwarder._DEVICE_FORWARDER_PATH): 318 if not adb.FileExistsOnDevice(Forwarder._DEVICE_FORWARDER_PATH):
321 return 319 return
322 (exit_code, output) = adb.GetShellCommandStatusAndOutput( 320 adb.GetShellCommandStatusAndOutput(
323 '%s %s --kill-server' % (tool.GetUtilWrapper(), 321 '%s %s --kill-server' % (tool.GetUtilWrapper(),
324 Forwarder._DEVICE_FORWARDER_PATH)) 322 Forwarder._DEVICE_FORWARDER_PATH))
325 # TODO(pliard): Remove the following call to KillAllBlocking() when we are 323 # TODO(pliard): Remove the following call to KillAllBlocking() when we are
326 # sure that the old version of device_forwarder (not supporting 324 # sure that the old version of device_forwarder (not supporting
327 # 'kill-server') is not running on the bots anymore. 325 # 'kill-server') is not running on the bots anymore.
328 timeout_sec = 5 326 timeout_sec = 5
329 processes_killed = adb.KillAllBlocking('device_forwarder', timeout_sec) 327 processes_killed = adb.KillAllBlocking('device_forwarder', timeout_sec)
330 if not processes_killed: 328 if not processes_killed:
331 pids = adb.ExtractPid('device_forwarder') 329 pids = adb.ExtractPid('device_forwarder')
332 if pids: 330 if pids:
333 raise Exception('Timed out while killing device_forwarder') 331 raise Exception('Timed out while killing device_forwarder')
OLDNEW
« no previous file with comments | « build/android/pylib/flag_changer.py ('k') | build/android/pylib/gtest/setup.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698