xref: /aosp_15_r20/prebuilts/android-emulator/linux-x86_64/lib/advancedFeatures.ini (revision d870e0501505f2fc9999364ffe386a6b6151adc1)
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