| Index: scripts/slave/recipe_modules/swarming/api.py | 
| diff --git a/scripts/slave/recipe_modules/swarming/api.py b/scripts/slave/recipe_modules/swarming/api.py | 
| index da5afa4fa99aee6f42037ffb3c88659aba0d93e0..87eb67ed3700dcf251bd89f2aca1ab1cbb7370af 100644 | 
| --- a/scripts/slave/recipe_modules/swarming/api.py | 
| +++ b/scripts/slave/recipe_modules/swarming/api.py | 
| @@ -8,6 +8,7 @@ import functools | 
|  | 
| from recipe_engine import recipe_api | 
|  | 
| +from . import results_merger | 
|  | 
| # Minimally supported version of swarming.py script (reported by --version). | 
| MINIMAL_SWARMING_VERSION = (0, 8, 6) | 
| @@ -730,7 +731,6 @@ class SwarmingApi(recipe_api.RecipeApi): | 
| link_name = 'shard #%d isolated out' % index | 
| p.links[link_name] = outputs_ref['view_url'] | 
|  | 
| - | 
| def _merge_isolated_script_chartjson_ouput_shards(self, task, step_result): | 
| # Taken from third_party/catapult/telemetry/telemetry/internal/results/ | 
| # chart_json_output_formatter.py, the json entries are as follows: | 
| @@ -770,23 +770,8 @@ class SwarmingApi(recipe_api.RecipeApi): | 
| merged_results[key][add_key] = chartjson_results_json[key][add_key] | 
| return merged_results | 
|  | 
| - | 
| def _merge_isolated_script_shards(self, task, step_result): | 
| -    # This code is unfortunately specialized to the "simplified" | 
| -    # JSON format that used to be the standard for recipes. The | 
| -    # isolated scripts should be changed to use the now-standard | 
| -    # Chromium JSON test results format: | 
| -    # https://www.chromium.org/developers/the-json-test-results-format | 
| -    # . Note that gtests, above, don't seem to conform to this | 
| -    # format yet, so it didn't seem like a good prerequisite to | 
| -    # switch the isolated tests over when adding sharding support. | 
| -    # | 
| -    # These are the only keys we pay attention to in the output JSON. | 
| -    merged_results = { | 
| -      'successes': [], | 
| -      'failures': [], | 
| -      'valid': True, | 
| -    } | 
| +    shard_results_list = [] | 
| for i in xrange(task.shards): | 
| path = self.m.path.join(str(i), 'output.json') | 
| if path not in step_result.raw_io.output_dir: | 
| @@ -794,19 +779,10 @@ class SwarmingApi(recipe_api.RecipeApi): | 
| results_raw = step_result.raw_io.output_dir[path] | 
| try: | 
| results_json = self.m.json.loads(results_raw) | 
| +        shard_results_list.append(results_json) | 
| except Exception as e: | 
| raise Exception('error decoding JSON results from shard #%d' % i) | 
| -      for key in merged_results: | 
| -        if key in results_json: | 
| -          if isinstance(merged_results[key], list): | 
| -            merged_results[key].extend(results_json[key]) | 
| -          elif isinstance(merged_results[key], bool): | 
| -            merged_results[key] = merged_results[key] and results_json[key] | 
| -          else: | 
| -            raise recipe_api.InfraFailure( | 
| -              'Unknown key type ' + type(merged_results[key]) + | 
| -              ' when handling key ' + key + '.')  # pragma: no cover | 
| -    return merged_results | 
| +    return results_merger.merge_test_results(shard_results_list) | 
|  | 
| def _isolated_script_collect_step(self, task, **kwargs): | 
| step_test_data = kwargs.pop('step_test_data', None) | 
|  |