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
74 lines
2.6 KiB
4 months ago
|
#!/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')
|