blob: ac9fb7ae39854aa1e8ab487becd36a82f77f5219 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_INPUT_FEATURES_H_
#define COMPONENTS_INPUT_FEATURES_H_
#include "base/component_export.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace input::features {
#if BUILDFLAG(IS_ANDROID)
// If enabled, touch input on Android is handled on Viz process. The feature is
// still in development and might not have any functional effects yet.
// Design doc for InputVizard project for moving touch input to viz on Android:
// https://docs.google.com/document/d/1mcydbkgFCO_TT9NuFE962L8PLJWT2XOfXUAPO88VuKE
COMPONENT_EXPORT(INPUT) BASE_DECLARE_FEATURE(kInputOnViz);
COMPONENT_EXPORT(INPUT)
extern const base::FeatureParam<bool> kTransferSequencesWithAbnormalDownTime;
// If enabled, Chrome will receive buffered/batched input from Android.
// Specifically, Chrome will NOT call
// https://developer.android.com/reference/kotlin/android/view/View#requestunbuffereddispatch.
// If |kInputOnViz| is also enabled, Chrome will call
// https://developer.android.com/ndk/reference/group/native-activity#ainputreceiver_createbatchedinputreceiver
// instead of the default
// https://developer.android.com/ndk/reference/group/native-activity#ainputreceiver_createunbatchedinputreceiver.
COMPONENT_EXPORT(INPUT) BASE_DECLARE_FEATURE(kUseAndroidBufferedInputDispatch);
#endif
// When enabled, if a synthetic scroll prediction cannot be generated (e.g.,
// due to insufficient history), the next event from the queue is dispatched
// directly without resampling. This ensures that input is not stalled when
// prediction fails.
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE(kDispatchSingleEventIfNoPrediction);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE(kLogBubblingTouchscreenGesturesForDebug);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE(kIgnoreBubblingCollisionIfSourceDevicesMismatch);
COMPONENT_EXPORT(INPUT) BASE_DECLARE_FEATURE(kScrollBubblingFix);
COMPONENT_EXPORT(INPUT) BASE_DECLARE_FEATURE(kRendererHangWatcher);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE_PARAM(base::TimeDelta, kRendererHangWatcherDelay);
// Updates the scroll predictor's input mapping and behavior. When enabled:
// 1. It uses `sample_time` (VSync time - 5ms) as the boundary for a frame's
// events and "looks ahead" at the next event to improve prediction.
// 2. It generates a synthetic scroll event if the queue is empty, keeping
// scrolling smooth even if input events are missed.
// This feature depends on kRefactorCompositorThreadEventQueue being enabled
// to function correctly, as the refactored event queue logic is necessary
// for the new predictor input mapping and synthetic event generation.
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE(kUpdateScrollPredictorInputMapping);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE_PARAM(bool, kGenerateSyntheticScrollPrediction);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE(kUnresponsiveMultipleStackCollection);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE_PARAM(base::TimeDelta,
kUnresponsiveMultipleStackCollectionDelay);
COMPONENT_EXPORT(INPUT)
BASE_DECLARE_FEATURE_PARAM(size_t, kUnresponsiveMultipleStackCollectionCount);
} // namespace input::features
#endif // COMPONENTS_INPUT_FEATURES_H_