| 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)
|
|
|