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

Side by Side Diff: tools/telemetry/telemetry/value/chart_json.py

Issue 439613003: Add Chart JSON processing to Telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address most of Nat's comments Created 6 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from telemetry.value import summary as summary_module
6
7 def ResultsAsChartDict(page_specific_values, summary_values, metadata):
chrishenry - DO NOT USE 2014/08/13 05:12:01 s/metadata/benchmark_metadata/ (metadata is too ge
chrishenry - DO NOT USE 2014/08/13 05:12:01 This isn't really a "value" but more a summary of
chrishenry - DO NOT USE 2014/08/13 05:12:01 Why does this take page_specific_values and summar
eakuefner 2014/08/15 22:47:31 You're right that there isn't a really clear conce
eakuefner 2014/08/15 22:47:32 We leave that up to the caller; this makes testing
eakuefner 2014/08/15 22:47:32 Done.
chrishenry 2014/08/19 17:36:21 If you need a unit test equivalent, please create
eakuefner 2014/08/21 01:11:17 Eventually we want to make Chart JSON actually a t
8 """Produces a dict for serialization to Chart JSON format from raw values.
9
10 Chart JSON is a transformation of the basic Telemetry JSON format that
chrishenry - DO NOT USE 2014/08/13 05:12:02 This should doc the schema as well or point to doc
eakuefner 2014/08/15 22:47:32 Done.
11 removes the page map, summarizes the raw values, and organizes the results
12 by chart and trace name. This function takes the key pieces of data needed to
13 perform this transformation (namely, lists of values and a benchmark metadata
14 object) and processes them into a dict which can be serialized using the json
15 module.
16
17 page_specific_values: list of all values with an associated page
18 summary_values: list of all values without an associated page
19 metadata: a benchmark.BenchmarkMetadata object
20 """
nednguyen 2014/08/13 02:17:03 Assert summary_values contains "all values without
eakuefner 2014/08/15 22:47:31 We want this invariant to be enforced higher up th
21 # had_failures = len(page_test_results.failures) > 0
nduca 2014/08/13 00:55:39 funky?
eakuefner 2014/08/13 01:03:43 Will decide on failure handling best effort & fix
22 had_failures = False
23 summary = summary_module.Summary(page_specific_values, had_failures)
24 charts = {}
25
26 _HandleComputedValues(summary, charts)
27 _HandleSummaryValues(summary_values, charts)
28
29 result_dict = {
30 'format_version': '0.1',
31 'test_name': metadata.name,
32 'charts': charts
33 }
34
35 return result_dict
36
37 def _HandleComputedValues(summary, charts):
chrishenry - DO NOT USE 2014/08/13 05:12:01 Best if we can have this yield chart_name, chart_c
eakuefner 2014/08/15 22:47:32 This style matches the way we are handling results
38 """Organizes computed per-page and summary values into a charts dict.
39
40 summary: summary.Summary object containing computed values
41 charts: dict into which chartified values will be inserted
42 """
43
44 for value in summary.interleaved_computed_per_page_values_and_summaries:
45 if value.page:
46 chart_name, trace_name = (
47 value.GetChartAndTraceNameForPerPageResult())
48 else:
49 chart_name, trace_name = (
50 value.GetChartAndTraceNameForComputedSummaryResult(
51 None))
chrishenry - DO NOT USE 2014/08/13 05:12:01 nit: can fit in 80-col?
eakuefner 2014/08/15 22:47:31 Done.
52 if chart_name == trace_name:
53 if chart_name in charts:
54 assert 'summary' not in charts[chart_name]
55 trace_name = 'summary'
56
57 if chart_name in charts:
58 charts[chart_name]['traces'][trace_name] = value
chrishenry - DO NOT USE 2014/08/13 05:12:01 A little odd, can you document this briefly? Do al
eakuefner 2014/08/15 22:47:31 Added a couple comments to attempt to explain -- t
59 else:
60 charts[chart_name] = {
61 'traces': {trace_name: value.AsDict()}
62 }
63
64 def _HandleSummaryValues(summary_values, charts):
65 """Organizes summary values into a charts dict.
66
67 While summary values can be created by a Summary object, they can also be
68 added directly during the course of a page run. Those values are not subject
69 to summarization and thus we handle them directly in this routine.
70
71 page_test_results: a PageTestResults object containing overall values
chrishenry - DO NOT USE 2014/08/13 05:12:01 Outdated doc.
eakuefner 2014/08/15 22:47:32 Done.
72 charts: dict into which chartified values will be inserted
73 """
74
75 # If any pages failed, we want to invalidate the overall results
76 # TODO(eakuefner): figure out how to handle this correctly
77 had_failures = False
78 if had_failures:
79 return
80
81 for value in summary_values:
82 chart_name, trace_name = (
83 value.GetChartAndTraceNameForComputedSummaryResult(
84 None))
85 if chart_name == trace_name:
86 trace_name = 'summary'
87 if chart_name in charts:
88 assert trace_name not in charts[chart_name]
89 charts[chart_name][trace_name] = value
chrishenry - DO NOT USE 2014/08/13 05:12:01 value.AsDict()?
eakuefner 2014/08/15 22:47:32 Done.
90 else:
91 charts[chart_name] = {
92 'units': value.units,
93 'traces': {trace_name: value.AsDict()}
94 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698