Index: tools/telemetry/telemetry/core/platform/tracing_category_filter.py |
diff --git a/tools/telemetry/telemetry/core/platform/tracing_category_filter.py b/tools/telemetry/telemetry/core/platform/tracing_category_filter.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..da83643aab52cba1dbcc55f83a0509719fbfa3ec |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/platform/tracing_category_filter.py |
@@ -0,0 +1,75 @@ |
+# 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. |
+ |
+class TracingCategoryFilter(object): |
+ """A set of included and excluded categories that should be traced. |
+ |
+ The TraceCategoryFilter allows fine tuning of what data is traced. Basic |
+ choice of which tracers to use is done by TracingOptions. |
+ """ |
+ def __init__(self, filter_string=None): |
+ self._included_categories = [] |
+ self._excluded_categories = [] |
+ self._disabled_by_default_categories = [] |
+ self._delays = [] |
+ |
+ if filter_string == None: |
+ return |
+ |
+ for category in filter_string.split(','): |
+ if category == '': |
+ continue |
+ |
+ if category.startswith('DELAY('): |
+ self._delays.append(category) |
+ continue |
+ |
+ if category[0] == '-': |
+ self._excluded_categories.append(category[1:]) |
+ continue |
+ |
+ if category.startswith('disabled-by-default-'): |
+ self._disabled_by_default_categories.append(category) |
+ continue |
+ |
+ self.included_categories.append(category) |
+ |
+ @property |
+ def included_categories(self): |
+ return self._included_categories |
+ |
+ @property |
+ def excluded_categories(self): |
+ return self._excluded_categories |
+ |
+ @property |
+ def disabled_by_default_categories(self): |
+ return self._disabled_by_default_categories |
+ |
+ @property |
+ def delays(self): |
+ return self._delays |
+ |
+ @property |
+ def filter_string(self): |
+ # Note: This outputs fields in an order that intentionally matches |
+ # trace_event_impl's CategoryFilter string order. |
+ categories = [] |
+ categories += self._included_categories |
+ categories += self._disabled_by_default_categories |
+ categories += ['-%s' % x for x in self._excluded_categories] |
+ categories += self._delays |
+ return ','.join(categories) |
+ |
+ def AddIncludedCategory(self, category_glob): |
+ """Explicitly enables anything matching category_glob.""" |
+ assert not category_glob.startswith('disabled-by-default-') |
+ if category_glob not in self._included_categories: |
+ self._included_categories.append(category_glob) |
+ |
+ def AddExcludedCategory(self, category_glob): |
+ """Explicitly disables anything matching category_glob.""" |
+ assert not category_glob.startswith('disabled-by-default-') |
+ if category_glob not in self._excluded_categories: |
+ self._excluded_categories.append(category_glob) |