blob: 9e541cbe19ffed0fd35d08debb2857d940bc840f [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// 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"
#include "base/feature_list.h"
namespace arc {
// Controls whether to always start ARC automatically, or wait for the user's
// action to start it later in an on-demand manner.
BASE_FEATURE(kArcOnDemandFeature,
"ArcOnDemand",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls ACTION_BOOT_COMPLETED broadcast for third party applications on ARC.
// When disabled, third party apps will not receive this broadcast.
BASE_FEATURE(kBootCompletedBroadcastFeature,
"ArcBootCompletedBroadcast",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls experimental Custom Tabs feature for ARC.
BASE_FEATURE(kCustomTabsExperimentFeature,
"ArcCustomTabsExperiment",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to handle files with unknown size.
BASE_FEATURE(kDocumentsProviderUnknownSizeFeature,
"ArcDocumentsProviderUnknownSize",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether an Android VPN (ArcHostVpn) should be started when a host
// VPN is started.
BASE_FEATURE(kEnableArcHostVpn,
"ArcHostVpn",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether we automatically send ARCVM into Doze mode
// when it is mostly idle - even if Chrome is still active.
BASE_FEATURE(kEnableArcIdleManager,
"ArcIdleManager",
base::FEATURE_DISABLED_BY_DEFAULT);
// For test purposes, ignore battery status changes, allowing Doze mode to
// kick in even if we do not receive powerd changes related to battery.
const base::FeatureParam<bool> kEnableArcIdleManagerIgnoreBatteryForPLT{
&kEnableArcIdleManager, "ignore_battery_for_test", false};
// Controls whether files shared to ARC Nearby Share are shared through the
// FuseBox filesystem, instead of the default method (through a temporary path
// managed by file manager).
BASE_FEATURE(kEnableArcNearbyShareFuseBox,
"ArcNearbyShareFuseBox",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to enable ARCVM /data migration. It does not take effect
// when kEnableVirtioBlkForData is set, in which case virtio-blk is used for
// /data without going through the migration.
BASE_FEATURE(kEnableArcVmDataMigration,
"ArcVmDataMigration",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether WebView Zygote is lazily initialized in ARC.
BASE_FEATURE(kEnableLazyWebViewInit,
"LazyWebViewInit",
base::FEATURE_DISABLED_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.
BASE_FEATURE(kEnablePerVmCoreScheduling,
"ArcEnablePerVmCoreScheduling",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether we should delegate audio focus requests from ARC to Chrome.
BASE_FEATURE(kEnableUnifiedAudioFocusFeature,
"ArcEnableUnifiedAudioFocus",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether ARC handles unmanaged->managed account transition.
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.
BASE_FEATURE(kEnableUsap, "ArcEnableUsap", base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to use virtio-blk for Android /data instead of using
// virtio-fs.
BASE_FEATURE(kEnableVirtioBlkForData,
"ArcEnableVirtioBlkForData",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to pop up ghost window for ARC app before fixup finishes.
BASE_FEATURE(kFixupWindowFeature,
"ArcFixupWindowFeature",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether new UI style for ARC ghost window.
BASE_FEATURE(kGhostWindowNewStyle,
"ArcGhostWindowNewStyle",
base::FEATURE_ENABLED_BY_DEFAULT);
// Used for overriding config params for the virtio-blk feature above.
BASE_FEATURE(kVirtioBlkDataConfigOverride,
"ArcVirtioBlkDataConfigOverride",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to use the LVM-provided disk as the backend device for
// Android /data instead of using the concierge-provided disk.
const base::FeatureParam<bool> kVirtioBlkDataConfigUseLvm{
&kVirtioBlkDataConfigOverride, "use_lvm", false};
// Indicates whether LVM application containers feature is supported.
BASE_FEATURE(kLvmApplicationContainers,
"ArcLvmApplicationContainers",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls experimental file picker feature for ARC.
BASE_FEATURE(kFilePickerExperimentFeature,
"ArcFilePickerExperiment",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether ARCVM can request resourced make more resources available
// for a currently-active ARCVM game.
BASE_FEATURE(kGameModeFeature,
"ArcGameModeFeature",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether the guest zram is enabled. This is only for ARCVM.
BASE_FEATURE(kGuestZram, "ArcGuestZram", base::FEATURE_DISABLED_BY_DEFAULT);
// Controls the size of the guest zram.
const base::FeatureParam<int> kGuestZramSize{&kGuestZram, "size", 0};
// Controls swappiness for the ARCVM guest.
const base::FeatureParam<int> kGuestZramSwappiness{&kGuestZram, "swappiness",
0};
// Enables/disables ghost when user launch ARC app from shelf/launcher when
// App already ready for launch.
BASE_FEATURE(kInstantResponseWindowOpen,
"ArcInstantResponseWindowOpen",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables/disables mlock() of guest memory for ARCVM.
// Often used in combination with kGuestZram.
BASE_FEATURE(kLockGuestMemory,
"ArcLockGuestMemory",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls keyboard shortcut helper integration feature in ARC.
BASE_FEATURE(kKeyboardShortcutHelperIntegrationFeature,
"ArcKeyboardShortcutHelperIntegration",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls ARCVM MGLRU reclaim feature.
BASE_FEATURE(kMglruReclaim,
"ArcMglruReclaim",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls the interval between MGLRU reclaims in milliseconds
// A value of 0 will disable the MGLRU reclaim feature
const base::FeatureParam<int> kMglruReclaimInterval{&kMglruReclaim, "interval",
0};
// Controls the swappiness of MGLRU reclaims, in the range of 0 to 200
// 0 means only filecache will be used while 200 means only swap will be used
// any value in between will be a mix of both
// The lower the value, the higher the ratio of freeing filecache pages
// Implementation and a more detailed description can be found in ChromeOS
// src/third_party/kernel/v5.10-arcvm/mm/vmscan.c
const base::FeatureParam<int> kMglruReclaimSwappiness{&kMglruReclaim,
"swappiness", 0};
// Toggles between native bridge implementations for ARC.
// Note, that we keep the original feature name to preserve
// corresponding metrics.
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.
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.
BASE_FEATURE(kPictureInPictureFeature,
"ArcPictureInPicture",
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.
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.
BASE_FEATURE(kRtVcpuQuadCore,
"ArcRtVcpuQuadCore",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, tracing raw files are saved in order to help debug failures.
BASE_FEATURE(kSaveRawFilesOnTracing,
"ArcSaveRawFilesOnTracing",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, CertStoreService will talk to KeyMint instead of Keymaster on
// ARC-T.
// When you change the default, you also need to change whether Keymaster
// or KeyMint is started in ARC. Otherwise, it will not work properly.
BASE_FEATURE(kSwitchToKeyMintOnT,
"ArcSwitchToKeyMintOnT",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, ARC will pass install priority to Play in sync install
// requests.
BASE_FEATURE(kSyncInstallPriority,
"ArcSyncInstallPriority",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to update the O4C list via A2C2.
BASE_FEATURE(kArcUpdateO4CListViaA2C2,
"ArcUpdateO4CListViaA2C2",
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.
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.
BASE_FEATURE(kUseDalvikMemoryProfile,
"ArcUseDalvikMemoryProfile",
base::FEATURE_ENABLED_BY_DEFAULT);
// Controls whether the system/vendor images are mounted without specifying a
// block size.
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.
BASE_FEATURE(kVideoDecoder,
"ArcVideoDecoder",
base::FEATURE_ENABLED_BY_DEFAULT);
// Feature to continuously log PSI memory pressure data to Chrome.
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.
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 experimental key to enable pre-ANR handling for BroadcastQueue in
// ARCVM.
BASE_FEATURE(kVmBroadcastPreNotifyANR,
"ArcVmBroadcastPreAnrHandling",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls experimental key to enable Vmm swap for ARCVM by keyboard shortcut.
BASE_FEATURE(kVmmSwapKeyboardShortcut,
"ArcvmSwapoutKeyboardShortcut",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls experimental key to enable and swap out ARCVM by policy.
BASE_FEATURE(kVmmSwapPolicy,
"ArcVmmSwapPolicy",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls the time interval between create staging memory and swap out. The
// default value is 10 seconds.
const base::FeatureParam<int> kVmmSwapOutDelaySecond{&kVmmSwapPolicy,
"delay_sec", 10};
// Controls the time interval between two swap out. The default value is 12
// hours.
const base::FeatureParam<int> kVmmSwapOutTimeIntervalSecond{
&kVmmSwapPolicy, "swapout_interval_sec", 60 * 60 * 12};
// Controls the time interval of ARC silence. The default value is 15 minutes.
const base::FeatureParam<int> kVmmSwapArcSilenceIntervalSecond{
&kVmmSwapPolicy, "arc_silence_interval_sec", 60 * 15};
} // namespace arc