| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| <link rel="import" href="/tracing/base/iteration_helpers.html"> |
| <link rel="import" href="/perf_insights/value/value.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tr.exportTo('pi.r', function() { |
| function Results() { |
| this.allValues = []; |
| this.runIdsThatHaveFailures_ = {}; |
| } |
| |
| Results.fromDict = function(dict) { |
| if (dict.runs === undefined) |
| throw new Error('Expected: runInfo'); |
| if (dict.values === undefined) |
| throw new Error('Expected: runInfo'); |
| |
| var runInfosById = tr.b.mapItems(dict.runs, function(runId, dict) { |
| return pi.v.RunInfo.fromDict(dict); |
| }); |
| |
| var results = new Results(); |
| dict.values.forEach(function(valueDict) { |
| var runInfo = runInfosById[valueDict.run_id]; |
| if (runInfo === undefined) { |
| debugger; |
| throw new Error('runInfo not found'); |
| } |
| var value = pi.v.Value.fromDict(runInfo, valueDict); |
| results.addValue(value); |
| }); |
| return results; |
| } |
| |
| Results.prototype = { |
| willRun: function(runInfo) { |
| }, |
| |
| addValue: function(value) { |
| if (value instanceof pi.v.FailureValue) |
| this.runIdsThatHaveFailures_[value.runInfo.runId] = true; |
| this.allValues.push(value); |
| }, |
| |
| didRun: function(runInfo) { |
| }, |
| |
| didFinishAllRuns: function() { |
| }, |
| |
| get hadFailures() { |
| return this.failureValues.length > 0; |
| }, |
| |
| get failureValues() { |
| return this.allValues.filter(function(x) { |
| return x instanceof pi.v.FailureValue; |
| }); |
| }, |
| |
| get failedRunInfos() { |
| var failedRunInfos = []; |
| var hasAddedRunInfo = {}; |
| this.failureValues.forEach(function(v) { |
| if (hasAddedRunInfo[v.runInfo.runId]) |
| return; |
| hasAddedRunInfo[v.runInfo.runId] = true; |
| failedRunInfos.push(v.runInfo); |
| }); |
| return failedRunInfos; |
| }, |
| |
| get allRunInfos() { |
| var allRunInfos = []; |
| var hasAddedRunInfo = {}; |
| this.allValues.forEach(function(v) { |
| if (hasAddedRunInfo[v.runInfo.runId]) |
| return; |
| hasAddedRunInfo[v.runInfo.runId] = true; |
| allRunInfos.push(v.runInfo); |
| }); |
| return allRunInfos; |
| }, |
| |
| doesRunContainFailure: function(runInfo) { |
| return this.runIdsThatHaveFailures_[runInfo.runId] === true; |
| }, |
| |
| get allValuesFromFailureFreeRuns() { |
| return this.allValues.filter(function(x) { |
| if (this.doesRunContainFailure(x.runInfo)) |
| return false; |
| return true; |
| }, this); |
| }, |
| |
| getValuesForRunInfo: function(runInfo) { |
| return this.allValues.filter(function(value) { |
| return value.runInfo === runInfo; |
| }); |
| }, |
| |
| getValuesFromFailureFreeRunsNamed: function(name) { |
| return this.allValuesFromFailureFreeRuns.filter(function(value) { |
| return value.name === name; |
| }); |
| } |
| }; |
| |
| return { |
| Results: Results |
| }; |
| }); |
| </script> |