#-------------------------------------------------------------------------------
# Advanced emulator features
#-------------------------------------------------------------------------------

# GLPipeChecksum----------------------------------------------------------------
# For every GL call that transfers between host and guest, GLPipeChecksum = on
# will compute a checksum consisting of some function of the actual bit vector
# corresponding to the GL command, verifying that the same checksum shows up
# on both the host and guest. Violations of the checksum (mismatches) result
# in an abort() and crash report being sent.
#
# Currently, the checksum is mainly making sure that the command itself and all
# arrays passed through the pipe are of proper length.
GLPipeChecksum = on
# ------------------------------------------------------------------------------

# GrallocSync-------------------------------------------------------------------
# Most apps that display images do so through OpenGL, but there are some apps
# that write directly to gralloc color buffers. In our goldfish-driver gralloc
# implementation, which represents gralloc color buffers as host OpenGL color
# buffers.
#
# For example, in the camera app, the emulated webcam driver will pull frames
# to a gralloc color buffer directly, and then in another thread or process,
# the color buffer representing the camera frame preview could be posted
# onscreen.
#
# These operations aren't guaranteed to have their order preserved when arriving
# from the guest, and if executed on the host in the wrong order, we could
# end up with out of order webcam frames, for instance.
#
# GrallocSync = on adds synchronization to the host for this use case where apps
# directly write to gralloc color buffers and then post them.
# Gralloc sync disabled for now because it is making CTS sad.
GrallocSync = off
# ------------------------------------------------------------------------------

# GLAsyncSwap-------------------------------------------------------------------
# OpenGL apps in the guest present their contents indirectly through
# SurfaceFlinger. The goldfish driver's implementation of eglSwapBuffers is
# based on queuing the finished frame (buffer) to SurfaceFlinger.
# SurfaceFlinger then acquires that finished buffer from the OpenGL app,
# does the actual posting to the display (which may involve a call in turn
# to eglSwapBuffers, esp. if we are not using hardware composer),
# and releases the buffer, allowing the OpenGL app to dequeue a fresh
# buffer for whatever to draw next.
#
# The problem is that when we are using host GPU, the rubber meets the road #
# in the host not the guest (what the user sees is not due to any concrete
# action inside the guest, but due to the host GPU communicating with the host
# display), so it's not always clear what a "finished frame" means. In
# particular, the frame is not necessarily finished when the buffer is queued
# in the guest, depending on host driver quirks. So, posting unfinished or
# even older buffers to SurfaceFlinger will result in out of order frames.
#
# GLAsyncSwap = off pretends this issue doesn't exist and it's up to the host
# driver to properly synchronize upon calling rcFlushWindowColorBuffer.
# GLAsyncSwap = on uses the host GL driver's fence commands and fence fd's in
# the guest in order to have explicit signals of buffer swaps complete. This
# preserves frame ordering at a slight performance cost, but the cost is less
# than that of other solutions like calling glFinish() on the host.
# Disabled by default for now
GLAsyncSwap = off
# ------------------------------------------------------------------------------

# EncryptUserData---------------------------------------------------------------
# CTS requires that userdata be encrypted, at least for api23 and later. However
# for non Google images or older system images, this is not required or not
# implemted. Emulator will enable this feature only if the system says it supports
# encryption. It is on by default on the host, and according to the current rule,
# a feature is only on if both host and guest support it; so it effectively leaves
# to guest to decide.
EncryptUserData = on
# ------------------------------------------------------------------------------

# IntelPerformanceMonitoringUnit------------------------------------------------
# Some CTS tests (mainly SimplePerf) require that the CPU expose some kind of
# counters that can be used to measure CPU performance in cycles,
# cache hit/miss, etc.
# However, the use of this on the vCPU requires that the guest kernel be in
# a fairly recent state, otherwise the emulator will kernel panic on startup.
IntelPerformanceMonitoringUnit = on
# ------------------------------------------------------------------------------

