Remove expired TimeToScrollUpdateSwapBegin metrics
In 2022 we deprecated TimeToScrollUpdateSwapBegin* metrics in favour of EventLatency* metrics. As the new ones measure until actual presentation of the frame, vs until just the swap time. By now most of these metrics have expired. Two remain in use for finch experiments. This change removes all of the expired ones. We will follow up in the new year by updating finches to use the replacement metrics. Then will remove the remaining TimeToScrollUpdateSwapBegin variants. OBSOLETE_HISTOGRAM[Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2]=deprecated in 2022 now expired. OBSOLETE_HISTOGRAM[Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4]=deprecated in 2022 now expired. OBSOLETE_HISTOGRAM[Event.Latency.ScrollBegin.Scrollbar.TimeToScrollUpdateSwapBegin4]=deprecated in 2022 now expired. OBSOLETE_HISTOGRAM[Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4]=deprecated in 2022 now expired. Low-Coverage-Reason: LatencyTracker is for deprecated metrics we want to remove. Tests written have all been flaky. Not worth adding more coverage. Bug: 1479961 Change-Id: Ibde831df97e0d61d7c576585a6db78d85677e009 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5139669 Reviewed-by: Robert Flack <flackr@chromium.org> Commit-Queue: Jonathan Ross <jonross@chromium.org> Cr-Commit-Position: refs/heads/main@{#1239759}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
611042c952
commit
a0900de01a
content/browser/renderer_host/input
tools/metrics/histograms/metadata/event
ui/latency
@ -251,10 +251,6 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
|
||||
total_ukm_entry_count);
|
||||
|
||||
// UMA histograms.
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
1));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
@ -263,10 +259,6 @@ TEST_F(RenderWidgetHostLatencyTrackerTest,
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin.Wheel."
|
||||
"TimeToScrollUpdateSwapBegin4",
|
||||
1));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel."
|
||||
"TimeToScrollUpdateSwapBegin4",
|
||||
0));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -322,10 +314,6 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, MAYBE_TestWheelToScrollHistograms) {
|
||||
total_ukm_entry_count);
|
||||
|
||||
// UMA histograms.
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
0));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
@ -334,300 +322,10 @@ TEST_F(RenderWidgetHostLatencyTrackerTest, MAYBE_TestWheelToScrollHistograms) {
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin.Wheel."
|
||||
"TimeToScrollUpdateSwapBegin4",
|
||||
0));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate.Wheel."
|
||||
"TimeToScrollUpdateSwapBegin4",
|
||||
1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Flaky on Android. https://crbug.com/970841
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#define MAYBE_TestInertialToScrollHistograms \
|
||||
DISABLED_TestInertialToScrollHistograms
|
||||
#else
|
||||
#define MAYBE_TestInertialToScrollHistograms TestInertialToScrollHistograms
|
||||
#endif
|
||||
|
||||
TEST_F(RenderWidgetHostLatencyTrackerTest,
|
||||
MAYBE_TestInertialToScrollHistograms) {
|
||||
const GURL url(kUrl);
|
||||
contents()->NavigateAndCommit(url);
|
||||
for (bool rendering_on_main : {false, true}) {
|
||||
ResetHistograms();
|
||||
{
|
||||
auto scroll = blink::SyntheticWebGestureEventBuilder::BuildScrollUpdate(
|
||||
5.f, -5.f, 0, blink::WebGestureDevice::kTouchscreen);
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
scroll.SetTimeStamp(now);
|
||||
ui::LatencyInfo scroll_latency(ui::SourceEventType::INERTIAL);
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now);
|
||||
AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now);
|
||||
tracker()->OnInputEvent(scroll, &scroll_latency, &event_latency_metadata);
|
||||
base::TimeTicks begin_rwh_timestamp;
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, &begin_rwh_timestamp));
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
EXPECT_FALSE(
|
||||
event_latency_metadata.arrived_in_browser_main_timestamp.is_null());
|
||||
EXPECT_EQ(event_latency_metadata.arrived_in_browser_main_timestamp,
|
||||
begin_rwh_timestamp);
|
||||
tracker()->OnInputEventAck(
|
||||
scroll, &scroll_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
viz_tracker()->OnGpuSwapBuffersCompleted({scroll_latency});
|
||||
}
|
||||
|
||||
// UMA histograms.
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollInertial.Touch."
|
||||
"TimeToScrollUpdateSwapBegin4",
|
||||
1));
|
||||
}
|
||||
}
|
||||
|
||||
// Flaky on Android. https://crbug.com/970841
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#define MAYBE_TestTouchToFirstScrollHistograms \
|
||||
DISABLED_TestTouchToFirstScrollHistograms
|
||||
#else
|
||||
#define MAYBE_TestTouchToFirstScrollHistograms TestTouchToFirstScrollHistograms
|
||||
#endif
|
||||
|
||||
TEST_F(RenderWidgetHostLatencyTrackerTest,
|
||||
MAYBE_TestTouchToFirstScrollHistograms) {
|
||||
const GURL url(kUrl);
|
||||
contents()->NavigateAndCommit(url);
|
||||
size_t total_ukm_entry_count = 0;
|
||||
ukm::SourceId source_id = static_cast<WebContentsImpl*>(contents())
|
||||
->GetPrimaryMainFrame()
|
||||
->GetPageUkmSourceId();
|
||||
EXPECT_NE(ukm::kInvalidSourceId, source_id);
|
||||
for (bool rendering_on_main : {false, true}) {
|
||||
ResetHistograms();
|
||||
{
|
||||
auto scroll = blink::SyntheticWebGestureEventBuilder::BuildScrollUpdate(
|
||||
5.f, -5.f, 0, blink::WebGestureDevice::kTouchscreen);
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
scroll.SetTimeStamp(now);
|
||||
ui::LatencyInfo scroll_latency;
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now);
|
||||
AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now);
|
||||
tracker()->OnInputEvent(scroll, &scroll_latency, &event_latency_metadata);
|
||||
base::TimeTicks begin_rwh_timestamp;
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, &begin_rwh_timestamp));
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
EXPECT_FALSE(
|
||||
event_latency_metadata.arrived_in_browser_main_timestamp.is_null());
|
||||
EXPECT_EQ(event_latency_metadata.arrived_in_browser_main_timestamp,
|
||||
begin_rwh_timestamp);
|
||||
tracker()->OnInputEventAck(
|
||||
scroll, &scroll_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
}
|
||||
|
||||
{
|
||||
blink::SyntheticWebTouchEvent touch;
|
||||
touch.PressPoint(0, 0);
|
||||
touch.PressPoint(1, 1);
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
ui::LatencyInfo touch_latency(ui::SourceEventType::TOUCH);
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
touch_latency.AddLatencyNumberWithTimestamp(
|
||||
ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT, now);
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &touch_latency, now);
|
||||
AddRenderingScheduledComponent(&touch_latency, rendering_on_main, now);
|
||||
tracker()->OnInputEvent(touch, &touch_latency, &event_latency_metadata);
|
||||
base::TimeTicks begin_rwh_timestamp;
|
||||
EXPECT_TRUE(touch_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, &begin_rwh_timestamp));
|
||||
EXPECT_TRUE(touch_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
EXPECT_FALSE(
|
||||
event_latency_metadata.arrived_in_browser_main_timestamp.is_null());
|
||||
EXPECT_EQ(event_latency_metadata.arrived_in_browser_main_timestamp,
|
||||
begin_rwh_timestamp);
|
||||
tracker()->OnInputEventAck(
|
||||
touch, &touch_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
viz_tracker()->OnGpuSwapBuffersCompleted({touch_latency});
|
||||
}
|
||||
|
||||
// UKM metrics.
|
||||
total_ukm_entry_count++;
|
||||
ExpectUkmReported(
|
||||
source_id, "Event.ScrollBegin.Touch",
|
||||
{"TimeToScrollUpdateSwapBegin", "TimeToHandled", "IsMainThread"},
|
||||
total_ukm_entry_count);
|
||||
|
||||
// UMA histograms.
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
1));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
0));
|
||||
EXPECT_TRUE(HistogramSizeEq(
|
||||
"Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4", 1));
|
||||
|
||||
EXPECT_TRUE(HistogramSizeEq(
|
||||
"Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4", 0));
|
||||
}
|
||||
}
|
||||
|
||||
// Flaky on Android. https://crbug.com/970841
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#define MAYBE_TestTouchToScrollHistograms DISABLED_TestTouchToScrollHistograms
|
||||
#else
|
||||
#define MAYBE_TestTouchToScrollHistograms TestTouchToScrollHistograms
|
||||
#endif
|
||||
|
||||
TEST_F(RenderWidgetHostLatencyTrackerTest, MAYBE_TestTouchToScrollHistograms) {
|
||||
const GURL url(kUrl);
|
||||
contents()->NavigateAndCommit(url);
|
||||
size_t total_ukm_entry_count = 0;
|
||||
ukm::SourceId source_id = static_cast<WebContentsImpl*>(contents())
|
||||
->GetPrimaryMainFrame()
|
||||
->GetPageUkmSourceId();
|
||||
EXPECT_NE(ukm::kInvalidSourceId, source_id);
|
||||
for (bool rendering_on_main : {false, true}) {
|
||||
ResetHistograms();
|
||||
{
|
||||
auto scroll = blink::SyntheticWebGestureEventBuilder::BuildScrollUpdate(
|
||||
5.f, -5.f, 0, blink::WebGestureDevice::kTouchscreen);
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
scroll.SetTimeStamp(now);
|
||||
ui::LatencyInfo scroll_latency;
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &scroll_latency, now);
|
||||
AddRenderingScheduledComponent(&scroll_latency, rendering_on_main, now);
|
||||
tracker()->OnInputEvent(scroll, &scroll_latency, &event_latency_metadata);
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, nullptr));
|
||||
EXPECT_TRUE(scroll_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
tracker()->OnInputEventAck(
|
||||
scroll, &scroll_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
}
|
||||
|
||||
{
|
||||
blink::SyntheticWebTouchEvent touch;
|
||||
touch.PressPoint(0, 0);
|
||||
touch.PressPoint(1, 1);
|
||||
ui::LatencyInfo touch_latency(ui::SourceEventType::TOUCH);
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
touch_latency.AddLatencyNumberWithTimestamp(
|
||||
ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT, now);
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &touch_latency, now);
|
||||
AddRenderingScheduledComponent(&touch_latency, rendering_on_main, now);
|
||||
tracker()->OnInputEvent(touch, &touch_latency, &event_latency_metadata);
|
||||
base::TimeTicks begin_rwh_timestamp;
|
||||
EXPECT_TRUE(touch_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, &begin_rwh_timestamp));
|
||||
EXPECT_TRUE(touch_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
EXPECT_FALSE(
|
||||
event_latency_metadata.arrived_in_browser_main_timestamp.is_null());
|
||||
EXPECT_EQ(event_latency_metadata.arrived_in_browser_main_timestamp,
|
||||
begin_rwh_timestamp);
|
||||
tracker()->OnInputEventAck(
|
||||
touch, &touch_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
viz_tracker()->OnGpuSwapBuffersCompleted({touch_latency});
|
||||
}
|
||||
|
||||
// UKM metrics.
|
||||
total_ukm_entry_count++;
|
||||
ExpectUkmReported(
|
||||
source_id, "Event.ScrollUpdate.Touch",
|
||||
{"TimeToScrollUpdateSwapBegin", "TimeToHandled", "IsMainThread"},
|
||||
total_ukm_entry_count);
|
||||
|
||||
// UMA histograms.
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollBegin."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
0));
|
||||
EXPECT_TRUE(
|
||||
HistogramSizeEq("Event.Latency.ScrollUpdate."
|
||||
"TimeToScrollUpdateSwapBegin2",
|
||||
1));
|
||||
EXPECT_TRUE(HistogramSizeEq(
|
||||
"Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4", 0));
|
||||
EXPECT_TRUE(HistogramSizeEq(
|
||||
"Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4", 1));
|
||||
}
|
||||
}
|
||||
|
||||
// Flaky on Android. https://crbug.com/970841
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#define MAYBE_ScrollbarEndToEndHistograms DISABLED_ScrollbarEndToEndHistograms
|
||||
#else
|
||||
#define MAYBE_ScrollbarEndToEndHistograms ScrollbarEndToEndHistograms
|
||||
#endif
|
||||
|
||||
TEST_F(RenderWidgetHostLatencyTrackerTest, MAYBE_ScrollbarEndToEndHistograms) {
|
||||
// For all combinations of ScrollBegin/ScrollUpdate main/impl rendering,
|
||||
// ensure that the LatencyTracker logs the correct set of histograms.
|
||||
const GURL url(kUrl);
|
||||
contents()->NavigateAndCommit(url);
|
||||
ResetHistograms();
|
||||
{
|
||||
auto mouse_move = blink::SyntheticWebMouseEventBuilder::Build(
|
||||
blink::WebMouseEvent::Type::kMouseMove);
|
||||
base::TimeTicks now = base::TimeTicks::Now();
|
||||
|
||||
const ui::LatencyComponentType scroll_components[] = {
|
||||
ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT,
|
||||
ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT,
|
||||
};
|
||||
for (ui::LatencyComponentType component : scroll_components) {
|
||||
const bool on_main[] = {true, false};
|
||||
for (bool on_main_thread : on_main) {
|
||||
ui::LatencyInfo scrollbar_latency(ui::SourceEventType::SCROLLBAR);
|
||||
ui::EventLatencyMetadata event_latency_metadata;
|
||||
AddFakeComponentsWithTimeStamp(*tracker(), &scrollbar_latency, now);
|
||||
scrollbar_latency.AddLatencyNumberWithTimestamp(component, now);
|
||||
AddRenderingScheduledComponent(&scrollbar_latency, on_main_thread, now);
|
||||
tracker()->OnInputEvent(mouse_move, &scrollbar_latency,
|
||||
&event_latency_metadata);
|
||||
base::TimeTicks begin_rwh_timestamp;
|
||||
EXPECT_TRUE(scrollbar_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, &begin_rwh_timestamp));
|
||||
EXPECT_TRUE(scrollbar_latency.FindLatency(
|
||||
ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, nullptr));
|
||||
EXPECT_FALSE(
|
||||
event_latency_metadata.arrived_in_browser_main_timestamp.is_null());
|
||||
EXPECT_EQ(event_latency_metadata.arrived_in_browser_main_timestamp,
|
||||
begin_rwh_timestamp);
|
||||
tracker()->OnInputEventAck(
|
||||
mouse_move, &scrollbar_latency,
|
||||
blink::mojom::InputEventResultState::kNotConsumed);
|
||||
viz_tracker()->OnGpuSwapBuffersCompleted({scrollbar_latency});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const std::string scroll_types[] = {"ScrollBegin", "ScrollUpdate"};
|
||||
for (const std::string& scroll_type : scroll_types) {
|
||||
// Each histogram that doesn't take main/impl into account should have
|
||||
// two samples (one each for main and impl).
|
||||
const std::string histogram_prefix = "Event.Latency." + scroll_type;
|
||||
histogram_tester().ExpectUniqueSample(
|
||||
histogram_prefix + ".Scrollbar.TimeToScrollUpdateSwapBegin4", 0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(RenderWidgetHostLatencyTrackerTest, LatencyTerminatedOnAckIfGSUIgnored) {
|
||||
for (blink::WebGestureDevice source_device :
|
||||
{blink::WebGestureDevice::kTouchscreen,
|
||||
|
@ -172,22 +172,6 @@ class ScrollLatencyBrowserTest : public ContentBrowserTest {
|
||||
visual_state_callback_count_++;
|
||||
}
|
||||
|
||||
void RunMultipleWheelScroll() {
|
||||
DoSmoothWheelScroll(gfx::Vector2d(0, 100));
|
||||
// We expect to see one ScrollBegin and two ScrollUpdate swap values.
|
||||
while (!VerifyRecordedSamplesForHistogram(
|
||||
1, "Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin4")) {
|
||||
GiveItSomeTime();
|
||||
FetchHistogramsFromChildProcesses();
|
||||
}
|
||||
|
||||
while (!VerifyRecordedSamplesForHistogram(
|
||||
1, "Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin4")) {
|
||||
GiveItSomeTime();
|
||||
FetchHistogramsFromChildProcesses();
|
||||
}
|
||||
}
|
||||
|
||||
// Returns true if the given histogram has recorded the expected number of
|
||||
// samples.
|
||||
[[nodiscard]] bool VerifyRecordedSamplesForHistogram(
|
||||
@ -207,22 +191,6 @@ class ScrollLatencyBrowserTest : public ContentBrowserTest {
|
||||
uint32_t visual_state_callback_count_ = 0;
|
||||
};
|
||||
|
||||
// Disabled due to flakiness https://crbug.com/1163246.
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \
|
||||
BUILDFLAG(IS_ANDROID) || \
|
||||
(BUILDFLAG(IS_CHROMEOS) && defined(ADDRESS_SANITIZER))
|
||||
#define MAYBE_MultipleWheelScroll DISABLED_MultipleWheelScroll
|
||||
#else
|
||||
#define MAYBE_MultipleWheelScroll MultipleWheelScroll
|
||||
#endif
|
||||
|
||||
// Perform a smooth wheel scroll, and verify that our end-to-end wheel latency
|
||||
// metrics are recorded. See crbug.com/599910 for details.
|
||||
IN_PROC_BROWSER_TEST_F(ScrollLatencyBrowserTest, MAYBE_MultipleWheelScroll) {
|
||||
LoadURL();
|
||||
RunMultipleWheelScroll();
|
||||
}
|
||||
|
||||
// Do an upward touch scroll, and verify that no scroll metrics is recorded when
|
||||
// the scroll event is ignored.
|
||||
IN_PROC_BROWSER_TEST_F(ScrollLatencyBrowserTest,
|
||||
@ -260,9 +228,6 @@ IN_PROC_BROWSER_TEST_F(ScrollLatencyBrowserTest,
|
||||
GetWidgetHost()->render_frame_metadata_provider());
|
||||
frame_observer->WaitForAnyFrameSubmission();
|
||||
|
||||
FetchHistogramsFromChildProcesses();
|
||||
EXPECT_TRUE(VerifyRecordedSamplesForHistogram(
|
||||
0, "Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4"));
|
||||
EXPECT_TRUE(VerifyRecordedSamplesForHistogram(
|
||||
0, "EventLatency.GestureScrollUpdate.TotalLatency"));
|
||||
}
|
||||
@ -300,103 +265,4 @@ IN_PROC_BROWSER_TEST_F(ScrollLatencyBrowserTest, ScrollingEventLatencyTrace) {
|
||||
}
|
||||
#endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
|
||||
|
||||
class ScrollLatencyScrollbarBrowserTest : public ScrollLatencyBrowserTest {
|
||||
public:
|
||||
ScrollLatencyScrollbarBrowserTest() = default;
|
||||
|
||||
void SetUpCommandLine(base::CommandLine* command_line) override {
|
||||
ScrollLatencyBrowserTest::SetUpCommandLine(command_line);
|
||||
command_line->AppendSwitch(::switches::kDisableSmoothScrolling);
|
||||
|
||||
// The following features need to be disabled:
|
||||
// - kOverlayScrollbar since overlay scrollbars are not hit-testable (thus
|
||||
// input is not routed to scrollbars).
|
||||
scoped_feature_list_.InitWithFeaturesAndParameters(
|
||||
{}, {features::kOverlayScrollbar});
|
||||
}
|
||||
|
||||
~ScrollLatencyScrollbarBrowserTest() override = default;
|
||||
|
||||
private:
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
// Native scrollbars on Mac are overlay scrollbars. Hence they need to be
|
||||
// disabled.
|
||||
ui::test::ScopedPreferredScrollerStyle scroller_style_override{false};
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void RunScrollbarThumbDragLatencyTest() {
|
||||
// See above comment in RunScrollbarButtonLatencyTest for why this test
|
||||
// doesn't run on Android.
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Click on the scrollbar thumb and drag it twice to induce a compositor
|
||||
// thread scrollbar ScrollBegin and ScrollUpdate.
|
||||
gfx::PointF scrollbar_thumb(795, 30);
|
||||
blink::WebMouseEvent mouse_down =
|
||||
blink::SyntheticWebMouseEventBuilder::Build(
|
||||
blink::WebInputEvent::Type::kMouseDown, scrollbar_thumb.x(),
|
||||
scrollbar_thumb.y(), 0);
|
||||
mouse_down.button = blink::WebMouseEvent::Button::kLeft;
|
||||
mouse_down.SetTimeStamp(base::TimeTicks::Now());
|
||||
GetWidgetHost()->ForwardMouseEvent(mouse_down);
|
||||
|
||||
// This is to avoid a race condition where a mousemove is processed before
|
||||
// the renderer has had a chance to set up the scroll state (like the
|
||||
// scroll_node etc). This happens due to the fact that when the renderer
|
||||
// gets a mousedown, it is first "queued" as a GSB. At this point, the
|
||||
// scroll node is not yet set up. Now, if a mousemove is sent from the
|
||||
// browser proc before a frame is generated, it gets dispatched immediately
|
||||
// and this can lead to nullptr derefernces.
|
||||
RunUntilInputProcessed(GetWidgetHost());
|
||||
|
||||
blink::WebMouseEvent mouse_move =
|
||||
blink::SyntheticWebMouseEventBuilder::Build(
|
||||
blink::WebInputEvent::Type::kMouseMove, scrollbar_thumb.x(),
|
||||
scrollbar_thumb.y() + 10, 0);
|
||||
mouse_move.button = blink::WebMouseEvent::Button::kLeft;
|
||||
mouse_move.SetTimeStamp(base::TimeTicks::Now());
|
||||
GetWidgetHost()->ForwardMouseEvent(mouse_move);
|
||||
RunUntilInputProcessed(GetWidgetHost());
|
||||
|
||||
mouse_move.SetPositionInWidget(scrollbar_thumb.x(),
|
||||
scrollbar_thumb.y() + 20);
|
||||
mouse_move.SetPositionInScreen(scrollbar_thumb.x(),
|
||||
scrollbar_thumb.y() + 20);
|
||||
GetWidgetHost()->ForwardMouseEvent(mouse_move);
|
||||
RunUntilInputProcessed(GetWidgetHost());
|
||||
|
||||
blink::WebMouseEvent mouse_up = blink::SyntheticWebMouseEventBuilder::Build(
|
||||
blink::WebInputEvent::Type::kMouseUp, scrollbar_thumb.x(),
|
||||
scrollbar_thumb.y() + 20, 0);
|
||||
mouse_up.button = blink::WebMouseEvent::Button::kLeft;
|
||||
mouse_up.SetTimeStamp(base::TimeTicks::Now());
|
||||
GetWidgetHost()->ForwardMouseEvent(mouse_up);
|
||||
|
||||
RunUntilInputProcessed(GetWidgetHost());
|
||||
|
||||
FetchHistogramsFromChildProcesses();
|
||||
EXPECT_GT(
|
||||
GetSampleCountForHistogram(
|
||||
"Event.Latency.ScrollBegin.Scrollbar.TimeToScrollUpdateSwapBegin4"),
|
||||
0u);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
}
|
||||
|
||||
base::test::ScopedFeatureList scoped_feature_list_;
|
||||
};
|
||||
|
||||
// Crashes on Mac ASAN. https://crbug.com/1188553
|
||||
// TODO(crbug.com/1188553): Flaky on Linux Wayland CI/CQ builders.
|
||||
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
|
||||
#define MAYBE_ScrollbarThumbDragLatency DISABLED_ScrollbarThumbDragLatency
|
||||
#else
|
||||
#define MAYBE_ScrollbarThumbDragLatency ScrollbarThumbDragLatency
|
||||
#endif
|
||||
IN_PROC_BROWSER_TEST_F(ScrollLatencyScrollbarBrowserTest,
|
||||
MAYBE_ScrollbarThumbDragLatency) {
|
||||
LoadURL();
|
||||
|
||||
RunScrollbarThumbDragLatencyTest();
|
||||
}
|
||||
|
||||
} // namespace content
|
||||
|
@ -48,11 +48,6 @@ chromium-metrics-reviews@google.com.
|
||||
summary="small scrolls - number of presented frames between [1,16]"/>
|
||||
</variants>
|
||||
|
||||
<variants name="TopControlsState">
|
||||
<variant name=".NoTopControlsMoved" summary="Top controls did not change."/>
|
||||
<variant name=".TopControlsMoved" summary="Top controls changed."/>
|
||||
</variants>
|
||||
|
||||
<histogram name="Event.AndroidActionDown.ToolType" enum="MotionEventToolType"
|
||||
expires_after="never">
|
||||
<!-- expires-never: Needed for long-term usage tracking for different types of
|
||||
@ -408,53 +403,6 @@ chromium-metrics-reviews@google.com.
|
||||
</token>
|
||||
</histogram>
|
||||
|
||||
<histogram
|
||||
name="Event.Latency.ScrollBegin.Scrollbar.TimeToScrollUpdateSwapBegin4"
|
||||
units="microseconds" expires_after="2023-08-08">
|
||||
<owner>nzolghadr@chromium.org</owner>
|
||||
<owner>gerchiko@microsoft.com</owner>
|
||||
<owner>input-dev@chromium.org</owner>
|
||||
<owner>speed-metrics-dev@chromium.org</owner>
|
||||
<summary>
|
||||
NOTE: This metric is deprecated in favor of
|
||||
EventLatency.FirstGestureScrollUpdate.Scrollbar.TotalLatency metric (see
|
||||
crbug.com/1054021).
|
||||
|
||||
Time between initial creation of an input event that resulted in a scrollbar
|
||||
scroll and the start of the frame swap on the GPU service caused by the
|
||||
generated ScrollUpdate gesture event if that ScrollUpdate is the first such
|
||||
event in a given scroll gesture event sequence. If no swap was induced by
|
||||
the event, no recording is made.
|
||||
|
||||
Do not modify this metric in any way without contacting
|
||||
speed-metrics-dev@chromium.org.
|
||||
|
||||
Warning: This metric may include reports from clients with low-resolution
|
||||
clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
|
||||
will cause this metric to have an abnormal distribution. When considering
|
||||
revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
|
||||
solution.
|
||||
</summary>
|
||||
</histogram>
|
||||
|
||||
<histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2"
|
||||
units="microseconds" expires_after="2023-10-22">
|
||||
<owner>nzolghadr@chromium.org</owner>
|
||||
<summary>
|
||||
NOTE: This metric is deprecated in favor of
|
||||
EventLatency.FirstGestureScrollUpdate.TotalLatency metric (see
|
||||
crbug.com/1054021).
|
||||
|
||||
Time between initial creation of a wheel/touch event and start of the frame
|
||||
swap on the GPU service caused by the generated ScrollUpdate gesture event
|
||||
if that ScrollUpdate is the first such event in a given scroll gesture event
|
||||
sequence. If no swap was induced by the event, no recording is made. If no
|
||||
swap was induced by the event, no recording is made.
|
||||
|
||||
Team: input-dev@chromium.org.
|
||||
</summary>
|
||||
</histogram>
|
||||
|
||||
<histogram name="Event.Latency.ScrollBegin.Touch.AverageLagPresentation"
|
||||
units="pixels" expires_after="2024-06-12">
|
||||
<owner>flackr@chromium.org</owner>
|
||||
@ -499,36 +447,6 @@ chromium-metrics-reviews@google.com.
|
||||
</summary>
|
||||
</histogram>
|
||||
|
||||
<histogram
|
||||
name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}"
|
||||
units="microseconds" expires_after="2023-06-30">
|
||||
<owner>flackr@chromium.org</owner>
|
||||
<owner>input-dev@chromium.org</owner>
|
||||
<owner>speed-metrics-dev@chromium.org</owner>
|
||||
<summary>
|
||||
NOTE: This metric is deprecated in favor of
|
||||
EventLatency.FirstGestureScrollUpdate.Touchscreen.TotalLatency metric (see
|
||||
crbug.com/1054021).
|
||||
|
||||
Time between initial creation of a touch event and the start of the frame
|
||||
swap on the GPU service caused by the generated ScrollUpdate gesture event
|
||||
if that ScrollUpdate is the first such event in a given scroll gesture event
|
||||
sequence. If no swap was induced by the event, no recording is made.
|
||||
|
||||
Do not modify this metric in any way without contacting
|
||||
speed-metrics-dev@chromium.org.
|
||||
|
||||
Warning: This metric may include reports from clients with low-resolution
|
||||
clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
|
||||
will cause this metric to have an abnormal distribution. When considering
|
||||
revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
|
||||
solution. {TopControlsState}
|
||||
</summary>
|
||||
<token key="TopControlsState" variants="TopControlsState">
|
||||
<variant name=""/>
|
||||
</token>
|
||||
</histogram>
|
||||
|
||||
<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin4"
|
||||
units="microseconds" expires_after="2024-04-28">
|
||||
<owner>flackr@chromium.org</owner>
|
||||
@ -768,38 +686,6 @@ chromium-metrics-reviews@google.com.
|
||||
</token>
|
||||
</histogram>
|
||||
|
||||
<histogram
|
||||
name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}"
|
||||
units="microseconds" expires_after="2023-06-30">
|
||||
<owner>flackr@chromium.org</owner>
|
||||
<owner>sullivan@chromium.org</owner>
|
||||
<owner>input-dev@chromium.org</owner>
|
||||
<owner>speed-metrics-dev@chromium.org</owner>
|
||||
<owner>chrome-analysis-team@google.com</owner>
|
||||
<summary>
|
||||
NOTE: This metric is deprecated in favor of
|
||||
EventLatency.GestureScrollUpdate.Touchscreen.TotalLatency metric (see
|
||||
crbug.com/1054021).
|
||||
|
||||
Time between initial creation of a touch event and start of the frame swap
|
||||
on the GPU service caused by the generated ScrollUpdate gesture event. If no
|
||||
swap was induced by the event, no recording is made. The first GSU of every
|
||||
scrolling sequence is excluded from this metric.
|
||||
|
||||
Do not modify this metric in any way without contacting
|
||||
speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.
|
||||
|
||||
Warning: This metric may include reports from clients with low-resolution
|
||||
clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
|
||||
will cause this metric to have an abnormal distribution. When considering
|
||||
revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
|
||||
solution. {TopControlsState}
|
||||
</summary>
|
||||
<token key="TopControlsState" variants="TopControlsState">
|
||||
<variant name=""/>
|
||||
</token>
|
||||
</histogram>
|
||||
|
||||
<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin4"
|
||||
units="microseconds" expires_after="2024-04-28">
|
||||
<owner>flackr@chromium.org</owner>
|
||||
|
@ -408,30 +408,11 @@ void LatencyTracker::ComputeEndToEndLatencyHistograms(
|
||||
ScrollType scroll_type =
|
||||
IsInertialScroll(latency) ? ScrollType::kInertial : ScrollType::kBegin;
|
||||
|
||||
// This UMA metric tracks the performance of overall scrolling as a high
|
||||
// level metric.
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS(
|
||||
"Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2",
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
|
||||
// This UMA metric tracks the time between the final frame swap for the
|
||||
// first scroll event in a sequence and the original timestamp of that
|
||||
// scroll event's underlying touch/wheel event.
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS_GROUP(
|
||||
"TimeToScrollUpdateSwapBegin4", scroll_type, input_modality,
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
|
||||
// Report the latency metric separately for the scrolls that caused the
|
||||
// top-controls to scroll and the ones that didn't.
|
||||
if (top_controls_visible_height_changed) {
|
||||
if (scroll_type == ScrollType::kBegin &&
|
||||
input_modality == ScrollInputModality::kWheel) {
|
||||
// scroll event's underlying touch/wheel event.
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS_GROUP(
|
||||
"TimeToScrollUpdateSwapBegin4.TopControlsMoved", scroll_type,
|
||||
input_modality,
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
} else {
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS_GROUP(
|
||||
"TimeToScrollUpdateSwapBegin4.NoTopControlsMoved", scroll_type,
|
||||
input_modality,
|
||||
"TimeToScrollUpdateSwapBegin4", scroll_type, input_modality,
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
}
|
||||
|
||||
@ -458,12 +439,15 @@ void LatencyTracker::ComputeEndToEndLatencyHistograms(
|
||||
"Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin2",
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
|
||||
// This UMA metric tracks the time from when the original touch/wheel event
|
||||
// is created to when the scroll gesture results in final frame swap.
|
||||
// First scroll events are excluded from this metric.
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS_GROUP(
|
||||
"TimeToScrollUpdateSwapBegin4", scroll_type, input_modality,
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
if (scroll_type == ScrollType::kBegin &&
|
||||
input_modality == ScrollInputModality::kWheel) {
|
||||
// This UMA metric tracks the time from when the original touch/wheel
|
||||
// event is created to when the scroll gesture results in final frame
|
||||
// swap. First scroll events are excluded from this metric.
|
||||
UMA_HISTOGRAM_INPUT_LATENCY_5_SECONDS_MAX_MICROSECONDS_GROUP(
|
||||
"TimeToScrollUpdateSwapBegin4", scroll_type, input_modality,
|
||||
ComputeLatency(original_timestamp, gpu_swap_begin_timestamp));
|
||||
}
|
||||
|
||||
// Also report the latency metric separately for the scrolls that caused the
|
||||
// top-controls to scroll and the ones that didn't.
|
||||
|
Reference in New Issue
Block a user