0

[tracing] Hoist (over)scroll unused delta tracing

This CL removes the following arguments from
InputHandlerProxy::DidOverscroll():

  debug.dx
  debug.dy

and adds the following arguments to
InputHandlerProxy::HandleGestureScrollUpdate_Result instead:

  scroll_deltas.did_overscroll_root
  scroll_deltas.unused_delta_x
  scroll_deltas.unused_delta_y

This has two benefits:

  1. We will be able to get unused deltas from field traces.
  2. The unused delta will be logged together with other scroll
     delta-related information (so less work will be required at
     analysis time).

PERFETTO_TESTS=`autoninja -C out/Default perfetto_diff_tests && out/Default/bin/run_perfetto_diff_tests`

Bug: b:394015537
Change-Id: I4db6a11cbc8c0fe5df7a6c8573e9b3f1ee0391ae
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6225802
Commit-Queue: Petr Cermak <petrcermak@chromium.org>
Auto-Submit: Petr Cermak <petrcermak@chromium.org>
Commit-Queue: Jonathan Ross <jonross@chromium.org>
Reviewed-by: Jonathan Ross <jonross@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1416157}
This commit is contained in:
Petr Cermak
2025-02-05 07:50:44 -08:00
committed by Chromium LUCI CQ
parent 362b373187
commit 5a940d8407
3 changed files with 18 additions and 11 deletions
base/tracing/protos
services/tracing/perfetto
third_party/blink/renderer/platform/widget/input

@ -1281,6 +1281,13 @@ message ScrollDeltas {
// The array of predicted deltas of inputs which were shown together in one
// GPU frame.
repeated float segregated_predicted_deltas_in_gpu_frame_y = 14;
// Data for overscrolls.
// Whether any of the scroll delta was unused.
optional bool did_overscroll_root = 15;
// The amount of the scroll delta that was not used for scrolling.
optional float unused_delta_x = 16;
optional float unused_delta_y = 17;
}
// Debug information for system layer of audio rendering on Windows.

@ -380,8 +380,8 @@ constexpr MessageInfo kTabSwitchMeasurement = {kTabSwitchMeasurementIndices,
nullptr};
// Proto Message: ScrollDeltas
constexpr int kScrollDeltasIndices[] = {1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, -1};
constexpr int kScrollDeltasIndices[] = {1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, -1};
constexpr MessageInfo kScrollDeltas = {kScrollDeltasIndices, nullptr};
// Proto Message: WinRenderAudioFromSource

@ -1202,17 +1202,19 @@ InputHandlerProxy::HandleGestureScrollUpdate(
TRACE_EVENT(
"input,input.scrolling",
"InputHandlerProxy::HandleGestureScrollUpdate_Result",
[trace_id, provided_delta_x, provided_delta_y,
visual_offset_x = scroll_result.current_visual_offset.x(),
visual_offset_y = scroll_result.current_visual_offset.y()](
perfetto::EventContext& ctx) {
[&](perfetto::EventContext& ctx) {
auto* event = ctx.event<perfetto::protos::pbzero::ChromeTrackEvent>();
auto* scroll_data = event->set_scroll_deltas();
scroll_data->set_trace_id(trace_id);
scroll_data->set_provided_to_compositor_delta_x(provided_delta_x);
scroll_data->set_provided_to_compositor_delta_y(provided_delta_y);
scroll_data->set_visual_offset_x(visual_offset_x);
scroll_data->set_visual_offset_y(visual_offset_y);
scroll_data->set_visual_offset_x(
scroll_result.current_visual_offset.x());
scroll_data->set_visual_offset_y(
scroll_result.current_visual_offset.y());
scroll_data->set_did_overscroll_root(scroll_result.did_overscroll_root);
scroll_data->set_unused_delta_x(scroll_result.unused_scroll_delta.x());
scroll_data->set_unused_delta_y(scroll_result.unused_scroll_delta.y());
});
HandleOverscroll(gesture_event.PositionInWidget(), scroll_result);
@ -1715,9 +1717,7 @@ void InputHandlerProxy::HandleOverscroll(
if (!scroll_result.did_overscroll_root)
return;
TRACE_EVENT2("input", "InputHandlerProxy::DidOverscroll", "dx",
scroll_result.unused_scroll_delta.x(), "dy",
scroll_result.unused_scroll_delta.y());
TRACE_EVENT("input", "InputHandlerProxy::DidOverscroll");
// Bundle overscroll message with triggering event response, saving an IPC.
current_overscroll_params_ = std::make_unique<DidOverscrollParams>();