# 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
from contextlib import AbstractContextManager
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(
'--product',
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.')
femu_args.add_argument(
'--device-spec',
help='Configure the virtual device to use. They are usually defined in '
'the product-bundle/virtual_devices/manifest.json. If this flag is not '
'provided or is an empty string, ffx emu will decide the recommended '
'spec.')
def create_emulator_from_args(
args: argparse.Namespace) -> AbstractContextManager:
"""Helper method for initializing an FfxEmulator class with parsed
arguments."""
return FfxEmulator(args)