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