#!/usr/bin/env python3 # # Copyright 2019, The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import importlib import os import sys import tempfile from enum import Enum from typing import TextIO, List # local import DIR = os.path.abspath(os.path.dirname(__file__)) sys.path.append(os.path.dirname(DIR)) import lib.print_utils as print_utils # Type of compiler. class CompilerType(Enum): HOST = 1 # iorap.cmd.compiler on host DEVICE = 2 # adb shell iorap.cmd.compiler RI = 3 # compiler.py def compile_perfetto_trace_ri( argv: List[str], compiler) -> TextIO: print_utils.debug_print('Compile using RI compiler.') compiler_trace_file = tempfile.NamedTemporaryFile() argv.extend(['-o', compiler_trace_file.name]) print_utils.debug_print(argv) compiler.main([''] + argv) return compiler_trace_file def compile_perfetto_trace_device(inodes_path: str, package: str, activity: str, compiler) -> TextIO: print_utils.debug_print('Compile using on-device compiler.') compiler_trace_file = tempfile.NamedTemporaryFile() compiler.main(inodes_path, package, activity, compiler_trace_file.name) return compiler_trace_file def compile(compiler_type: CompilerType, inodes_path: str, ri_compiler_argv, package: str, activity: str) -> TextIO: if compiler_type == CompilerType.RI: compiler = importlib.import_module('iorap.compiler_ri') compiler_trace_file = compile_perfetto_trace_ri(ri_compiler_argv, compiler) return compiler_trace_file if compiler_type == CompilerType.DEVICE: compiler = importlib.import_module('iorap.compiler_device') compiler_trace_file = compile_perfetto_trace_device(inodes_path, package, activity, compiler) return compiler_trace_file # Should not arrive here. raise ValueError('Unknown compiler type')