Commit 897baccf authored by Juan Antonio Navarro Perez's avatar Juan Antonio Navarro Perez Committed by Commit Bot

[build/android] Remove usage of GetPids from apk_operations.py

device_utils.GetPids is being deprecated. Switch its clients to
use ListProcesses and GetApplicationPids instead.

Bug: catapult:#4103
Change-Id: I32e935918ea8f9da586caa91c5e9e8a0b6ac65a2
Reviewed-on: https://chromium-review.googlesource.com/962801
Commit-Queue: Juan Antonio Navarro Pérez <perezju@chromium.org>
Reviewed-by: default avataragrieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544027}
parent aa5f4ac2
...@@ -164,13 +164,11 @@ def _RunGdb(device, package_name, debug_process_name, pid, output_directory, ...@@ -164,13 +164,11 @@ def _RunGdb(device, package_name, debug_process_name, pid, output_directory,
target_cpu, extra_args, verbose): target_cpu, extra_args, verbose):
if not pid: if not pid:
debug_process_name = _NormalizeProcessName(debug_process_name, package_name) debug_process_name = _NormalizeProcessName(debug_process_name, package_name)
pids_by_process_name = _GetPackagePids(device, package_name) pid = device.GetApplicationPids(debug_process_name, at_most_one=True)
pid = pids_by_process_name.get(debug_process_name, [0])[0]
if not pid: if not pid:
logging.warning('App not running. Sending launch intent.') logging.warning('App not running. Sending launch intent.')
_LaunchUrl([device], package_name) _LaunchUrl([device], package_name)
pids_by_process_name = _GetPackagePids(device, package_name) pid = device.GetApplicationPids(debug_process_name, at_most_one=True)
pid = pids_by_process_name.get(debug_process_name, [0])[0]
if not pid: if not pid:
raise Exception('Unable to find process "%s"' % debug_process_name) raise Exception('Unable to find process "%s"' % debug_process_name)
...@@ -212,11 +210,9 @@ def _PrintPerDeviceOutput(devices, results, single_line=False): ...@@ -212,11 +210,9 @@ def _PrintPerDeviceOutput(devices, results, single_line=False):
def _RunMemUsage(devices, package_name): def _RunMemUsage(devices, package_name):
def mem_usage_helper(d): def mem_usage_helper(d):
ret = [] ret = []
proc_map = _GetPackagePids(d, package_name) for process in sorted(_GetPackageProcesses(d, package_name)):
for name in sorted(proc_map.iterkeys()): meminfo = d.RunShellCommand(['dumpsys', 'meminfo', str(process.pid)])
for pid in proc_map[name]: ret.append((process.name, '\n'.join(meminfo)))
ret.append(
(name, '\n'.join(d.RunShellCommand(['dumpsys', 'meminfo', pid]))))
return ret return ret
parallel_devices = device_utils.DeviceUtils.parallel(devices) parallel_devices = device_utils.DeviceUtils.parallel(devices)
...@@ -439,11 +435,17 @@ class _LogcatProcessor(object): ...@@ -439,11 +435,17 @@ class _LogcatProcessor(object):
self._UpdateMyPids() self._UpdateMyPids()
def _UpdateMyPids(self): def _UpdateMyPids(self):
package_pids = _GetPackagePids(self._device, self._package_name) # We intentionally do not clear self._my_pids to make sure that the
for name, pids in package_pids.iteritems(): # ProcessLine method below also includes lines from processes which may
if ':' not in name: # have already exited.
self._primary_pid = int(pids[0]) self._primary_pid = None
self._my_pids.update(int(p) for p in pids) for process in _GetPackageProcesses(self._device, self._package_name):
# We take only the first "main" process found in order to account for
# possibly forked() processes.
if ':' not in process.name and self._primary_pid is None:
self._primary_pid = process.pid
else:
self._my_pids.add(process.pid)
def _GetPidStyle(self, pid, dim=False): def _GetPidStyle(self, pid, dim=False):
if pid == self._primary_pid: if pid == self._primary_pid:
...@@ -570,19 +572,23 @@ def _RunLogcat(device, package_name, mapping_path, verbose): ...@@ -570,19 +572,23 @@ def _RunLogcat(device, package_name, mapping_path, verbose):
deobfuscate.Close() deobfuscate.Close()
def _GetPackagePids(device, package_name): def _GetPackageProcesses(device, package_name):
return dict((k, v) for k, v in device.GetPids(package_name).iteritems() return [
if k == package_name or k.startswith(package_name + ':')) p for p in device.ListProcesses(package_name)
if p.name == package_name or p.name.startswith(package_name + ':')]
def _RunPs(devices, package_name): def _RunPs(devices, package_name):
parallel_devices = device_utils.DeviceUtils.parallel(devices) parallel_devices = device_utils.DeviceUtils.parallel(devices)
all_pids = parallel_devices.pMap( all_processes = parallel_devices.pMap(
lambda d: _GetPackagePids(d, package_name)).pGet(None) lambda d: _GetPackageProcesses(d, package_name)).pGet(None)
for proc_map in _PrintPerDeviceOutput(devices, all_pids): for processes in _PrintPerDeviceOutput(devices, all_processes):
if not proc_map: if not processes:
print 'No processes found.' print 'No processes found.'
else: else:
proc_map = collections.defaultdict(list)
for p in processes:
proc_map[p.name].append(str(p.pid))
for name, pids in sorted(proc_map.items()): for name, pids in sorted(proc_map.items()):
print name, ','.join(pids) print name, ','.join(pids)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment