build/win32/procmem.py
author Nathan Froyd <froydnj@mozilla.com>
Fri, 25 Jul 2014 13:40:07 -0400
changeset 196842 b961ba8f089273cfd94d079ab88565efbb3edc11
parent 189502 ca251a28d3ddae784436d28829fb019025f4b127
permissions -rw-r--r--
Bug 1044162 - part 1 - make EXTRA_{PP_,}JS_MODULES communicate their installation path; r=mshal This patch makes EXTRA_{PP_,}JS_MODULES similar in functionality to TESTING_JS_MODULES: we indicate the path relative to $(FINAL_TARGET)/modules with an appropriate hierarchy of paths.

# 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