// 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. #include "components/input/utils.h" #include "build/build_config.h" #include "third_party/blink/public/mojom/input/input_event_result.mojom-shared.h" #if BUILDFLAG(IS_ANDROID) #include "base/android/build_info.h" #include "components/input/features.h" #endif namespace input { using blink::WebInputEvent; using blink::mojom::InputEventResultState; using perfetto::protos::pbzero::ChromeLatencyInfo2; bool IsTransferInputToVizSupported() { #if BUILDFLAG(IS_ANDROID) if (base::FeatureList::IsEnabled(input::features::kInputOnViz) && (base::android::BuildInfo::GetInstance()->sdk_int() >= base::android::SdkVersion::SDK_VERSION_V)) { return true; } #endif return false; } ChromeLatencyInfo2::InputType InputEventTypeToProto( blink::WebInputEvent::Type event_type) { switch (event_type) { case WebInputEvent::Type::kUndefined: return ChromeLatencyInfo2::InputType::UNDEFINED_EVENT; case WebInputEvent::Type::kMouseDown: return ChromeLatencyInfo2::InputType::MOUSE_DOWN_EVENT; case WebInputEvent::Type::kMouseUp: return ChromeLatencyInfo2::InputType::MOUSE_UP_EVENT; case WebInputEvent::Type::kMouseMove: return ChromeLatencyInfo2::InputType::MOUSE_MOVE_EVENT; case WebInputEvent::Type::kMouseEnter: return ChromeLatencyInfo2::InputType::MOUSE_ENTER_EVENT; case WebInputEvent::Type::kMouseLeave: return ChromeLatencyInfo2::InputType::MOUSE_LEAVE_EVENT; case WebInputEvent::Type::kContextMenu: return ChromeLatencyInfo2::InputType::CONTEXT_MENU_EVENT; case WebInputEvent::Type::kMouseWheel: return ChromeLatencyInfo2::InputType::MOUSE_WHEEL_EVENT; case WebInputEvent::Type::kRawKeyDown: return ChromeLatencyInfo2::InputType::RAW_KEY_DOWN_EVENT; case WebInputEvent::Type::kKeyDown: return ChromeLatencyInfo2::InputType::KEY_DOWN_EVENT; case WebInputEvent::Type::kKeyUp: return ChromeLatencyInfo2::InputType::KEY_UP_EVENT; case WebInputEvent::Type::kChar: return ChromeLatencyInfo2::InputType::CHAR_EVENT; case WebInputEvent::Type::kGestureScrollBegin: return ChromeLatencyInfo2::InputType::GESTURE_SCROLL_BEGIN_EVENT; case WebInputEvent::Type::kGestureScrollEnd: return ChromeLatencyInfo2::InputType::GESTURE_SCROLL_END_EVENT; case WebInputEvent::Type::kGestureScrollUpdate: return ChromeLatencyInfo2::InputType::GESTURE_SCROLL_UPDATE_EVENT; case WebInputEvent::Type::kGestureFlingStart: return ChromeLatencyInfo2::InputType::GESTURE_FLING_START_EVENT; case WebInputEvent::Type::kGestureFlingCancel: return ChromeLatencyInfo2::InputType::GESTURE_FLING_CANCEL_EVENT; case WebInputEvent::Type::kGesturePinchBegin: return ChromeLatencyInfo2::InputType::GESTURE_PINCH_BEGIN_EVENT; case WebInputEvent::Type::kGesturePinchEnd: return ChromeLatencyInfo2::InputType::GESTURE_PINCH_END_EVENT; case WebInputEvent::Type::kGesturePinchUpdate: return ChromeLatencyInfo2::InputType::GESTURE_PINCH_UPDATE_EVENT; case WebInputEvent::Type::kGestureBegin: return ChromeLatencyInfo2::InputType::GESTURE_BEGIN_EVENT; case WebInputEvent::Type::kGestureTapDown: return ChromeLatencyInfo2::InputType::GESTURE_TAP_DOWN_EVENT; case WebInputEvent::Type::kGestureShowPress: return ChromeLatencyInfo2::InputType::GESTURE_SHOW_PRESS_EVENT; case WebInputEvent::Type::kGestureTap: return ChromeLatencyInfo2::InputType::GESTURE_TAP_EVENT; case WebInputEvent::Type::kGestureTapCancel: return ChromeLatencyInfo2::InputType::GESTURE_TAP_CANCEL_EVENT; case WebInputEvent::Type::kGestureShortPress: return ChromeLatencyInfo2::InputType::GESTURE_SHORT_PRESS_EVENT; case WebInputEvent::Type::kGestureLongPress: return ChromeLatencyInfo2::InputType::GESTURE_LONG_PRESS_EVENT; case WebInputEvent::Type::kGestureLongTap: return ChromeLatencyInfo2::InputType::GESTURE_LONG_TAP_EVENT; case WebInputEvent::Type::kGestureTwoFingerTap: return ChromeLatencyInfo2::InputType::GESTURE_TWO_FINGER_TAP_EVENT; case WebInputEvent::Type::kGestureTapUnconfirmed: return ChromeLatencyInfo2::InputType::GESTURE_TAP_UNCONFIRMED_EVENT; case WebInputEvent::Type::kGestureDoubleTap: return ChromeLatencyInfo2::InputType::GESTURE_DOUBLE_TAP_EVENT; case WebInputEvent::Type::kGestureEnd: return ChromeLatencyInfo2::InputType::GESTURE_END_EVENT; case WebInputEvent::Type::kTouchStart: return ChromeLatencyInfo2::InputType::TOUCH_START_EVENT; case WebInputEvent::Type::kTouchMove: return ChromeLatencyInfo2::InputType::TOUCH_MOVE_EVENT; case WebInputEvent::Type::kTouchEnd: return ChromeLatencyInfo2::InputType::TOUCH_END_EVENT; case WebInputEvent::Type::kTouchCancel: return ChromeLatencyInfo2::InputType::TOUCH_CANCEL_EVENT; case WebInputEvent::Type::kTouchScrollStarted: return ChromeLatencyInfo2::InputType::TOUCH_SCROLL_STARTED_EVENT; case WebInputEvent::Type::kPointerDown: return ChromeLatencyInfo2::InputType::POINTER_DOWN_EVENT; case WebInputEvent::Type::kPointerUp: return ChromeLatencyInfo2::InputType::POINTER_UP_EVENT; case WebInputEvent::Type::kPointerMove: return ChromeLatencyInfo2::InputType::POINTER_MOVE_EVENT; case WebInputEvent::Type::kPointerRawUpdate: return ChromeLatencyInfo2::InputType::POINTER_RAW_UPDATE_EVENT; case WebInputEvent::Type::kPointerCancel: return ChromeLatencyInfo2::InputType::POINTER_CANCEL_EVENT; case WebInputEvent::Type::kPointerCausedUaAction: return ChromeLatencyInfo2::InputType::POINTER_CAUSED_UA_ACTION_EVENT; } } ChromeLatencyInfo2::InputResultState InputEventResultStateToProto( InputEventResultState result_state) { switch (result_state) { case InputEventResultState::kUnknown: return ChromeLatencyInfo2::InputResultState::UNKNOWN; case InputEventResultState::kConsumed: return ChromeLatencyInfo2::InputResultState::CONSUMED; case InputEventResultState::kNotConsumed: return ChromeLatencyInfo2::InputResultState::NOT_CONSUMED; case InputEventResultState::kNoConsumerExists: return ChromeLatencyInfo2::InputResultState::NO_CONSUMER_EXISTS; case InputEventResultState::kIgnored: return ChromeLatencyInfo2::InputResultState::IGNORED; case InputEventResultState::kSetNonBlocking: return ChromeLatencyInfo2::InputResultState::SET_NON_BLOCKING; case InputEventResultState::kSetNonBlockingDueToFling: return ChromeLatencyInfo2::InputResultState:: SET_NON_BLOCKING_DUE_TO_FLING; } } } // namespace input