Index: tools/telemetry/telemetry/page/page_filter.py |
diff --git a/tools/telemetry/telemetry/page/page_filter.py b/tools/telemetry/telemetry/page/page_filter.py |
index a1c213af8e6a16b71faf5726cffd0487cdd7b5e9..54a30ef8e11189d58f8d3806ee1e5b112d8a9cf9 100644 |
--- a/tools/telemetry/telemetry/page/page_filter.py |
+++ b/tools/telemetry/telemetry/page/page_filter.py |
@@ -4,6 +4,13 @@ |
import optparse |
import re |
+def HasLabelIn(obj, labels): |
+ for label in labels: |
+ if hasattr(obj, label) and getattr(obj, label): |
+ return True |
+ return False |
+ |
+ |
class PageFilter(object): |
"""Filters pages in the page set based on command line flags.""" |
@@ -24,16 +31,30 @@ class PageFilter(object): |
else: |
self._page_exclude_regex = None |
+ self._include_labels = None |
+ self._exclude_labels = None |
+ if options.page_label_filter: |
+ self._include_labels = options.page_label_filter.split(',') |
+ if options.page_label_filter_exclude: |
+ self._exclude_labels = options.page_label_filter_exclude.split(',') |
+ |
def IsSelected(self, page): |
+ # Exclude filters take priority |
+ if self._exclude_labels and HasLabelIn(page, self._exclude_labels): |
+ return False |
if self._page_exclude_regex and ( |
self._page_exclude_regex.search(page.url) or |
(page.name and self._page_exclude_regex.search(page.name))): |
return False |
+ # Apply all filters |
+ filter_result = True |
+ if self._include_labels: |
+ filter_result = filter_result and HasLabelIn(page, self._include_labels) |
if self._page_regex: |
- return ( |
+ filter_result = filter_result and ( |
self._page_regex.search(page.url) or |
(page.name and self._page_regex.search(page.name))) |
- return True |
+ return filter_result |
@staticmethod |
def AddCommandLineOptions(parser): |
@@ -42,4 +63,10 @@ class PageFilter(object): |
help='Use only pages whose URLs match the given filter regexp.') |
group.add_option('--page-filter-exclude', dest='page_filter_exclude', |
help='Exclude pages whose URLs match the given filter regexp.') |
+ group.add_option('--page-label-filter', dest='page_label_filter', |
+ help='Use only pages that have any of these labels') |
+ group.add_option('--page-label-filter-exclude', |
+ dest='page_label_filter_exclude', |
+ help='Exclude pages that have any of these labels') |
+ |
parser.add_option_group(group) |