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

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

Issue 951673002: Revert "Pull chromium at 2c3ffb2355a27c32f45e508ef861416b820c823b" (Closed) Base URL: git@github.com:domokit/mojo.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
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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1421 from which DeviceUtils instances can be constructed. If None, 1379 from which DeviceUtils instances can be constructed. If None,
1422 all attached devices will be used. 1380 all attached devices will be used.
1423 async: If true, returns a Parallelizer that runs operations 1381 async: If true, returns a Parallelizer that runs operations
1424 asynchronously. 1382 asynchronously.
1425 1383
1426 Returns: 1384 Returns:
1427 A Parallelizer operating over |devices|. 1385 A Parallelizer operating over |devices|.
1428 """ 1386 """
1429 if not devices: 1387 if not devices:
1430 devices = adb_wrapper.AdbWrapper.GetDevices() 1388 devices = adb_wrapper.AdbWrapper.GetDevices()
1431 if not devices:
1432 raise device_errors.NoDevicesError()
1433 devices = [d if isinstance(d, cls) else cls(d) for d in devices] 1389 devices = [d if isinstance(d, cls) else cls(d) for d in devices]
1434 if async: 1390 if async:
1435 return parallelizer.Parallelizer(devices) 1391 return parallelizer.Parallelizer(devices)
1436 else: 1392 else:
1437 return parallelizer.SyncParallelizer(devices) 1393 return parallelizer.SyncParallelizer(devices)
OLDNEW
« no previous file with comments | « build/android/pylib/device/adb_wrapper.py ('k') | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698