Advertisement
Guest User

Untitled

a guest
Jan 31st, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #!/usr/bin/env python2
  2.  
  3. import sys, os
  4. import collections
  5.  
  6. def parse_meminfo(filename):
  7. def parse(filename):
  8. lines = []
  9. for line in open(filename):
  10. line = line[:-1]
  11. if line.startswith('** MEMINFO in pid '):
  12. if len(lines) > 3:
  13. yield get_binder_info(lines)
  14. lines = []
  15. lines.append(line)
  16. yield get_binder_info(lines)
  17.  
  18. d = {}
  19. for pid, name, binder_info in parse(filename):
  20. d[name] = binder_info
  21. return d
  22.  
  23. def get_binder_info(item):
  24. l = item[0].split()
  25. pid = l[4]
  26. pname = l[5][1:-1]
  27.  
  28. proxies = []
  29. lines = []
  30.  
  31. for line in item[2:]:
  32. if not line.strip():
  33. proxies.append('\n'.join(lines))
  34. lines = []
  35. continue
  36. if line.startswith(' Shared'):
  37. break
  38. lines.append(line)
  39.  
  40. return pid, pname, collections.Counter(proxies)
  41.  
  42. if __name__ == '__main__':
  43. def parse_args(argv):
  44. tags = []
  45. filenames = []
  46. for filename in argv:
  47. if os.access(filename, os.R_OK):
  48. filenames.append(filename)
  49. else:
  50. tags.append(filename)
  51. return tags, filenames
  52.  
  53. tags, filenames = parse_args(sys.argv[1:])
  54.  
  55. if not filenames:
  56. print 'Usage: %s dumpsys_meminfo_a_output1 dumpsys_meminfo_a_output2 ...'%sys.argv[0]
  57. sys.exit(-1)
  58.  
  59. parsed = map(parse_meminfo, filenames)
  60. now = parsed[-1]
  61.  
  62. if not tags:
  63. tags = now.keys() # ['system', ]
  64.  
  65. for tag in tags:
  66. printed = False
  67. for k, v in now[tag].most_common(10):
  68. if v < 4: continue
  69. if not printed:
  70. print 'process: ', tag
  71. printed = True
  72. print 'count history:', map(lambda x: x.get(tag, {}).get(k, 0), parsed)
  73. print 'item: ', k
  74. print
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement