Commit cdc419dd authored by John Delaney's avatar John Delaney Committed by Commit Bot

Add UKM for peak windowed percent usage by ad frames.

This CL adds the PeakWindowedUsage metric to AdFrameLoad UKM. This can
be used alongside the existing CpuTime metrics to better determine the
type of ads with high CPU usage.

Bug: 978030
Change-Id: I4175c87d149003b040260a837c2a5de3e2ca1633
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1653390Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Reviewed-by: default avatarJohn Delaney <johnidel@chromium.org>
Reviewed-by: default avatarJosh Karlin <jkarlin@chromium.org>
Commit-Queue: John Delaney <johnidel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#680004}
parent 4a2e9a72
...@@ -1128,6 +1128,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetrics) { ...@@ -1128,6 +1128,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetrics) {
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName,
100 * 1500 / 30000);
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName)); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName));
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
...@@ -1182,6 +1186,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, ...@@ -1182,6 +1186,10 @@ TEST_F(AdsPageLoadMetricsObserverTest,
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName,
100 * 1500 / 30000);
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName)); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName));
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
...@@ -1239,6 +1247,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsOnActivation) { ...@@ -1239,6 +1247,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsOnActivation) {
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName,
100 * 1000 / 30000);
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName, entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName,
1000); 1000);
...@@ -1293,6 +1305,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestNoReportingWhenAlwaysBackgrounded) { ...@@ -1293,6 +1305,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestNoReportingWhenAlwaysBackgrounded) {
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 0); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 0);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName, 0);
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName)); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_PreActivationName));
EXPECT_FALSE(test_ukm_recorder().EntryHasMetric( EXPECT_FALSE(test_ukm_recorder().EntryHasMetric(
...@@ -1330,6 +1345,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsNoInteractive) { ...@@ -1330,6 +1345,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsNoInteractive) {
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 500); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 500);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName,
100 * 500 / 30000);
} }
TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsShortTimeframes) { TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsShortTimeframes) {
...@@ -1373,6 +1392,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsShortTimeframes) { ...@@ -1373,6 +1392,10 @@ TEST_F(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsShortTimeframes) {
EXPECT_EQ(1u, entries.size()); EXPECT_EQ(1u, entries.size());
test_ukm_recorder().ExpectEntryMetric( test_ukm_recorder().ExpectEntryMetric(
entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500); entries.front(), ukm::builders::AdFrameLoad::kCpuTime_TotalName, 1500);
test_ukm_recorder().ExpectEntryMetric(
entries.front(),
ukm::builders::AdFrameLoad::kCpuTime_PeakWindowedPercentName,
100 * 1500 / 30000);
} }
TEST_F(AdsPageLoadMetricsObserverTest, AdFrameLoadTiming) { TEST_F(AdsPageLoadMetricsObserverTest, AdFrameLoadTiming) {
......
...@@ -248,6 +248,8 @@ void FrameData::RecordAdFrameLoadUkmEvent(ukm::SourceId source_id) const { ...@@ -248,6 +248,8 @@ void FrameData::RecordAdFrameLoadUkmEvent(ukm::SourceId source_id) const {
pre_activation_foreground_duration().InMilliseconds()); pre_activation_foreground_duration().InMilliseconds());
} }
builder.SetCpuTime_PeakWindowedPercent(peak_windowed_cpu_percent_);
builder builder
.SetVisibility_FrameWidth( .SetVisibility_FrameWidth(
ukm::GetExponentialBucketMinForCounts1000(frame_size().width())) ukm::GetExponentialBucketMinForCounts1000(frame_size().width()))
......
...@@ -89,6 +89,13 @@ be describing additional metrics about the same event. ...@@ -89,6 +89,13 @@ be describing additional metrics about the same event.
with non-zero bytes. Recorded when a page is destroyed or when the app is with non-zero bytes. Recorded when a page is destroyed or when the app is
backgrounded on mobile. backgrounded on mobile.
</summary> </summary>
<metric name="CpuTime.PeakWindowedPercent">
<summary>
The peak percentage of CPU utilization attributed to the frame in any 30
second window prior to user activation. Frames that exist for less than 30
seconds still use 30 seconds as the denominator for the calculation.
</summary>
</metric>
<metric name="CpuTime.PreActivation"> <metric name="CpuTime.PreActivation">
<summary> <summary>
Wall time of tasks attributed to the frame after the frame recieved user Wall time of tasks attributed to the frame after the frame recieved user
......
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