84 lines
3.0 KiB
Python
Executable File
84 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env vpython3
|
|
# Copyright 2022 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Provides a class for managing emulators."""
|
|
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
import time
|
|
|
|
from contextlib import AbstractContextManager
|
|
|
|
from common import catch_sigterm, register_log_args
|
|
from ffx_emulator import FfxEmulator
|
|
|
|
|
|
def register_emulator_args(parser: argparse.ArgumentParser,
|
|
enable_graphics: bool = False) -> None:
|
|
"""Register emulator specific arguments."""
|
|
femu_args = parser.add_argument_group('emulator',
|
|
'emulator startup arguments.')
|
|
femu_args.add_argument('--custom-image',
|
|
dest='product_bundle',
|
|
help='Backwards compatible flag that specifies an '
|
|
'image used for booting up the emulator.')
|
|
if enable_graphics:
|
|
femu_args.add_argument('--disable-graphics',
|
|
action='store_false',
|
|
dest='enable_graphics',
|
|
help='Start emulator in headless mode.')
|
|
else:
|
|
femu_args.add_argument('--enable-graphics',
|
|
action='store_true',
|
|
help='Start emulator with graphics.')
|
|
femu_args.add_argument(
|
|
'--hardware-gpu',
|
|
action='store_true',
|
|
help='Use host GPU hardware instead of Swiftshader.')
|
|
femu_args.add_argument(
|
|
'--product-bundle',
|
|
help='Specify a product bundle used for booting the '
|
|
'emulator. Defaults to the terminal product.')
|
|
femu_args.add_argument('--with-network',
|
|
action='store_true',
|
|
help='Run emulator with emulated nic via tun/tap.')
|
|
femu_args.add_argument('--everlasting',
|
|
action='store_true',
|
|
help='If the emulator should be long-living.')
|
|
|
|
|
|
def create_emulator_from_args(
|
|
args: argparse.Namespace) -> AbstractContextManager:
|
|
"""Helper method for initializing an FfxEmulator class with parsed
|
|
arguments."""
|
|
return FfxEmulator(args)
|
|
|
|
|
|
def main():
|
|
"""Stand-alone function for starting an emulator."""
|
|
|
|
catch_sigterm()
|
|
logging.basicConfig(level=logging.INFO)
|
|
parser = argparse.ArgumentParser()
|
|
register_emulator_args(parser, True)
|
|
register_log_args(parser)
|
|
args = parser.parse_args()
|
|
with create_emulator_from_args(args) as target_id:
|
|
logging.info(
|
|
'Emulator successfully started. You can now run Chrome '
|
|
'Fuchsia tests with --target-id=%s to target this emulator.',
|
|
target_id)
|
|
try:
|
|
while True:
|
|
time.sleep(10000)
|
|
except KeyboardInterrupt:
|
|
logging.info('Ctrl-C received; shutting down the emulator.')
|
|
except SystemExit:
|
|
logging.info('SIGTERM received; shutting down the emulator.')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|