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

Side by Side Diff: build/android/pylib/device/device_utils.py

Issue 934893002: Revert of [Android] Migrate DeviceUtils.GetMemoryUsageForPid to adb_wrapper. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 | « no previous file | build/android/pylib/device/device_utils_test.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 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 """Provides a variety of device interactions based on adb. 5 """Provides a variety of device interactions based on adb.
6 6
7 Eventually, this will be based on adb_wrapper. 7 Eventually, this will be based on adb_wrapper.
8 """ 8 """
9 # pylint: disable=unused-argument 9 # pylint: disable=unused-argument
10 10
11 import collections
12 import itertools
13 import logging 11 import logging
14 import multiprocessing 12 import multiprocessing
15 import os 13 import os
16 import re 14 import re
17 import sys 15 import sys
18 import tempfile 16 import tempfile
19 import time 17 import time
20 import zipfile 18 import zipfile
21 19
22 import pylib.android_commands 20 import pylib.android_commands
(...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 @decorators.WithTimeoutAndRetriesFromInstance() 1299 @decorators.WithTimeoutAndRetriesFromInstance()
1302 def GetMemoryUsageForPid(self, pid, timeout=None, retries=None): 1300 def GetMemoryUsageForPid(self, pid, timeout=None, retries=None):
1303 """Gets the memory usage for the given PID. 1301 """Gets the memory usage for the given PID.
1304 1302
1305 Args: 1303 Args:
1306 pid: PID of the process. 1304 pid: PID of the process.
1307 timeout: timeout in seconds 1305 timeout: timeout in seconds
1308 retries: number of retries 1306 retries: number of retries
1309 1307
1310 Returns: 1308 Returns:
1311 A dict containing memory usage statistics for the PID. May include: 1309 A 2-tuple containing:
1312 Size, Rss, Pss, Shared_Clean, Shared_Dirty, Private_Clean, 1310 - A dict containing the overall memory usage statistics for the PID.
1313 Private_Dirty, VmHWM 1311 - A dict containing memory usage statistics broken down by mapping.
1314 1312
1315 Raises: 1313 Raises:
1316 CommandTimeoutError on timeout. 1314 CommandTimeoutError on timeout.
1317 """ 1315 """
1318 result = collections.defaultdict(int) 1316 return self.old_interface.GetMemoryUsageForPid(pid)
1319
1320 try:
1321 result.update(self._GetMemoryUsageForPidFromSmaps(pid))
1322 except device_errors.CommandFailedError:
1323 logging.exception('Error getting memory usage from smaps')
1324
1325 try:
1326 result.update(self._GetMemoryUsageForPidFromStatus(pid))
1327 except device_errors.CommandFailedError:
1328 logging.exception('Error getting memory usage from status')
1329
1330 return result
1331
1332 def _GetMemoryUsageForPidFromSmaps(self, pid):
1333 SMAPS_COLUMNS = (
1334 'Size', 'Rss', 'Pss', 'Shared_Clean', 'Shared_Dirty', 'Private_Clean',
1335 'Private_Dirty')
1336
1337 showmap_out = self.RunShellCommand(
1338 ['showmap', str(pid)], as_root=True, check_return=True)
1339 if not showmap_out:
1340 raise device_errors.CommandFailedError('No output from showmap')
1341
1342 split_totals = showmap_out[-1].split()
1343 if (not split_totals
1344 or len(split_totals) != 9
1345 or split_totals[-1] != 'TOTAL'):
1346 raise device_errors.CommandFailedError(
1347 'Invalid output from showmap: %s' % '\n'.join(showmap_out))
1348
1349 return dict(itertools.izip(SMAPS_COLUMNS, (int(n) for n in split_totals)))
1350
1351 def _GetMemoryUsageForPidFromStatus(self, pid):
1352 for line in self.ReadFile(
1353 '/proc/%s/status' % str(pid), as_root=True).splitlines():
1354 if line.startswith('VmHWM:'):
1355 return {'VmHWM': int(line.split()[1])}
1356 else:
1357 raise device_errors.CommandFailedError(
1358 'Could not find memory peak value for pid %s', str(pid))
1359 1317
1360 @decorators.WithTimeoutAndRetriesFromInstance() 1318 @decorators.WithTimeoutAndRetriesFromInstance()
1361 def GetLogcatMonitor(self, timeout=None, retries=None, *args, **kwargs): 1319 def GetLogcatMonitor(self, timeout=None, retries=None, *args, **kwargs):
1362 """Returns a new LogcatMonitor associated with this device. 1320 """Returns a new LogcatMonitor associated with this device.
1363 1321
1364 Parameters passed to this function are passed directly to 1322 Parameters passed to this function are passed directly to
1365 |logcat_monitor.LogcatMonitor| and are documented there. 1323 |logcat_monitor.LogcatMonitor| and are documented there.
1366 1324
1367 Args: 1325 Args:
1368 timeout: timeout in seconds 1326 timeout: timeout in seconds
(...skipping 22 matching lines...) Expand all
1391 Returns: 1349 Returns:
1392 A Parallelizer operating over |devices|. 1350 A Parallelizer operating over |devices|.
1393 """ 1351 """
1394 if not devices: 1352 if not devices:
1395 devices = adb_wrapper.AdbWrapper.GetDevices() 1353 devices = adb_wrapper.AdbWrapper.GetDevices()
1396 devices = [d if isinstance(d, cls) else cls(d) for d in devices] 1354 devices = [d if isinstance(d, cls) else cls(d) for d in devices]
1397 if async: 1355 if async:
1398 return parallelizer.Parallelizer(devices) 1356 return parallelizer.Parallelizer(devices)
1399 else: 1357 else:
1400 return parallelizer.SyncParallelizer(devices) 1358 return parallelizer.SyncParallelizer(devices)
OLDNEW
« no previous file with comments | « no previous file | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698