Commit 83822ea8 authored by Nicolás Peña Moreno's avatar Nicolás Peña Moreno Committed by Commit Bot

Reland "Add FirstInputDelay integration test"

This is a reland of 38d5e420

The main fix is adding actual content (a paragraph) to the website being
loaded to ensure that the input is not ignored. In addition to this,
some additional improvements are added to this reland:

* Use content::SimulateMouseClick() since we do not care about the
coordinates.
* Use GetMergedEntriesByName() because PageLoad is singular.

Original change's description:
> Add FirstInputDelay integration test
>
> This CL adds a test for FID that tests equality between the JS value and
> the value reported in UKM and in UMA.
>
> Change-Id: I00de8c947895700d86788ee4a95ea228458bb25f
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2067077
> Commit-Queue: Nicolás Peña Moreno <npm@chromium.org>
> Reviewed-by: Steve Kobes <skobes@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#743212}

Change-Id: Ifb520d97b4bfc0374a24efc5057bee7edc6a3017
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2078834
Commit-Queue: Nicolás Peña Moreno <npm@chromium.org>
Reviewed-by: default avatarSteve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753288}
parent 47110d9c
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/page_load_metrics/integration_tests/metric_integration_test.h"
#include "base/test/trace_event_analyzer.h"
#include "chrome/test/base/ui_test_utils.h"
#include "services/metrics/public/cpp/ukm_builders.h"
using ukm::builders::PageLoad;
IN_PROC_BROWSER_TEST_F(MetricIntegrationTest, FirstInputDelay) {
LoadHTML(R"HTML(
<p>Sample website</p>
<script>
runtest = async () => {
const observePromise = new Promise(resolve => {
new PerformanceObserver(e => {
e.getEntries().forEach(entry => {
const fid = entry.processingStart - entry.startTime;
resolve(fid);
})
}).observe({type: 'first-input', buffered: true});
});
return await observePromise;
};
</script>
)HTML");
StartTracing({"loading"});
content::SimulateMouseClick(web_contents(), 0,
blink::WebMouseEvent::Button::kLeft);
// Check web perf API.
double expected_fid = EvalJs(web_contents(), "runtest()").ExtractDouble();
EXPECT_GT(expected_fid, 0.0);
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
// Check UKM.
ExpectUKMPageLoadMetric(PageLoad::kInteractiveTiming_FirstInputDelay4Name,
expected_fid);
// Check UMA.
histogram_tester().ExpectUniqueSample(
"PageLoad.InteractiveTiming.FirstInputDelay4", expected_fid, 1);
}
...@@ -130,13 +130,10 @@ std::unique_ptr<HttpResponse> MetricIntegrationTest::HandleRequest( ...@@ -130,13 +130,10 @@ std::unique_ptr<HttpResponse> MetricIntegrationTest::HandleRequest(
void MetricIntegrationTest::ExpectUKMPageLoadMetric(StringPiece metric_name, void MetricIntegrationTest::ExpectUKMPageLoadMetric(StringPiece metric_name,
int64_t expected_value) { int64_t expected_value) {
std::vector<const UkmEntry*> entries = std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
ukm_recorder().GetEntriesByName(PageLoad::kEntryName); ukm_recorder().GetMergedEntriesByName(PageLoad::kEntryName);
auto name_filter = [&metric_name](const UkmEntry* entry) { EXPECT_EQ(1ul, merged_entries.size());
return !TestUkmRecorder::EntryHasMetric(entry, metric_name); const auto& kv = merged_entries.begin();
}; TestUkmRecorder::ExpectEntryMetric(kv->second.get(), metric_name,
entries.erase(std::remove_if(entries.begin(), entries.end(), name_filter), expected_value);
entries.end());
EXPECT_EQ(1ul, entries.size());
TestUkmRecorder::ExpectEntryMetric(entries[0], metric_name, expected_value);
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
# found in the LICENSE file. # found in the LICENSE file.
metric_integration_sources = [ metric_integration_sources = [
"//chrome/browser/page_load_metrics/integration_tests/first_input_delay_browsertest.cc",
"//chrome/browser/page_load_metrics/integration_tests/layout_instability_browsertest.cc", "//chrome/browser/page_load_metrics/integration_tests/layout_instability_browsertest.cc",
"//chrome/browser/page_load_metrics/integration_tests/metric_integration_test.cc", "//chrome/browser/page_load_metrics/integration_tests/metric_integration_test.cc",
"//chrome/browser/page_load_metrics/integration_tests/metric_integration_test.h", "//chrome/browser/page_load_metrics/integration_tests/metric_integration_test.h",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment