blob: 8daedb8d702b0748901dea6a8d9a7097134b907b [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.
#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