gecko-dev/build/win32/procmem.py
2012-05-21 12:12:37 +01:00

49 lines
2.1 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import os, sys, ctypes, ctypes.wintypes
class VM_COUNTERS(ctypes.Structure):
_fields_ = [("PeakVirtualSize", ctypes.wintypes.ULONG),
("VirtualSize", ctypes.wintypes.ULONG),
("PageFaultCount", ctypes.wintypes.ULONG),
("PeakWorkingSetSize", ctypes.wintypes.ULONG),
("WorkingSetSize", ctypes.wintypes.ULONG),
("QuotaPeakPagedPoolUsage", ctypes.wintypes.ULONG),
("QuotaPagedPoolUsage", ctypes.wintypes.ULONG),
("QuotaPeakNonPagedPoolUsage", ctypes.wintypes.ULONG),
("QuotaNonPagedPoolUsage", ctypes.wintypes.ULONG),
("PagefileUsage", ctypes.wintypes.ULONG),
("PeakPagefileUsage", ctypes.wintypes.ULONG)
]
def get_vmsize(handle):
"""
Return (peak_virtual_size, virtual_size) for the process |handle|.
"""
ProcessVmCounters = 3
vmc = VM_COUNTERS()
if ctypes.windll.ntdll.NtQueryInformationProcess(int(handle),
ProcessVmCounters,
ctypes.byref(vmc),
ctypes.sizeof(vmc),
None) == 0:
return (vmc.PeakVirtualSize, vmc.VirtualSize)
return (-1, -1)
if __name__ == '__main__':
PROCESS_QUERY_INFORMATION = 0x0400
for pid in sys.argv[1:]:
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION,
0, # no inherit
int(pid))
if handle:
print "Process %s:" % pid
vsize, peak_vsize = get_vmsize(handle)
print "peak vsize: %d" % peak_vsize
ctypes.windll.kernel32.CloseHandle(handle)
else:
print "Couldn't open process %s" % pid