1#------------------------------------------------------------------------------- 2# Advanced emulator features 3#------------------------------------------------------------------------------- 4 5# GLPipeChecksum---------------------------------------------------------------- 6# For every GL call that transfers between host and guest, GLPipeChecksum = on 7# will compute a checksum consisting of some function of the actual bit vector 8# corresponding to the GL command, verifying that the same checksum shows up 9# on both the host and guest. Violations of the checksum (mismatches) result 10# in an abort() and crash report being sent. 11# 12# Currently, the checksum is mainly making sure that the command itself and all 13# arrays passed through the pipe are of proper length. 14GLPipeChecksum = on 15# ------------------------------------------------------------------------------ 16 17# GrallocSync------------------------------------------------------------------- 18# Most apps that display images do so through OpenGL, but there are some apps 19# that write directly to gralloc color buffers. In our goldfish-driver gralloc 20# implementation, which represents gralloc color buffers as host OpenGL color 21# buffers. 22# 23# For example, in the camera app, the emulated webcam driver will pull frames 24# to a gralloc color buffer directly, and then in another thread or process, 25# the color buffer representing the camera frame preview could be posted 26# onscreen. 27# 28# These operations aren't guaranteed to have their order preserved when arriving 29# from the guest, and if executed on the host in the wrong order, we could 30# end up with out of order webcam frames, for instance. 31# 32# GrallocSync = on adds synchronization to the host for this use case where apps 33# directly write to gralloc color buffers and then post them. 34# Gralloc sync disabled for now because it is making CTS sad. 35GrallocSync = off 36# ------------------------------------------------------------------------------ 37 38# GLAsyncSwap------------------------------------------------------------------- 39# OpenGL apps in the guest present their contents indirectly through 40# SurfaceFlinger. The goldfish driver's implementation of eglSwapBuffers is 41# based on queuing the finished frame (buffer) to SurfaceFlinger. 42# SurfaceFlinger then acquires that finished buffer from the OpenGL app, 43# does the actual posting to the display (which may involve a call in turn 44# to eglSwapBuffers, esp. if we are not using hardware composer), 45# and releases the buffer, allowing the OpenGL app to dequeue a fresh 46# buffer for whatever to draw next. 47# 48# The problem is that when we are using host GPU, the rubber meets the road # 49# in the host not the guest (what the user sees is not due to any concrete 50# action inside the guest, but due to the host GPU communicating with the host 51# display), so it's not always clear what a "finished frame" means. In 52# particular, the frame is not necessarily finished when the buffer is queued 53# in the guest, depending on host driver quirks. So, posting unfinished or 54# even older buffers to SurfaceFlinger will result in out of order frames. 55# 56# GLAsyncSwap = off pretends this issue doesn't exist and it's up to the host 57# driver to properly synchronize upon calling rcFlushWindowColorBuffer. 58# GLAsyncSwap = on uses the host GL driver's fence commands and fence fd's in 59# the guest in order to have explicit signals of buffer swaps complete. This 60# preserves frame ordering at a slight performance cost, but the cost is less 61# than that of other solutions like calling glFinish() on the host. 62GLAsyncSwap = on 63# ------------------------------------------------------------------------------ 64 65# EncryptUserData--------------------------------------------------------------- 66# CTS requires that userdata be encrypted, at least for api23 and later. However 67# for non Google images or older system images, this is not required or not 68# implemted. Emulator will enable this feature only if the system says it supports 69# encryption. It is on by default on the host, and according to the current rule, 70# a feature is only on if both host and guest support it; so it effectively leaves 71# to guest to decide. 72EncryptUserData = on 73# ------------------------------------------------------------------------------ 74 75# RefCountPipe------------------------------------------------------------------ 76# RefCount Pipe is a different approach to simplify the Color Buffer management 77# on host. In guest, the handle returned by gralloc allocator can be passed around 78# between processes through Binder. Android system ensures that the handle on both 79# calling and receiving end willl be properly closed. Thus, when gralloc allocates 80# buffer for the first time, we establish a Refcount pipe between guest and host, 81# and assign its fd to the handle. In the desturctor of the handle, close the fd. 82# Guest kernel will decide when to really close the fd and thus trigger the pipe's 83# closing on host. On the host side, we only need to destroy the color buffer 84# immediately and not worry about any reference counting at all. This approach will 85# not only simplify the the logic between guest and host, but also reduce memory leaks. 86RefCountPipe = on 87# ------------------------------------------------------------------------------ 88 89 90# IntelPerformanceMonitoringUnit------------------------------------------------ 91# Some CTS tests (mainly SimplePerf) require that the CPU expose some kind of 92# counters that can be used to measure CPU performance in cycles, 93# cache hit/miss, etc. 94# However, the use of this on the vCPU requires that the guest kernel be in 95# a fairly recent state, otherwise the emulator will kernel panic on startup. 96IntelPerformanceMonitoringUnit = on 97# ------------------------------------------------------------------------------ 98 99# GLDMA------------------------------------------------------------------------- 100# Video playback can approach 1080p60 and be solid 720p60 if we map guest memory 101# to host and use it to perofrm color buffer updates, and perform YV12->RGB 102# on the host as well, in an OpenGL shader. 103GLDMA = on 104 105# Enables DMA support for glMapBufferRange and glUnmapBuffer 106GLDMA2 = on 107# Enables direct memory (to the host memory) access in glMapBufferRange 108GLDirectMem = off 109# ------------------------------------------------------------------------------ 110 111# GLESDynamicVersion------------------------------------------------------------ 112# This feature attempts to detect the maximum supported GLES version depending on 113# which OpenGL function pointers have been found on the GL libraries used 114# on the host system. Different platforms / hardware + video driver setups can 115# have different support. 116# For example, OS X is not known to support GLES 3.1. 117# If this feature is set to "off", the max supported GLES version is assumed to 118# be <= 2 and also depend on the system image only (some images only support ES 1). 119GLESDynamicVersion = off 120# ------------------------------------------------------------------------------ 121 122# Wifi ------------------------------------------------------------------------- 123# This feature indicates that the system image and the emulator support Wifi. 124# When this is enabled the network configuration of the system image will be 125# significantly different and the emulator will send different network setup 126# information via RIL. 127Wifi = on 128 129# ForceANGLE-------------------------------------------------------------------- 130# This feature attempts to default the renderer to ANGLE, but can be itself 131# overridden by: 132# -gpu command line argument 133# UI setting 134# The override (and others) are done through the UI, so the user is aware 135# and if the user changes to a setting other than "auto", the user setting 136# is respected. 137ForceANGLE = off 138# ------------------------------------------------------------------------------ 139 140# ForceSwiftshader-------------------------------------------------------------- 141# This feature attempts to default the renderer to Swiftshader. Otherwise, 142# same behavior as ForceANGLE. 143ForceSwiftshader = off 144# ------------------------------------------------------------------------------ 145 146# PlayStoreImage --------------------------------------------------------------- 147# The playstore image has CTS requirements that emulator should check and ensure 148# Guest image will indicate whether it has it or not; 149PlayStoreImage = on 150# ------------------------------------------------------------------------------ 151 152# LogcatPipe --------------------------------------------------------------- 153# The pipe based logcat is meant to replace the 'adb shell logcat' 154# Guest image will indicate whether it has it or not; 155LogcatPipe = on 156# ------------------------------------------------------------------------------ 157 158# Hypervisor feature flags. Assumed mutually exclusive. If all flags are off, 159# then we have: 160# Mac/Win: HAXM 161# Linux: KVM 162# If a flag is on, then attempts are made to detect host support, and if there 163# is support, then the hypervisor in question is actually used. 164HYPERV = off 165HVF = on 166KVM = off 167HAXM = off 168 169# FastSnapshotV1 --------------------------------------------------------------- 170# Enable the new implementation of snapshotting in the emulator and use it for 171# quick boot. 172FastSnapshotV1 = on 173# ------------------------------------------------------------------------------ 174 175# ScreenRecording -------------------------------------------------------------- 176# Enables the host-side screen recording feature. 177ScreenRecording = on 178# ------------------------------------------------------------------------------ 179 180# VirtualScene ----------------------------------------------------------------- 181# Enables the host-side virtual scene feature. 182VirtualScene = on 183 184# VideoPlayback ----------------------------------------------------------------- 185# Enables the camera video playback feature. 186VideoPlayback = off 187 188# system as root -------------------------------------------------------------- 189# Guest feature: when this is on, emulator should use system partition as root fs 190# instead of using ramdisk as root fs. 191SystemAsRoot = on 192 193# GenericSnapshotsUI------------------------------------------------------------ 194# Show the generic snapshots UI. 195GenericSnapshotsUI = on 196 197# WindowsOnDemandSnapshotLoad--------------------------------------------------- 198# On-demand snapshot load for Windows. 199WindowsOnDemandSnapshotLoad = on 200 201# Windows Hypervisor Platform--------------------------------------------------- 202# Allow WHPX 203WindowsHypervisorPlatform = on 204 205# Device Tree Blob-------------------------------------------------------------- 206KernelDeviceTreeBlobSupport = on 207 208# Dynamic partition support -------------------------------------------------------------- 209DynamicPartition = on 210 211# Location UI v2---------------------------------------------------------------- 212LocationUiV2 = on 213 214# SnapshotAdb------------------------------------------------------------------- 215SnapshotAdb = off 216 217# QuickbootFileBacked----------------------------------------------------------- 218QuickbootFileBacked = on 219 220# HWComposer Host Composition--------------------------------------------------- 221HostComposition = on 222 223# On-demand RAM load for snapshots---------------------------------------------- 224# Currently disabled due to issues with MemoryWatch and host side 225# EFAULT's and recent guest kernels + Linux KVM 226OnDemandSnapshotLoad = off 227 228# WifiConfigurable-------------------------------------------------------------- 229WifiConfigurable = off 230 231# Vulkan------------------------------------------------------------------------ 232# If enabled, the guest Vulkan HAL (if installed) will activate. 233Vulkan = off 234 235# CarVHalTable-------------------------------------------------------------- 236# if enabled, Car Vhal Table will show in extended window -> CarData 237CarVHalTable = on 238 239# VirtioInput------------------------------------------------------------------- 240# VirtioInput is a guest side feature which indicates that CONFIG_VIRTIO_INPUT is 241# enabled in kernel. If enabled, emulator will use virtio input device instead of 242# goldfish_events to implement multi-touch functionality. 243VirtioInput = on 244 245# IpDisconnectOnLoad------------------------------------------------------------ 246# Reset IP connection state when loading from snapshots 247IpDisconnectOnLoad = off 248 249# VulkanSnapshots--------------------------------------------------------------- 250# Reset IP connection state when loading from snapshots 251VulkanSnapshots = off 252 253# MultiDisplay------------------------------------------------------------------ 254# MultiDisplay is a guest side feature 255MultiDisplay = on 256 257# VulkanNullOptionalStrings----------------------------------------------------- 258# When we want to encode null optional vulkan strings as actual nulls instead of 259# empty strings 260# Requires guest support. 261VulkanNullOptionalStrings = on 262 263# DynamicMediaProfile----------------------------------------------------------- 264# Enables changing the media_codecs_google_video.xml to link to another file by 265# setting a boot property ro.kernel.qemu.mediaprofile.video to the location of the 266# configuration file. 267DynamicMediaProfile = off 268 269# YUV420888toNV21--------------------------------------------------------------- 270# YUV420888toNV21 is a guest side feature which unifies the pixel format 271# HAL_PIXEL_FORMAT_YCbCr_420_888 as NV21 in gralloc and camera HAL 272YUV420888toNV21 = on 273 274# YUVCache--------------------------------------------------------------- 275# YUVCache is a guest side feature which asks the host to cache the 276# HAL_PIXEL_FORMAT_YCbCr_420_888 and HAL_PIXEL_FORMAT_YV12 frame. 277YUVCache = on 278 279# KeycodeForwarding------------------------------------------------------------- 280# KeycodeForwarding is a guest side feature which emulator host will capture the keypress 281# and forward Liunx keycode to Android system. 282# NOTE: This differs from QtRawKeyboardInput in that keycode processing 283# still separates modifier keys from typed keys, and input is provided as paired 284# keydown and keyup events (rather than raw keydown/keyup events). 285KeycodeForwarding = on 286 287# VulkanIgnoredHandles---------------------------------------------------------- 288# Change in the Vulkan protocol to ignore handles in some situations 289# (VkWriteDescriptorSet, and others) 290# Requires guest support 291VulkanIgnoredHandles = on 292 293# VirtioGpuNext----------------------------------------------------------------- 294# Whether virtio-gpu-next is supported. Requires guest support. 295VirtioGpuNext = on 296 297# Mac80211hwsimUserspaceManaged------------------------------------------------- 298# Do not create mac80211_hwsim radios by the kernel on boot, create radios from 299# userspace instead. 300Mac80211hwsimUserspaceManaged = on 301 302# HasSharedSlotsHostMemoryAllocator--------------------------------------------- 303# Host supports AddressSpaceSharedSlotsHostMemoryAllocatorContext 304HasSharedSlotsHostMemoryAllocator = on 305 306# CarVHalReplay-------------------------------------------------------------- 307# if enabled, sensor replay will be visible in extended window on Automotive AVDs. 308CarVhalReplay = on 309 310# HardwareDecoder-------------------------------------------------------------- 311# if enabled, emulator will add qemu.hwcodec.avcdec=2 and qemu.hwcodec.vpxdec=2 312# to the kernel command line to tell guest the two decoders can be enabled 313HardwareDecoder = on 314 315# AndroidVirtualizationFramework ---------------------------------------------- 316# if enabled, emulator will use -cpu host to enable kvm support inside the guest 317# this only works on x86_64 linux host; does not work on apple silicon for the moment 318AndroidVirtualizationFramework = on 319 320# NoDelayCloseColorBuffer------------------------------------------------------ 321# Used in conjunction with RefCountPipe = off, in systems where the guest 322# properly associates a color buffer with an OS handle, so we can safely 323# clean up the color buffer immediately. 324NoDelayCloseColorBuffer = off 325 326# NoDeviceFrame---------------------------------------------------------------- 327# Don't show the device frame, regardless of AVD config or Qt setting. 328NoDeviceFrame = off 329 330# VirtioGpuNativeSync---------------------------------------------------------- 331# Use virtio-gpu instead of goldfish sync for syncfd support. 332# TODO: test with goldfish 333VirtioGpuNativeSync = off 334 335# VirtioWifi-------------------------------------------------------------------- 336# if enabled, emulator will add ro.kernel.qemu.virtiowifi to the kernel command line 337# to tell the geust that VirtioWifi kernel driver will be used instead of mac80211_hwsim. 338VirtioWifi = on 339 340# VulkanShaderFloat16Int8------------------------------------------------------- 341# Enables struct defs for VK_KHR_shader_float16_int8. 342VulkanShaderFloat16Int8 = on 343 344# CarRotary-------------------------------------------------------------- 345# if enabled, Car rotary controller will be visible in extended window on Automotive AVDs. 346CarRotary = on 347 348# ModemSimulator-------------------------------------------------------------- 349# turn on the modem simulator, instead of the legacy modem 350ModemSimulator = on 351 352# TvRemote 353# When enabled, the dpad is replaced with a remote specific to Android TV devices. 354TvRemote = on 355 356# GuestUsesAngle-------------------------------------------------------------- 357# Whether or not the guest is using ANGLE as its OpenGL driver. 358GuestUsesAngle = off 359 360# VirtioVsockPipe-------------------------------------------------------------- 361# The virtio-vsock device is a drop-in replacement for the goldfish_pipe device. 362VirtioVsockPipe = on 363 364# VirtioMouse------------------------------------------------------------------ 365# If enabled, the emulator will create mouse input events for guests, otherwise 366# it creates multi-touch events. 367VirtioMouse = on 368 369# VirtconsoleLogcat------------------------------------------------------------- 370# If enabled, it replaces LogcatPipe with the forhvc1 chardev consifured to 371# stdio or to a file. 372VirtconsoleLogcat = on 373 374# VulkanQueueSubmitWithCommands------------------------------------------------- 375# Use deferred command submission and global sequence number synchronization with Vulkan. 376VulkanQueueSubmitWithCommands = on 377 378# VulkanBatchedDescriptorSetUpdate---------------------------------------------- 379# Use batched descriptor set update. 380VulkanBatchedDescriptorSetUpdate = on 381 382# Minigbm--------------------------------------------------------------- 383# Minigbm is a guest side feature which use the minigbm for gralloc. It asks the host 384# camera to legacy operation 385Minigbm = on 386# GnssGrpcV1------------------------------------------------- 387# Use grpc based gnss implementation 388GnssGrpcV1 = on 389 390# AndroidbootProps-------------------------------------------------------------- 391# AndroidbootProps2------------------------------------------------------------- 392# If enabled, the boot userspace properties (e.g. `qemu=1` or 393# `qemu.opengles.version=123456`) are passed in the ramdisk instead of 394# the kernel command line (which is deprecated for these purposes). 395# AndroidbootProps2 does not populate `qemu` and `androidboot.hardware` on the 396# host side since they are constants. 397AndroidbootProps = on 398AndroidbootProps2 = on 399 400# DeviceSkinOverlay------------------------------------------------------------- 401# Apply overlay for each enabled devices (pixel devices) 402DeviceSkinOverlay = on 403 404# DeviceStateOnBoot------------------------------------------------------------- 405# If enabled, it will generate device_state_configratio.xml and send to guest. 406DeviceStateOnBoot = on 407 408# SupportPixelFold ------------------------------------------------------------- 409# If enabled, it will create pixel_fold specific configuration on /data/system 410# {devicestate/ and displayconfig/}, when the hw.device.name=pixel_fold is given 411# in the avd/config.ini 412SupportPixelFold = on 413 414# HWCMultiConfigs-------------------------------------------------------------- 415# If enabled, will config multiple configs in hwcompser HAL 416HWCMultiConfigs = on 417 418# AsyncComposeSupport --------------------------------------------------- 419# If enabled, hwcomposer will be able to use asynchronous render control 420# commands to compose and post frame buffers. 421AsyncComposeSupport = off 422 423# VirtioSndCard----------------------------------------------------------------- 424# Enables the virtio-snd audio card and disables the Intel HDA one 425VirtioSndCard = on 426 427# DownloadableSnapshot ----------------------------------------------------------------- 428# Enables downloadable snapshot 429DownloadableSnapshot = on 430 431# VirtioTablet----------------------------------------------------------------- 432# If enabled, the emulator will create tablet input events for guests, otherwise 433# it creates multi-touch events. Cannot be used with VirtioMouse. 434VirtioTablet = on 435 436# VirtioGpuFenceContexts-------------------------------------------------------- 437# If enabled, virtio-gpu fence on multiple timelines will be supported. 438# Currently this feature doesn't work because the qemu doesn't support this 439# feature yet, while crosvm and the gfxstream renderer backend has already 440# supported this feature. 441VirtioGpuFenceContexts = off 442 443# VsockSnapshotLoadFixed_b231345789--------------------------------------------- 444# Send the RST frame when the VSOCK device is loaded from a snapshot. 445VsockSnapshotLoadFixed_b231345789 = on 446 447# VulkanAstcLdrEmulation-------------------------------------------------------- 448# Enable Vulkan ASTC LDR emulation. 449VulkanAstcLdrEmulation = on 450 451# VulkanYcbcrEmulation---------------------------------------------------------- 452# Enable Vulkan ASTC LDR emulation. 453VulkanYcbcrEmulation = off 454 455# Enable Vulkan to allocate device memory only 456# there will be no host only memory 457# needed for amd gpu on linux, for the moment 458# caution: this essentially limits the amount of 459# memory on gpu. 460# Bug: 324086743 461VulkanAllocateDeviceMemoryOnly = off 462 463# when the memory is host visible, we want to 464# allocate them from emulator instead of from 465# driver using vkAllocateMemory, to avoid 466# kvm "Bad Address" problem 467VulkanAllocateHostMemory = off 468 469# NetsimWebUi------------------------------------------------------------------- 470# Enable the netsim web user interface 471NetsimWebUi = on 472 473# NetsimCliUi------------------------------------------------------------------- 474# Enable the netsim command line interface through the netsim executable 475NetsimCliUi = on 476 477# WiFiPacketStream-------------------------------------------------------------- 478# Enable WiFi packet streamer. Netsim will provide WiFi functionality 479WiFiPacketStream = off 480 481# Uwb--------------------------------------------------------------------------- 482# Enable Uwb packet streamer. Netsim will provide Uwb functionality 483Uwb = on 484 485# GuestAngle-------------------------------------------------------------------- 486# Enforce usage of ANGLE on the guest side. 487GuestAngle = on 488 489# BypassVulkanDeviceFeatureOverrides-------------------------------------------- 490# Bypass a certain set of problematic Vulkan overrides which we haven't fully implemented yet. 491BypassVulkanDeviceFeatureOverrides = off 492 493#DeviceKeyboardHasAssistKey----------------------------------------------------- 494# For devices without this key on the keyboard, the emulator will send the 495# event via adb 496DeviceKeyboardHasAssistKey = on 497 498# QtRawKeyboardInput 499# Enables raw keyboard input from QT (specifically keydown/keyup events) to be 500# sent to the guest with minimal manipulation. Critical shortcut keys (mouse 501# release, tool window shortcuts, etc.) are still processed prior to sending 502# key input. This has no effect when gRPC keyboard input is used instead. 503QtRawKeyboardInput = off 504