| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/components/arc/arc_features.h" |
| |
| namespace arc { |
| |
| // Controls ACTION_BOOT_COMPLETED broadcast for third party applications on ARC. |
| // When disabled, third party apps will not receive this broadcast. |
| const base::Feature kBootCompletedBroadcastFeature{ |
| "ArcBootCompletedBroadcast", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls experimental Compat snap feature for ARC. |
| const base::Feature kCompatSnapFeature{"ArcCompatSnapFeature", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls experimental Custom Tabs feature for ARC. |
| const base::Feature kCustomTabsExperimentFeature{ |
| "ArcCustomTabsExperiment", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether to handle files with unknown size. |
| const base::Feature kDocumentsProviderUnknownSizeFeature{ |
| "ArcDocumentsProviderUnknownSize", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls ARC Nearby Share support. |
| // When enabled, Android apps will show the Nearby Share as a share target in |
| // its sharesheet. |
| const base::Feature kEnableArcNearbyShare{"ArcNearbySharing", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether crosvm for ARCVM does per-VM core scheduling on devices with |
| // MDS/L1TF vulnerabilities. When this feature is disabled, crosvm does per-vCPU |
| // core scheduling which is more secure. |
| // |
| // How to safely disable this feature for security (or other) reasons: |
| // |
| // 1) Visit go/stainless and verify arc.Boot.vm_with_per_vcpu_core_scheduling is |
| // green (it should always be because arc.Boot is a critical test.) |
| // 2) Change the default value of this feature to FEATURE_DISABLED_BY_DEFAULT. |
| // 3) Monitor arc.Boot.vm at go/stainless after Chrome is rolled. |
| // 4) Ask ARC team (//ash/components/arc/OWNERS) to update arc.CPUSet.vm test |
| // so the Tast test uses the updated ArcEnablePerVmCoreScheduling setting. |
| const base::Feature kEnablePerVmCoreScheduling{ |
| "ArcEnablePerVmCoreScheduling", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether to use ARC TTS caching to optimize ARC boot. |
| const base::Feature kEnableTTSCaching{"ArcEnableTTSCaching", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether to use pregenerated ARC TTS cache to optimize ARC boot and |
| // also whether or not TTS cache is used. |
| const base::Feature kEnableTTSCacheSetup{"ArcEnableTTSCacheSetup", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether we should delegate audio focus requests from ARC to Chrome. |
| const base::Feature kEnableUnifiedAudioFocusFeature{ |
| "ArcEnableUnifiedAudioFocus", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether ARC handles unmanaged->managed account transition. |
| const base::Feature kEnableUnmanagedToManagedTransitionFeature{ |
| "ArcEnableUnmanagedToManagedTransitionFeature", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls ARC Unspecialized Application Processes. |
| // When enabled, Android creates a pool of processes |
| // that will start applications so that zygote doesn't have to wake. |
| const base::Feature kEnableUsap{"ArcEnableUsap", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether ARCVM uses virtio-blk for /data in Android storage. |
| const base::Feature kEnableVirtioBlkForData{"ArcEnableVirtioBlkForData", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls experimental file picker feature for ARC. |
| const base::Feature kFilePickerExperimentFeature{ |
| "ArcFilePickerExperiment", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether the guest zram is enabled. This is only for ARCVM. |
| const base::Feature kGuestZram{"ArcGuestZram", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls the size of the guest zram. |
| const base::FeatureParam<int> kGuestZramSize{&kGuestZram, "size", 0}; |
| |
| // Control properties of Logd at boot time. This is only for ARCVM. |
| const base::Feature kLogdConfig{"ArcGuestLogdConfig", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls the size in KB of logd. Only a few sizes are supported, |
| // see kLogdConfigSize* private constants in arc_vm_client_adapter.cc. |
| // The default set here means "do not override the build setting", |
| // which is the same behavior as disabling the feature. Doing it so, |
| // we don't need to keep this code up-to-date with the build default. |
| const base::FeatureParam<int> kLogdConfigSize{&kLogdConfig, "size", 0}; |
| |
| // Controls keyboard shortcut helper integration feature in ARC. |
| const base::Feature kKeyboardShortcutHelperIntegrationFeature{ |
| "ArcKeyboardShortcutHelperIntegration", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Toggles between native bridge implementations for ARC. |
| // Note, that we keep the original feature name to preserve |
| // corresponding metrics. |
| const base::Feature kNativeBridgeToggleFeature{ |
| "ArcNativeBridgeExperiment", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, utility processes are spawned to perform hardware decode |
| // acceleration on behalf of ARC++/ARCVM instead of using the GPU process. |
| const base::Feature kOutOfProcessVideoDecoding{ |
| "OutOfProcessVideoDecoding", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls ARC picture-in-picture feature. If this is enabled, then Android |
| // will control which apps can enter PIP. If this is disabled, then ARC PIP |
| // will be disabled. |
| const base::Feature kPictureInPictureFeature{"ArcPictureInPicture", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls ARC right click long press compatibility feature. |
| const base::Feature kRightClickLongPress{"ArcRightClickLongPress", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls ARCVM real time vcpu feature on a device with 2 logical cores |
| // online. |
| // When you change the default, you also need to change the chromeExtraAgas |
| // in tast-tests/src/chromiumos/tast/local/bundles/cros/arc/cpu_set.go to |
| // match it to the new default. |
| const base::Feature kRtVcpuDualCore{"ArcRtVcpuDualCore", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls ARCVM real time vcpu feature on a device with 3+ logical cores |
| // online. |
| // When you change the default, you also need to modify the chromeExtraAgas |
| // in tast-tests/src/chromiumos/tast/local/bundles/cros/arc/cpu_set.go to |
| // add ArcRtVcpuQuadCore there. Otherwise, the test will start failing. |
| const base::Feature kRtVcpuQuadCore{"ArcRtVcpuQuadCore", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, tracing raw files are saved in order to help debug failures. |
| const base::Feature kSaveRawFilesOnTracing{"ArcSaveRawFilesOnTracing", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // When enabled, unclaimed USB device will be attached to ARCVM by default. |
| const base::Feature kUsbDeviceDefaultAttachToArcVm{ |
| "UsbDeviceDefaultAttachToArcVm", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls ARC USB Storage UI feature. |
| // When enabled, chrome://settings and Files.app will ask if the user wants |
| // to expose USB storage devices to ARC. |
| const base::Feature kUsbStorageUIFeature{"ArcUsbStorageUI", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls ARC dalvik memory profile in ARCVM. |
| // When enabled, Android tries to use dalvik memory profile tuned based on the |
| // device memory size. |
| const base::Feature kUseDalvikMemoryProfile{"ArcUseDalvikMemoryProfile", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls whether the system/vendor images are mounted without specifying a |
| // block size. |
| const base::Feature kUseDefaultBlockSize{"ArcVmUseDefaultBlockSize", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls whether ARC uses VideoDecoder-backed video decoding. |
| // When enabled, GpuArcVideoDecodeAccelerator will use VdVideoDecodeAccelerator |
| // to delegate decoding tasks to VideoDecoder implementations, instead of using |
| // VDA implementations created by GpuVideoDecodeAcceleratorFactory. |
| const base::Feature kVideoDecoder{"ArcVideoDecoder", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Feature to continuously log PSI memory pressure data to Chrome. |
| const base::Feature kVmMemoryPSIReports{"ArcVmMemoryPSIReports", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls how frequently memory pressure data is logged |
| const base::FeatureParam<int> kVmMemoryPSIReportsPeriod{&kVmMemoryPSIReports, |
| "period", 10}; |
| |
| // Controls whether a custom memory size is used when creating ARCVM. When |
| // enabled, ARCVM is sized with the following formula: |
| // min(max_mib, RAM + shift_mib) |
| // If disabled, memory is sized by concierge which, at the time of writing, uses |
| // RAM - 1024 MiB. |
| const base::Feature kVmMemorySize{"ArcVmMemorySize", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Controls the amount to "shift" system RAM when sizing ARCVM. The default |
| // value of 0 means that ARCVM's memory will be thr same as the system. |
| const base::FeatureParam<int> kVmMemorySizeShiftMiB{&kVmMemorySize, "shift_mib", |
| 0}; |
| |
| // Controls the maximum amount of memory to give ARCVM. The default value of |
| // INT32_MAX means that ARCVM's memory is not capped. |
| const base::FeatureParam<int> kVmMemorySizeMaxMiB{&kVmMemorySize, "max_mib", |
| INT32_MAX}; |
| |
| // Controls whether to use the new limit cache balloon policy. If disabled the |
| // old balance available balloon policy is used. If enabled, ChromeOS's Resource |
| // Manager (resourced) is able to kill ARCVM apps by sending a memory pressure |
| // signal. |
| // The limit cache balloon policy inflates the balloon to limit the kernel page |
| // cache inside ARCVM if memory in the host is low. See FeatureParams below for |
| // the conditions that limit cache. See mOomMinFreeHigh and mOomAdj in |
| // frameworks/base/services/core/java/com/android/server/am/ProcessList.java |
| // to see how LMKD maps kernel page cache to a priority level of app to kill. |
| // To ensure fairness between tab manager discards and ARCVM low memory kills, |
| // we want to stop LMKD killing things out of turn. We do this by making sure |
| // ARCVM never has it's kernel page cache drop below the level that LMKD will |
| // start killing. |
| const base::Feature kVmBalloonPolicy{"ArcVmBalloonPolicy", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // The maximum amount of kernel page cache ARCVM can have when ChromeOS is under |
| // moderate memory pressure. 0 for no limit. |
| const base::FeatureParam<int> kVmBalloonPolicyModerateKiB{&kVmBalloonPolicy, |
| "moderate_kib", 0}; |
| |
| // The maximum amount of kernel page cache ARCVM can have when ChromeOS is under |
| // critical memory pressure. 0 for no limit. The default value of 322560KiB |
| // corresponds to the level LMKD will start to kill the lowest priority cached |
| // app. |
| const base::FeatureParam<int> kVmBalloonPolicyCriticalKiB{ |
| &kVmBalloonPolicy, "critical_kib", 322560}; |
| |
| // The maximum amount of kernel page cache ARCVM can have when ChromeOS is |
| // reclaiming. 0 for no limit. The default value of 322560KiB corresponds to the |
| // level LMKD will start to kill the lowest priority cached app. |
| const base::FeatureParam<int> kVmBalloonPolicyReclaimKiB{&kVmBalloonPolicy, |
| "reclaim_kib", 322560}; |
| |
| // Controls experimental key GMS Core and related services protection against to |
| // be killed by low memory killer in ARCVM. |
| const base::Feature kVmGmsCoreLowMemoryKillerProtection{ |
| "ArcVmGmsCoreLowMemoryKillerProtection", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Controls experimental key to enable pre-ANR handling for BroadcastQueue in |
| // ARCVM. |
| const base::Feature kVmBroadcastPreNotifyANR{"ArcVmBroadcastPreAnrHandling", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| } // namespace arc |