# 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)