| Index: tools/telemetry/third_party/coverage/tests/osinfo.py
|
| diff --git a/tools/telemetry/third_party/coverage/tests/osinfo.py b/tools/telemetry/third_party/coverage/tests/osinfo.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a7ebd2efd1e19c0bcb7f63e769b558e909041d3f
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/coverage/tests/osinfo.py
|
| @@ -0,0 +1,72 @@
|
| +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
|
| +# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
|
| +
|
| +"""OS information for testing."""
|
| +
|
| +from coverage import env
|
| +
|
| +
|
| +if env.WINDOWS:
|
| + # Windows implementation
|
| + def process_ram():
|
| + """How much RAM is this process using? (Windows)"""
|
| + import ctypes
|
| + # From: http://lists.ubuntu.com/archives/bazaar-commits/2009-February/011990.html
|
| + class PROCESS_MEMORY_COUNTERS_EX(ctypes.Structure):
|
| + """Used by GetProcessMemoryInfo"""
|
| + _fields_ = [
|
| + ('cb', ctypes.c_ulong),
|
| + ('PageFaultCount', ctypes.c_ulong),
|
| + ('PeakWorkingSetSize', ctypes.c_size_t),
|
| + ('WorkingSetSize', ctypes.c_size_t),
|
| + ('QuotaPeakPagedPoolUsage', ctypes.c_size_t),
|
| + ('QuotaPagedPoolUsage', ctypes.c_size_t),
|
| + ('QuotaPeakNonPagedPoolUsage', ctypes.c_size_t),
|
| + ('QuotaNonPagedPoolUsage', ctypes.c_size_t),
|
| + ('PagefileUsage', ctypes.c_size_t),
|
| + ('PeakPagefileUsage', ctypes.c_size_t),
|
| + ('PrivateUsage', ctypes.c_size_t),
|
| + ]
|
| +
|
| + mem_struct = PROCESS_MEMORY_COUNTERS_EX()
|
| + ret = ctypes.windll.psapi.GetProcessMemoryInfo(
|
| + ctypes.windll.kernel32.GetCurrentProcess(),
|
| + ctypes.byref(mem_struct),
|
| + ctypes.sizeof(mem_struct)
|
| + )
|
| + if not ret:
|
| + return 0
|
| + return mem_struct.PrivateUsage
|
| +
|
| +elif env.LINUX:
|
| + # Linux implementation
|
| + import os
|
| +
|
| + _scale = {'kb': 1024, 'mb': 1024*1024}
|
| +
|
| + def _VmB(key):
|
| + """Read the /proc/PID/status file to find memory use."""
|
| + try:
|
| + # Get pseudo file /proc/<pid>/status
|
| + with open('/proc/%d/status' % os.getpid()) as t:
|
| + v = t.read()
|
| + except IOError:
|
| + return 0 # non-Linux?
|
| + # Get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
|
| + i = v.index(key)
|
| + v = v[i:].split(None, 3)
|
| + if len(v) < 3:
|
| + return 0 # Invalid format?
|
| + # Convert Vm value to bytes.
|
| + return int(float(v[1]) * _scale[v[2].lower()])
|
| +
|
| + def process_ram():
|
| + """How much RAM is this process using? (Linux implementation)"""
|
| + return _VmB('VmRSS')
|
| +
|
| +else:
|
| + # Generic implementation.
|
| + def process_ram():
|
| + """How much RAM is this process using? (stdlib implementation)"""
|
| + import resource
|
| + return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
|
|
|