blob: 845bf516d0d8b7cefc3f1d3992c2a10a9bc49142 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/features.h"
#include "base/cpu_reduction_experiment.h"
#include "base/task/sequence_manager/sequence_manager_impl.h"
#include "base/threading/platform_thread.h"
#include "build/buildflag.h"
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
#include "base/message_loop/message_pump_libevent.h"
#endif
#if BUILDFLAG(IS_APPLE)
#include "base/files/file.h"
#include "base/message_loop/message_pump_apple.h"
#include "base/message_loop/message_pump_kqueue.h"
#include "base/synchronization/condition_variable.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#include "base/android/input_hint_checker.h"
#endif
#if BUILDFLAG(IS_WIN)
#include "base/task/sequence_manager/thread_controller_power_monitor.h"
#include "base/threading/platform_thread_win.h"
#endif
namespace base::features {
// Alphabetical:
// Enforce that writeable file handles passed to untrusted processes are not
// backed by executable files.
BASE_FEATURE(kEnforceNoExecutableFileHandles,
"EnforceNoExecutableFileHandles",
FEATURE_ENABLED_BY_DEFAULT);
// TODO(crbug.com/40580068): Roll out this to 100% before replacing existing
// NOTREACHED()s with NOTREACHED_NORETURN() as part of NOTREACHED() migration.
// Note that a prerequisite for rolling out this experiment is that existing
// NOTREACHED reports are at a very low rate. Once this rolls out we should
// monitor that crash rates for the experiment population is within a 1-5% or
// lower than the control group.
BASE_FEATURE(kNotReachedIsFatal,
"NotReachedIsFatal",
FEATURE_DISABLED_BY_DEFAULT);
// Optimizes parsing and loading of data: URLs.
BASE_FEATURE(kOptimizeDataUrls, "OptimizeDataUrls", FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kUseRustJsonParser,
"UseRustJsonParser",
FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kJsonNegativeZero, "JsonNegativeZero", FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
// Force to enable LowEndDeviceMode partially on Android 3Gb devices.
// (see PartialLowEndModeOnMidRangeDevices below)
BASE_FEATURE(kPartialLowEndModeOn3GbDevices,
"PartialLowEndModeOn3GbDevices",
FEATURE_DISABLED_BY_DEFAULT);
// Used to enable LowEndDeviceMode partially on Android and ChromeOS mid-range
// devices. Such devices aren't considered low-end, but we'd like experiment
// with a subset of low-end features to see if we get a good memory vs.
// performance tradeoff.
//
// TODO(crbug.com/1434873): |#if| out 32-bit before launching or going to
// high Stable %, because we will enable the feature only for <8GB 64-bit
// devices, where we didn't ship yet. However, we first need a larger
// population to collect data.
BASE_FEATURE(kPartialLowEndModeOnMidRangeDevices,
"PartialLowEndModeOnMidRangeDevices",
#if BUILDFLAG(IS_ANDROID)
FEATURE_ENABLED_BY_DEFAULT);
#elif BUILDFLAG(IS_CHROMEOS)
FEATURE_DISABLED_BY_DEFAULT);
#endif
#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(IS_ANDROID)
// Whether to report frame metrics to the Android.FrameTimeline.* histograms.
BASE_FEATURE(kCollectAndroidFrameTimelineMetrics,
"CollectAndroidFrameTimelineMetrics",
FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_ANDROID)
void Init(EmitThreadControllerProfilerMetadata
emit_thread_controller_profiler_metadata) {
InitializeCpuReductionExperiment();
sequence_manager::internal::SequenceManagerImpl::InitializeFeatures();
sequence_manager::internal::ThreadController::InitializeFeatures(
emit_thread_controller_profiler_metadata);
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
MessagePumpLibevent::InitializeFeatures();
#endif
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS)
PlatformThread::InitializeFeatures();
#endif
#if BUILDFLAG(IS_APPLE)
ConditionVariable::InitializeFeatures();
File::InitializeFeatures();
MessagePumpCFRunLoopBase::InitializeFeatures();
MessagePumpKqueue::InitializeFeatures();
#endif
#if BUILDFLAG(IS_ANDROID)
android::InputHintChecker::InitializeFeatures();
#endif
#if BUILDFLAG(IS_WIN)
sequence_manager::internal::ThreadControllerPowerMonitor::
InitializeFeatures();
InitializePlatformThreadFeatures();
#endif
}
} // namespace base::features