summaryrefslogtreecommitdiff
path: root/chromium/third_party/catapult/tracing/tracing/results_renderer.py
blob: 3c0c53502b934240f12b69c0d17d139f819f7816 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Copyright 2016 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 json
import logging
import re

import tracing_project
from py_vulcanize import generate


_JSON_TAG = '<div id="value-set-json">%s</div>'


def ReadExistingResults(output_stream):
  output_stream.seek(0)
  results_html = output_stream.read()
  if not results_html:
    return []
  m = re.search(_JSON_TAG % '(.*?)', results_html, re.MULTILINE
                | re.DOTALL)
  if not m:
    logging.warn('Failed to extract previous results from HTML output')
    return []
  return json.loads(m.group(1))


def RenderHTMLView(values, output_stream, reset_results=False):
  if not reset_results:
    values += ReadExistingResults(output_stream)
  vulcanizer = tracing_project.TracingProject().CreateVulcanizer()
  load_sequence = vulcanizer.CalcLoadSequenceForModuleNames(
      ['tracing.results2_template'])
  html = generate.GenerateStandaloneHTMLAsString(load_sequence)
  html = html.replace(_JSON_TAG % '',
                      _JSON_TAG % json.dumps(values, separators=(',', ':')))
  output_stream.seek(0)
  output_stream.write(html)
  output_stream.truncate()