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

Unified Diff: telemetry/telemetry/core/discover.py

Issue 2162963002: [polymer] Merge of master into polymer10-migration (Closed) Base URL: git@github.com:catapult-project/catapult.git@polymer10-migration
Patch Set: Merge polymer10-migration int polymer10-merge Created 4 years, 5 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 | « telemetry/telemetry/core/cros_interface_unittest.py ('k') | telemetry/telemetry/core/exceptions.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: telemetry/telemetry/core/discover.py
diff --git a/telemetry/telemetry/core/discover.py b/telemetry/telemetry/core/discover.py
index 4ea866655c9ddde1168348fb716707d4f80f760d..7eb667c0baf6715ace7ca4e4c8415f1c3615d581 100644
--- a/telemetry/telemetry/core/discover.py
+++ b/telemetry/telemetry/core/discover.py
@@ -62,6 +62,15 @@ def DiscoverModules(start_dir, top_level_dir, pattern='*'):
return modules
+def AssertNoKeyConflicts(classes_by_key_1, classes_by_key_2):
+ for k in classes_by_key_1:
+ if k in classes_by_key_2:
+ assert classes_by_key_1[k] is classes_by_key_2[k], (
+ 'Found conflicting classes for the same key: '
+ 'key=%s, class_1=%s, class_2=%s' % (
+ k, classes_by_key_1[k], classes_by_key_2[k]))
+
+
# TODO(dtu): Normalize all discoverable classes to have corresponding module
# and class names, then always index by class name.
def DiscoverClasses(start_dir,
@@ -92,10 +101,20 @@ def DiscoverClasses(start_dir,
for module in modules:
new_classes = DiscoverClassesInModule(
module, base_class, index_by_class_name, directly_constructable)
+ # TODO(nednguyen): we should remove index_by_class_name once
+ # benchmark_smoke_unittest in chromium/src/tools/perf no longer relied
+ # naming collisions to reduce the number of smoked benchmark tests.
+ # crbug.com/548652
+ if index_by_class_name:
+ AssertNoKeyConflicts(classes, new_classes)
classes = dict(classes.items() + new_classes.items())
return classes
+# TODO(nednguyen): we should remove index_by_class_name once
+# benchmark_smoke_unittest in chromium/src/tools/perf no longer relied
+# naming collisions to reduce the number of smoked benchmark tests.
+# crbug.com/548652
def DiscoverClassesInModule(module,
base_class,
index_by_class_name=False,
@@ -138,7 +157,12 @@ def DiscoverClassesInModule(module,
key_name = module.__name__.split('.')[-1]
if (not directly_constructable or
classes_module.IsDirectlyConstructable(obj)):
- classes[key_name] = obj
+ if key_name in classes and index_by_class_name:
+ assert classes[key_name] is obj, (
+ 'Duplicate key_name with different objs detected: '
+ 'key=%s, obj1=%s, obj2=%s' % (key_name, classes[key_name], obj))
+ else:
+ classes[key_name] = obj
return classes
« no previous file with comments | « telemetry/telemetry/core/cros_interface_unittest.py ('k') | telemetry/telemetry/core/exceptions.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698