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