2 class AnalysisResults {
5 this._metricToBuildMap = {};
7 this._lazilyComputedTopLevelTests = new LazilyEvaluatedFunction(this._computedTopLevelTests.bind(this));
10 findResult(buildId, metricId)
12 const map = this._metricToBuildMap[metricId];
18 topLevelTestsForTestGroup(testGroup)
20 return this._lazilyComputedTopLevelTests.evaluate(testGroup, ...this._metricIds);
23 _computedTopLevelTests(testGroup, ...metricIds)
25 const metrics = metricIds.map((metricId) => Metric.findById(metricId));
26 const tests = new Set(metrics.map((metric) => metric.test()));
27 const topLevelMetrics = metrics.filter((metric) => !tests.has(metric.test().parentTest()));
29 const topLevelTests = new Set;
30 for (const request of testGroup.buildRequests()) {
31 for (const metric of topLevelMetrics) {
32 if (this.findResult(request.buildId(), metric.id()))
33 topLevelTests.add(metric.test());
41 console.assert(test instanceof Test);
42 for (const metric of test.metrics()) {
43 if (metric.id() in this._metricToBuildMap)
49 _computeHighestTests(metricIds)
51 const testsInResults = new Set(metricIds.map((metricId) => Metric.findById(metricId).test()));
52 return [...testsInResults].filter((test) => !testsInResults.has(test.parentTest()));
57 console.assert(measurement.configType == 'current');
58 const metricId = measurement.metricId;
59 if (!(metricId in this._metricToBuildMap)) {
60 this._metricToBuildMap[metricId] = {};
61 this._metricIds = Object.keys(this._metricToBuildMap);
63 const map = this._metricToBuildMap[metricId];
64 console.assert(!map[measurement.buildId]);
65 map[measurement.buildId] = measurement;
68 commitSetForRequest(buildRequest)
70 if (!this._metricIds.length)
72 const result = this.findResult(buildRequest.buildId(), this._metricIds[0]);
75 return result.commitSet();
80 console.assert(metric instanceof Metric);
81 return new AnalysisResultsView(this, metric);
86 taskId = parseInt(taskId);
87 return RemoteAPI.getJSONWithStatus(`../api/measurement-set?analysisTask=${taskId}`).then(function (response) {
89 Instrumentation.startMeasuringTime('AnalysisResults', 'fetch');
91 const adaptor = new MeasurementAdaptor(response['formatMap']);
92 const results = new AnalysisResults;
93 for (const rawMeasurement of response['measurements'])
94 results.add(adaptor.applyToAnalysisResults(rawMeasurement));
96 Instrumentation.endMeasuringTime('AnalysisResults', 'fetch');
103 class AnalysisResultsView {
104 constructor(analysisResults, metric)
106 console.assert(analysisResults instanceof AnalysisResults);
107 console.assert(metric instanceof Metric);
108 this._results = analysisResults;
109 this._metric = metric;
112 metric() { return this._metric; }
114 resultForRequest(buildRequest)
116 return this._results.findResult(buildRequest.buildId(), this._metric.id());