Commit 6243819b authored by Doug Arnett's avatar Doug Arnett Committed by Commit Bot

Adds UKM force deferred script counts for mainframe for DeferAllScript

Creates and populates new UKM PreviewsDeferAllScript event to report
the count of scripts force deferred in the mainframe.

Bug: 978568
Change-Id: I7e7d87d0a181559832e1a4c6a1682db543790434
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1715109Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Commit-Queue: Doug Arnett <dougarnett@chromium.org>
Cr-Commit-Position: refs/heads/master@{#680567}
parent 06c1f04a
...@@ -199,7 +199,6 @@ class DeferAllScriptBrowserTest : public InProcessBrowserTest { ...@@ -199,7 +199,6 @@ class DeferAllScriptBrowserTest : public InProcessBrowserTest {
IN_PROC_BROWSER_TEST_F( IN_PROC_BROWSER_TEST_F(
DeferAllScriptBrowserTest, DeferAllScriptBrowserTest,
DISABLE_ON_WIN_MAC_CHROMESOS(DeferAllScriptHttpsWhitelisted)) { DISABLE_ON_WIN_MAC_CHROMESOS(DeferAllScriptHttpsWhitelisted)) {
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
GURL url = https_url(); GURL url = https_url();
...@@ -207,6 +206,7 @@ IN_PROC_BROWSER_TEST_F( ...@@ -207,6 +206,7 @@ IN_PROC_BROWSER_TEST_F(
SetDeferAllScriptHintWithPageWithPattern(url, "*"); SetDeferAllScriptHintWithPageWithPattern(url, "*");
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
ui_test_utils::NavigateToURL(browser(), url); ui_test_utils::NavigateToURL(browser(), url);
...@@ -228,12 +228,21 @@ IN_PROC_BROWSER_TEST_F( ...@@ -228,12 +228,21 @@ IN_PROC_BROWSER_TEST_F(
"Blink.Script.ForceDeferredScripts.Mainframe", 2, 1); "Blink.Script.ForceDeferredScripts.Mainframe", 2, 1);
histogram_tester.ExpectUniqueSample( histogram_tester.ExpectUniqueSample(
"Blink.Script.ForceDeferredScripts.Mainframe.External", 1, 1); "Blink.Script.ForceDeferredScripts.Mainframe.External", 1, 1);
// Verify UKM force deferred count entries.
using UkmDeferEntry = ukm::builders::PreviewsDeferAllScript;
auto entries = test_ukm_recorder.GetEntriesByName(UkmDeferEntry::kEntryName);
ASSERT_EQ(1u, entries.size());
auto* entry = entries.at(0);
test_ukm_recorder.ExpectEntryMetric(
entry, UkmDeferEntry::kforce_deferred_scripts_mainframeName, 2);
test_ukm_recorder.ExpectEntryMetric(
entry, UkmDeferEntry::kforce_deferred_scripts_mainframe_externalName, 1);
} }
IN_PROC_BROWSER_TEST_F( IN_PROC_BROWSER_TEST_F(
DeferAllScriptBrowserTest, DeferAllScriptBrowserTest,
DISABLE_ON_WIN_MAC_CHROMESOS(DeferAllScriptHttpsNotWhitelisted)) { DISABLE_ON_WIN_MAC_CHROMESOS(DeferAllScriptHttpsNotWhitelisted)) {
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
GURL url = https_url(); GURL url = https_url();
...@@ -241,6 +250,7 @@ IN_PROC_BROWSER_TEST_F( ...@@ -241,6 +250,7 @@ IN_PROC_BROWSER_TEST_F(
SetDeferAllScriptHintWithPageWithPattern(url, "/NoMatch/"); SetDeferAllScriptHintWithPageWithPattern(url, "/NoMatch/");
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
// The URL is not whitelisted. // The URL is not whitelisted.
ui_test_utils::NavigateToURL(browser(), url); ui_test_utils::NavigateToURL(browser(), url);
...@@ -274,14 +284,13 @@ IN_PROC_BROWSER_TEST_F( ...@@ -274,14 +284,13 @@ IN_PROC_BROWSER_TEST_F(
{{"force_coin_flip_always_holdback", "true"}}}}, {{"force_coin_flip_always_holdback", "true"}}}},
{previews::features::kOfflinePreviews}); {previews::features::kOfflinePreviews});
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
GURL url = https_url(); GURL url = https_url();
// Whitelist DeferAllScript for any path for the url's host. // Whitelist DeferAllScript for any path for the url's host.
SetDeferAllScriptHintWithPageWithPattern(url, "*"); SetDeferAllScriptHintWithPageWithPattern(url, "*");
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
ukm::TestAutoSetUkmRecorder test_ukm_recorder;
ui_test_utils::NavigateToURL(browser(), url); ui_test_utils::NavigateToURL(browser(), url);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <memory> #include <memory>
#include "services/metrics/public/cpp/ukm_builders.h"
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/core/dom/document_parser_timing.h" #include "third_party/blink/renderer/core/dom/document_parser_timing.h"
...@@ -649,9 +650,13 @@ void HTMLParserScriptRunner::ProcessScriptElementInternal( ...@@ -649,9 +650,13 @@ void HTMLParserScriptRunner::ProcessScriptElementInternal(
} }
void HTMLParserScriptRunner::RecordMetricsAtParseEnd() const { void HTMLParserScriptRunner::RecordMetricsAtParseEnd() const {
// This method is called just before starting execution of force deferred // This method is called just before starting execution of force defer
// scripts in order to capture the all force deferred scripts in // scripts in order to capture the all force deferred scripts in
// |force_deferred_scripts_| before any are popped for execution. // |force_deferred_scripts_| before any are popped for execution.
if (!document_->GetFrame())
return;
if (!force_deferred_scripts_.IsEmpty()) { if (!force_deferred_scripts_.IsEmpty()) {
uint32_t force_deferred_external_script_count = 0; uint32_t force_deferred_external_script_count = 0;
for (const auto& pending_script : force_deferred_scripts_) { for (const auto& pending_script : force_deferred_scripts_) {
...@@ -664,6 +669,13 @@ void HTMLParserScriptRunner::RecordMetricsAtParseEnd() const { ...@@ -664,6 +669,13 @@ void HTMLParserScriptRunner::RecordMetricsAtParseEnd() const {
UMA_HISTOGRAM_COUNTS_100( UMA_HISTOGRAM_COUNTS_100(
"Blink.Script.ForceDeferredScripts.Mainframe.External", "Blink.Script.ForceDeferredScripts.Mainframe.External",
force_deferred_external_script_count); force_deferred_external_script_count);
if (document_->UkmRecorder()) {
ukm::builders::PreviewsDeferAllScript(document_->UkmSourceID())
.Setforce_deferred_scripts_mainframe(force_deferred_scripts_.size())
.Setforce_deferred_scripts_mainframe_external(
force_deferred_external_script_count)
.Record(document_->UkmRecorder());
}
} else { } else {
UMA_HISTOGRAM_COUNTS_100("Blink.Script.ForceDeferredScripts.Subframe", UMA_HISTOGRAM_COUNTS_100("Blink.Script.ForceDeferredScripts.Subframe",
force_deferred_scripts_.size()); force_deferred_scripts_.size());
......
...@@ -6147,6 +6147,28 @@ be describing additional metrics about the same event. ...@@ -6147,6 +6147,28 @@ be describing additional metrics about the same event.
</metric> </metric>
</event> </event>
<event name="PreviewsDeferAllScript" singular="True">
<owner>dougarnett@chromium.org</owner>
<summary>
Metrics associated with the intervention of deferring the execution of
synchronous script (typically due to a DeferAllScript Preview). This is
recorded when the HTML parsing of a mainframe has completed.
</summary>
<metric name="force_deferred_scripts_mainframe">
<summary>
The total number of mainframe scripts (inline and external) whose
execution was force deferred (i.e., that otherwise would have been render
blocking).
</summary>
</metric>
<metric name="force_deferred_scripts_mainframe_external">
<summary>
The total number of mainframe external scripts whose execution was force
deferred (i.e., that otherwise would have been render blocking).
</summary>
</metric>
</event>
<event name="PreviewsResourceLoadingHints" singular="True"> <event name="PreviewsResourceLoadingHints" singular="True">
<owner>jegray@chromium.org</owner> <owner>jegray@chromium.org</owner>
<summary> <summary>
......
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