chromium/tools/tracing/display_in_browser.py

# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Displays a trace file in a browser.
"""

import logging
import os
import subprocess
import sys
import webbrowser

import flag_utils


def DisplayInBrowser(trace_file, trace_format='proto'):
  """Displays trace in browser.

  Args:
    trace_file: Saved trace filename.
    trace_format: Storage format of trace file.
  """
  if trace_format == 'json':
    raise Exception('The --view option and --trace_format=json are not'
                    'supported together')
  if trace_format == 'proto':
    flag_utils.GetTracingLogger().info('Opening trace in browser')
    open_trace_ui_path = os.path.join(
        os.path.dirname(__file__), os.pardir, os.pardir,
        'third_party/perfetto/tools/open_trace_in_ui')
    trace_file_path = os.path.abspath(trace_file)
    cmd = [open_trace_ui_path, '-i', trace_file_path]
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stderr = p.communicate()[1]
    if p.returncode != 0:
      raise RuntimeError('failed: ' + stderr)
  elif sys.platform == 'darwin':
    os.system('/usr/bin/open %s' % os.path.abspath(trace_file))
  else:
    webbrowser.open(trace_file)