summaryrefslogtreecommitdiff
path: root/startop/scripts/iorap/compiler.py
blob: 1426d34f325d2badd1e575d73367eae27dcbb3c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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')