RetroZilla/extensions/python/xpcom/test/pyxpcom_test_tools.py
2015-10-20 23:03:22 -04:00

73 lines
2.2 KiB
Python

# test tools for the pyxpcom
# export a "getmemusage()" function that returns a useful "bytes used" count
# for the current process. Growth in this when doing the same thing over and
# over implies a leak.
try:
import win32api
import win32pdh
import win32pdhutil
have_pdh = 1
except ImportError:
have_pdh = 0
# XXX - win32pdh is slow, particularly finding our current process.
# A better way would be good.
# Our win32pdh specific functions - they can be at the top-level on all
# platforms, but will only actually be called if the modules are available.
def FindMyCounter():
pid_me = win32api.GetCurrentProcessId()
object = "Process"
items, instances = win32pdh.EnumObjectItems(None,None,object, -1)
for instance in instances:
# We use 2 counters - "ID Process" and "Working Set"
counter = "ID Process"
format = win32pdh.PDH_FMT_LONG
hq = win32pdh.OpenQuery()
path = win32pdh.MakeCounterPath( (None,object,instance, None, -1,"ID Process") )
hc1 = win32pdh.AddCounter(hq, path)
path = win32pdh.MakeCounterPath( (None,object,instance, None, -1,"Working Set") )
hc2 = win32pdh.AddCounter(hq, path)
win32pdh.CollectQueryData(hq)
type, pid = win32pdh.GetFormattedCounterValue(hc1, format)
if pid==pid_me:
win32pdh.RemoveCounter(hc1) # not needed any more
return hq, hc2
# Not mine - close the query and try again
win32pdh.RemoveCounter(hc1)
win32pdh.RemoveCounter(hc2)
win32pdh.CloseQuery(hq)
else:
raise RuntimeError, "Can't find myself!?"
def CloseCounter(hq, hc):
win32pdh.RemoveCounter(hc)
win32pdh.CloseQuery(hq)
def GetCounterValue(hq, hc):
win32pdh.CollectQueryData(hq)
format = win32pdh.PDH_FMT_LONG
type, val = win32pdh.GetFormattedCounterValue(hc, format)
return val
g_pdh_data = None
# The pdh function that does the work
def pdh_getmemusage():
global g_pdh_data
if g_pdh_data is None:
hq, hc = FindMyCounter()
g_pdh_data = hq, hc
hq, hc = g_pdh_data
return GetCounterValue(hq, hc)
# The public bit
if have_pdh:
getmemusage = pdh_getmemusage
else:
def getmemusage():
return 0