Add code to measure memory usage on windows

This commit is contained in:
Kovid Goyal 2011-03-02 13:34:31 -07:00
parent 8d5e009d61
commit 3ade7e7e33

View File

@ -5,10 +5,12 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import gc import gc, os
from calibre.constants import iswindows, islinux
if islinux:
## {{{ http://code.activestate.com/recipes/286222/ (r1) ## {{{ http://code.activestate.com/recipes/286222/ (r1)
import os
_proc_status = '/proc/%d/status' % os.getpid() _proc_status = '/proc/%d/status' % os.getpid()
@ -35,7 +37,7 @@ def _VmB(VmKey):
return float(v[1]) * _scale[v[2]] return float(v[1]) * _scale[v[2]]
def memory(since=0.0): def linux_memory(since=0.0):
'''Return memory usage in bytes. '''Return memory usage in bytes.
''' '''
return _VmB('VmSize:') - since return _VmB('VmSize:') - since
@ -52,6 +54,42 @@ def stacksize(since=0.0):
''' '''
return _VmB('VmStk:') - since return _VmB('VmStk:') - since
## end of http://code.activestate.com/recipes/286222/ }}} ## end of http://code.activestate.com/recipes/286222/ }}}
memory = linux_memory
elif iswindows:
import win32process
import win32con
import win32api
# See http://msdn.microsoft.com/en-us/library/ms684877.aspx
# for details on the info returned by get_meminfo
def get_handle(pid):
return win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, 0,
pid)
def listprocesses(self):
for process in win32process.EnumProcesses():
try:
han = get_handle(process)
procmeminfo = meminfo(han)
procmemusage = procmeminfo["WorkingSetSize"]
yield process, procmemusage
except:
pass
def get_meminfo(pid):
han = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, 0,
pid)
return meminfo(han)
def meminfo(handle):
return win32process.GetProcessMemoryInfo(handle)
def win_memory(since=0.0):
info = meminfo(get_handle(os.getpid()))
return info['WorkingSetSize'] - since
memory = win_memory
def gc_histogram(): def gc_histogram():