Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1727)

Unified Diff: tools/memory_inspector/memory_inspector/classification/mmap_classifier.py

Issue 184043006: Add mmap and native heap classifiers to memory_inspector. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CL for review. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/memory_inspector/memory_inspector/classification/mmap_classifier_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/memory_inspector/memory_inspector/classification/mmap_classifier.py
diff --git a/tools/memory_inspector/memory_inspector/classification/mmap_classifier.py b/tools/memory_inspector/memory_inspector/classification/mmap_classifier.py
new file mode 100644
index 0000000000000000000000000000000000000000..9abad90e609a20a21d27a01ccb3b8f84551c4174
--- /dev/null
+++ b/tools/memory_inspector/memory_inspector/classification/mmap_classifier.py
@@ -0,0 +1,72 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""This module classifies MemoryMap objects filtering their mmap entries.
+
+Two filters are currently available:
+ - 'mmap_file': 'foo.*\.so': matches any entry which mmap file is foo*.so.
+ - 'mmap_prot': 'rw.-': matches any entry which prot. flags is rw*-.
+"""
+
+import re
+
+from memory_inspector.classification import results
+from memory_inspector.classification import rules
+from memory_inspector.core import exceptions
+from memory_inspector.core import memory_map
+
+
+_RESULT_KEYS = ['total_rss', 'priv_clean_bytes', 'priv_dirty_bytes',
+ 'shared_clean_bytes', 'shared_dirty_bytes']
+
+
+def LoadRules(content):
+ """Loads and parses a mmap rule tree from a content (string).
+
+ Returns:
+ An instance of |rules.Rule|, which nodes are |_MmapRule| instances.
+ """
+ return rules.Load(content, _MmapRule)
+
+
+def Classify(mmap, rule_tree):
+ """Create aggregated results of memory maps using the provided rules.
+
+ Args:
+ mmap: the memory map dump being processed (a |memory_map.Map| instance).
+ rule_tree: the user-defined rules that define the filtering categories.
+
+ Returns:
+ An instance of |AggreatedResults|.
+ """
+ assert(isinstance(mmap, memory_map.Map))
+ assert(isinstance(rule_tree, rules.Rule))
+
+ res = results.AggreatedResults(rule_tree, _RESULT_KEYS)
+ for map_entry in mmap.entries:
+ values = [0, map_entry.priv_dirty_bytes, map_entry.priv_clean_bytes,
+ map_entry.shared_dirty_bytes, map_entry.shared_clean_bytes]
+ values[0] = values[1] + values[2] + values[3] + values[4]
+ res.AddToMatchingNodes(map_entry, values)
+ return res
+
+
+class _MmapRule(rules.Rule):
+ def __init__(self, name, filters):
+ super(_MmapRule, self).__init__(name)
+ try:
+ self._file_re = (
+ re.compile(filters['mmap_file']) if 'mmap_file' in filters else None)
+ self._prot_re = (
+ re.compile(filters['mmap_prot']) if 'mmap_prot' in filters else None)
+ except re.error, descr:
+ raise exceptions.MemoryInspectorException(
+ 'Regex parse error "%s" : %s' % (filters, descr))
+
+ def Match(self, map_entry):
+ if self._file_re and not self._file_re.search(map_entry.mapped_file):
+ return False
+ if self._prot_re and not self._prot_re.search(map_entry.prot_flags):
+ return False
+ return True
« no previous file with comments | « no previous file | tools/memory_inspector/memory_inspector/classification/mmap_classifier_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698