| Index: tools/telemetry/telemetry/web_components/viewer.py
|
| diff --git a/tools/telemetry/telemetry/web_components/viewer.py b/tools/telemetry/telemetry/web_components/viewer.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..001ad56cc2353530badc6261208bc85a221b2d75
|
| --- /dev/null
|
| +++ b/tools/telemetry/telemetry/web_components/viewer.py
|
| @@ -0,0 +1,63 @@
|
| +# Copyright (c) 2014 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.
|
| +
|
| +import os
|
| +import string
|
| +
|
| +from telemetry.web_components import web_components_project
|
| +from tvcm import generate
|
| +
|
| +
|
| +class Viewer(object):
|
| + """An HTML-based viewer of data, built out of telemetry components.
|
| +
|
| + A viewer is used to visualize complex data that is produced from a telemtry
|
| + benchmark. A viewer is backed by a .js file that contains a telemetry
|
| + component. Python-side, it knows enough to instantiate that component and pass
|
| + it its data. Viewers are typically written to HTML files in order to be
|
| + displayed.
|
| +
|
| + Python-side, a viewer class can be anything, as long as it implements the
|
| + WriteDataToFileAsJSON. The data written here is passed to the
|
| + data_binding_property of the JS-side class specified during the viewer's
|
| + construction.
|
| +
|
| + """
|
| + def __init__(self, tvcm_module_name, js_class_name, data_binding_property):
|
| + self._tvcm_module_name = tvcm_module_name
|
| + self._js_class_name = js_class_name
|
| + self._data_binding_property = data_binding_property
|
| +
|
| + def WriteDataToFileAsJson(self, f):
|
| + raise NotImplementedError()
|
| +
|
| + def WriteViewerToFile(self, f):
|
| + project = web_components_project.WebComponentsProject()
|
| + load_sequence = project.CalcLoadSequenceForModuleNames(
|
| + [self._tvcm_module_name])
|
| +
|
| + with open(os.path.join(os.path.dirname(__file__),
|
| + 'viewer_bootstrap.js')) as bfile:
|
| + bootstrap_js_template = string.Template(bfile.read())
|
| + bootstrap_js = bootstrap_js_template.substitute(
|
| + js_class_name=self._js_class_name,
|
| + data_binding_property=self._data_binding_property)
|
| +
|
| + bootstrap_script = generate.ExtraScript(text_content=bootstrap_js)
|
| +
|
| + class ViewerDataScript(generate.ExtraScript):
|
| + def __init__(self, results_component):
|
| + super(ViewerDataScript, self).__init__()
|
| + self._results_component = results_component
|
| +
|
| + def WriteToFile(self, output_file):
|
| + output_file.write('<script id="viewer-data" type="application/json">\n')
|
| + self._results_component.WriteDataToFileAsJson(output_file)
|
| + output_file.write('</script>\n')
|
| +
|
| +
|
| + generate.GenerateStandaloneHTMLToFile(
|
| + f, load_sequence,
|
| + title='Telemetry results',
|
| + extra_scripts=[bootstrap_script, ViewerDataScript(self)])
|
|
|