| # 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) |