def _PrepareQemuArgs()

in tools/android/emulator/emulated_device.py [0:0]


  def _PrepareQemuArgs(self, binary, net_type, window_scale, with_audio,
                       with_boot_anim):
    """Prepare args for calling emulator."""
    self._emulator_start_args = [
        binary,
        '-ports', '%s,%s' % (self.emulator_telnet_port,
                             self.emulator_adb_port),
        '-skin', self._metadata_pb.skin,
        '-timezone', 'America/Los_Angeles',
        '-cache', 'cache.img',  # only respected via cmdline flag.
        '-memory', str(self._MemoryMb()),
        '-sdcard', 'sdcard.img',
        '-ramdisk', 'ramdisk.img',
        '-partition-size', '2047',
        '-no-snapshot-save',
        '-verbose',
        '-unix-pipe', 'sockets/qemu.mgmt',
        '-unix-pipe', 'sockets/device-forward-server',
        '-unix-pipe', 'sockets/tar-pull-server',
        '-unix-pipe', 'sockets/exec-server',
        '-unix-pipe', 'sockets/tar-push-server',
        '-unix-pipe', 'sockets/h2o',
        '-writable-system',
        '-show-kernel']

    if (self._metadata_pb.emulator_type ==
        emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU2):
      self._emulator_start_args.extend(['-engine', 'qemu2',
                                        '-kernel', self._KernelFileName()])
      self._emulator_start_args.extend(['-system', 'system.img'])

    if self._metadata_pb.emulator_architecture == 'x86':
      self._emulator_start_args.extend(['-feature', 'AllowSnapshotMigration'])
      self._emulator_start_args.extend(['-feature', '-GLDMA'])
      self._emulator_start_args.extend(['-feature', '-OnDemandSnapshotLoad'])

    if os.path.exists(self._VendorFile()):
      self._emulator_start_args.extend(['-vendor', 'vendor.img'])

    if os.path.exists(self._UserdataQemuFile()):
      self._emulator_start_args.extend(['-data', 'userdata-qemu.img'])

    if os.path.exists(self._EncryptionKeyImageFile()):
      self._emulator_start_args.extend(['-encryption-key', 'encryptionkey.img'])

    if self._display:
      open_gl_driver = self._display.open_gl_driver
    else:
      open_gl_driver = self.BestOpenGL()
      self._emulator_start_args.append('-no-window')

    # Most of our open_gl_driver options map directly to a -gpu option of the
    # emulator, but no_open_gl is weird -- the emulator has no such option, and
    # all Android devices have some form of OpenGL support. To preserve old
    # behavior, we map it to -gpu off.
    gpu = 'off' if open_gl_driver == NO_OPEN_GL else open_gl_driver
    self._emulator_start_args.extend(['-gpu', gpu])

    if (not self._enable_gps and
        self._metadata_pb.emulator_type ==
        emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU):
      self._emulator_start_args.extend(['-gps', 'null'])

    if not with_audio:
      if (self._metadata_pb.emulator_type ==
          emulator_meta_data_pb2.EmulatorMetaDataPb.QEMU2):
        self._emulator_start_args.extend(['-no-audio'])
      else:
        self._emulator_start_args.extend(['-audio', 'none'])

    if not with_boot_anim:
      self._emulator_start_args.append('-no-boot-anim')

    se_linux_mode = [prop for prop in self._metadata_pb.boot_property
                     if prop.name == 'ro.initial_se_linux_mode']

    if se_linux_mode:
      assert len(se_linux_mode) == 1, 'Too many values: %s' % se_linux_mode
      se_linux_mode = se_linux_mode[0].value
      valid_modes = ['disabled', 'permissive']
      assert se_linux_mode in valid_modes, ('%s invalid. Only options are: %s'
                                            '. If not specified and API > 19 '
                                            'defaults to enforcing.' % (
                                                se_linux_mode, valid_modes))
      self._emulator_start_args.extend(['-selinux', se_linux_mode])

    if window_scale:
      self._emulator_start_args.extend(
          ['-scale', str(window_scale / 100.0)])
    if not window_scale or window_scale == 100:
      self._emulator_start_args.append('-fixed-scale')

    if net_type is None or net_type == 'off':
      net_delay = self._metadata_pb.net_delay
      net_speed = self._metadata_pb.net_speed
    else:
      net_delay = NET_TYPE_TO_DELAY[net_type]
      net_speed = NET_TYPE_TO_SPEED[net_type]
    self._emulator_start_args.extend(
        ['-netdelay', net_delay, '-netspeed', net_speed])

    avd_name = self._MakeAvd()
    self._emulator_start_args.extend(['-avd', avd_name])

    if self._sim_access_rules_file:
      self._emulator_start_args.extend(
          ['-sim-access-rules-file', self._sim_access_rules_file])

    if self._phone_number:
      self._emulator_start_args.extend(['-phone-number', self._phone_number])

    if (self._metadata_pb.qemu_arg or
        self._qemu_gdb_port or
        self._enable_single_step or
        net_type == 'off' or
        not self._enable_g3_monitor):
      self._emulator_start_args.append('-qemu')

      if self._metadata_pb.qemu_arg:
        self._emulator_start_args.extend(self._metadata_pb.qemu_arg)
        self._emulator_start_args.extend(
            ['-L', self.android_platform.MakeBiosDir(self._TempDir('bios'))])

      if self._qemu_gdb_port:
        self._emulator_start_args.extend(['-gdb',
                                          'tcp::%d' % self._qemu_gdb_port])
      if self._enable_single_step:
        self._emulator_start_args.append('-S')

      if net_type == 'off':
        # TODO: fix this for IPV6
        # We always want to allow tcp connections to host for testing purpose.
        # BTW, there is a bug in emulator, so we have to use 1-65534 instead of
        # 1-65535.
        self._emulator_start_args.extend(['-drop-tcp', '-drop-udp',
                                          '-allow-tcp', '10.0.2.2:[1-65534]'])

      # init process of Android will set a system property begin with
      # 'ro.kernel' for every key=value pair added here.
      # See:
      # https://android.googlesource.com/platform/system/core/+/gingerbread/init/init.c#424
      kernel_args = []

      # g3_monitor is not supported in mini_boot mode.
      if self._mini_boot or not self._enable_g3_monitor:
        kernel_args.append('g3_monitor=0')

      kernel_args.append('enable_test_harness=%d' %
                         (1 if FLAGS.enable_test_harness else 0))
      if kernel_args:
        self._emulator_start_args.extend(['-append', ' '.join(kernel_args)])