# GLDMA-------------------------------------------------------------------------
# Video playback can approach 1080p60 and be solid 720p60 if we map guest memory
# to host and use it to perofrm color buffer updates, and perform YV12->RGB
# on the host as well, in an OpenGL shader.
GLDMA = on
# ------------------------------------------------------------------------------

# GLESDynamicVersion------------------------------------------------------------
# This feature attempts to detect the maximum supported GLES version depending on
# which OpenGL function pointers have been found on the GL libraries used
# on the host system. Different platforms / hardware + video driver setups can
# have different support.
# For example, OS X is not known to support GLES 3.1.
# If this feature is set to "off", the max supported GLES version is assumed to
# be <= 2 and also depend on the system image only (some images only support ES 1).
GLESDynamicVersion = off
# ------------------------------------------------------------------------------

# Wifi -------------------------------------------------------------------------
# This feature indicates that the system image and the emulator support Wifi.
# When this is enabled the network configuration of the system image will be
# significantly different and the emulator will send different network setup
# information via RIL.
Wifi = on

# ForceANGLE--------------------------------------------------------------------
# This feature attempts to default the renderer to ANGLE, but can be itself
# overridden by:
# -gpu command line argument
# UI setting
# The override (and others) are done through the UI, so the user is aware
# and if the user changes to a setting other than "auto", the user setting
# is respected.
ForceANGLE = off
# ------------------------------------------------------------------------------

# ForceSwiftshader--------------------------------------------------------------
# This feature attempts to default the renderer to Swiftshader. Otherwise,
# same behavior as ForceANGLE.
ForceSwiftshader = off
# ------------------------------------------------------------------------------

# PlayStoreImage ---------------------------------------------------------------
# The playstore image has CTS requirements that emulator should check and ensure
# Guest image will indicate whether it has it or not;
PlayStoreImage = on
# ------------------------------------------------------------------------------

# LogcatPipe ---------------------------------------------------------------
# The pipe based logcat is meant to replace the 'adb shell logcat'
# Guest image will indicate whether it has it or not;
LogcatPipe = on
# ------------------------------------------------------------------------------

# Hypervisor feature flags. Assumed mutually exclusive. If all flags are off,
# then we have:
# Mac/Win: HAXM
# Linux: KVM
# If a flag is on, then attempts are made to detect host support, and if there
# is support, then the hypervisor in question is actually used.
HYPERV = off
HVF = on
KVM = off
HAXM = off

# FastSnapshotV1 ---------------------------------------------------------------
# Enable the new implementation of snapshotting in the emulator and use it for
# quick boot.
FastSnapshotV1 = on
# ------------------------------------------------------------------------------

# ScreenRecording --------------------------------------------------------------
# Enables the host-side screen recording feature.
ScreenRecording = on
# ------------------------------------------------------------------------------

# VirtualScene -----------------------------------------------------------------
# Enables the host-side virtual scene feature.
VirtualScene = on

# system as root  --------------------------------------------------------------
# Guest feature: when this is on, emulator should use system partition as root fs
# instead of using ramdisk as root fs.
SystemAsRoot = on

# IgnoreHostOpenGLErrors--------------------------------------------------------
# Don't query the host for OpenGL errors. Only use if rendering is OK for you
# already. Should decrease jank in UI by quite a bit.
IgnoreHostOpenGLErrors = off

# GenericSnapshotsUI------------------------------------------------------------
# Show the generic snapshots UI.
GenericSnapshotsUI = on

# AllowSnapshotMigration--------------------------------------------------------
# Skip snapshot file consistency checks, allowing for snapshot migration.
AllowSnapshotMigration = off

# WindowsOnDemandSnapshotLoad---------------------------------------------------
# On-demand snapshot load for Windows.
WindowsOnDemandSnapshotLoad = on

# Windows Hypervisor Platform---------------------------------------------------
# Allow WHPX
WindowsHypervisorPlatform = on