blob: 1426d34f325d2badd1e575d73367eae27dcbb3c5 [file] [log] [blame]
Eric Jeong59a56502022-01-31 19:00:37 +00001#!/usr/bin/env python3
2#
3# Copyright 2019, The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17import importlib
18import os
19import sys
20import tempfile
21from enum import Enum
22from typing import TextIO, List
23
24# local import
25DIR = os.path.abspath(os.path.dirname(__file__))
26sys.path.append(os.path.dirname(DIR))
27import lib.print_utils as print_utils
28
29# Type of compiler.
30class CompilerType(Enum):
31 HOST = 1 # iorap.cmd.compiler on host
32 DEVICE = 2 # adb shell iorap.cmd.compiler
33 RI = 3 # compiler.py
34
35def compile_perfetto_trace_ri(
36 argv: List[str],
37 compiler) -> TextIO:
38 print_utils.debug_print('Compile using RI compiler.')
39 compiler_trace_file = tempfile.NamedTemporaryFile()
40 argv.extend(['-o', compiler_trace_file.name])
41 print_utils.debug_print(argv)
42 compiler.main([''] + argv)
43 return compiler_trace_file
44
45def compile_perfetto_trace_device(inodes_path: str,
46 package: str,
47 activity: str,
48 compiler) -> TextIO:
49 print_utils.debug_print('Compile using on-device compiler.')
50 compiler_trace_file = tempfile.NamedTemporaryFile()
51 compiler.main(inodes_path, package, activity, compiler_trace_file.name)
52 return compiler_trace_file
53
54def compile(compiler_type: CompilerType,
55 inodes_path: str,
56 ri_compiler_argv,
57 package: str,
58 activity: str) -> TextIO:
59 if compiler_type == CompilerType.RI:
60 compiler = importlib.import_module('iorap.compiler_ri')
61 compiler_trace_file = compile_perfetto_trace_ri(ri_compiler_argv,
62 compiler)
63 return compiler_trace_file
64 if compiler_type == CompilerType.DEVICE:
65 compiler = importlib.import_module('iorap.compiler_device')
66 compiler_trace_file = compile_perfetto_trace_device(inodes_path,
67 package,
68 activity,
69 compiler)
70 return compiler_trace_file
71
72 # Should not arrive here.
73 raise ValueError('Unknown compiler type')