SeriesPlugin 1.0: First public version
[enigma2-plugins.git] / seriesplugin / src / recipeMemUse.py
1 import os
2
3 _proc_status = '/proc/%d/status' % os.getpid()
4
5 _scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
6           'KB': 1024.0, 'MB': 1024.0*1024.0}
7
8 def _VmB(VmKey):
9     '''Private.
10     '''
11     global _proc_status, _scale
12      # get pseudo file  /proc/<pid>/status
13     try:
14         t = open(_proc_status)
15         v = t.read()
16         t.close()
17     except:
18         return 0.0  # non-Linux?
19      # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'
20     i = v.index(VmKey)
21     v = v[i:].split(None, 3)  # whitespace
22     if len(v) < 3:
23         return 0.0  # invalid format?
24      # convert Vm value to bytes
25     return float(v[1]) * _scale[v[2]]
26
27
28 def memory(since=0.0):
29     '''Return memory usage in bytes.
30     '''
31     return _VmB('VmSize:') - since
32
33
34 def resident(since=0.0):
35     '''Return resident memory usage in bytes.
36     '''
37     return _VmB('VmRSS:') - since
38
39
40 def stacksize(since=0.0):
41     '''Return stack size in bytes.
42     '''
43     return _VmB('VmStk:') - since