You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.6 KiB

#!/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')