blink scheduler: Add TimeSinceBackgrounded to RendererSchedulerTask UKM.
This was previously approved at [1] by msramek@.
[1] https://docs.google.com/document/d/14c_oWM2B02_mp43bPLcUiN6-094djfnzpbu9SAwH5-4/edit?ts=5a54f254#
Bug: 832162
Change-Id: I8f0f29af540a2e6f817b5e0b470683ad68a581b2
Reviewed-on: https://chromium-review.googlesource.com/1079068
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Robert Kaplow <rkaplow@chromium.org>
Commit-Queue: Eric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563181}
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
index b181305..4dc1e2a 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -63,6 +63,7 @@
constexpr base::TimeDelta kQueueingTimeWindowDuration =
base::TimeDelta::FromSeconds(1);
const double kSamplingRateForTaskUkm = 0.0001;
+const int64_t kSecondsPerMinute = 60;
// Field trial name.
const char kWakeUpThrottlingTrial[] = "RendererSchedulerWakeUpThrottling";
@@ -2603,6 +2604,23 @@
GetFrameStatus(queue ? queue->GetFrameScheduler() : nullptr)));
builder.SetTaskDuration((end - start).InMicroseconds());
+ if (main_thread_only().renderer_backgrounded) {
+ base::TimeDelta time_since_backgrounded =
+ (end - main_thread_only().background_status_changed_at);
+
+ // Trade off for privacy: Round to seconds for times below 10 minutes and
+ // minutes afterwards.
+ int seconds_since_backgrounded = 0;
+ if (time_since_backgrounded < base::TimeDelta::FromMinutes(10)) {
+ seconds_since_backgrounded = time_since_backgrounded.InSeconds();
+ } else {
+ seconds_since_backgrounded =
+ time_since_backgrounded.InMinutes() * kSecondsPerMinute;
+ }
+
+ builder.SetSecondsSinceBackgrounded(seconds_since_backgrounded);
+ }
+
if (thread_time) {
builder.SetTaskCPUDuration(thread_time->InMicroseconds());
}
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 10508cf..be86def 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -2693,20 +2693,26 @@
</metric>
<metric name="RendererAudible">
<summary>
- Whether renderer was playing audio when this task was run. Boolean,
+ Whether renderer was playing audio when this task was completed. Boolean,
encoded as an integer (0/1).
</summary>
</metric>
<metric name="RendererBackgrounded">
<summary>
- Whether renderer was backgrounded when this task was run. Boolean, encoded
- as an integer (0/1).
+ Whether renderer was backgrounded when this task was completed. Boolean,
+ encoded as an integer (0/1).
</summary>
</metric>
<metric name="RendererHidden">
<summary>
- Whether renderer was hidden when this task was run. Boolean, encoded as an
- integer (0/1).
+ Whether renderer was hidden when this task was completed. Boolean, encoded
+ as an integer (0/1).
+ </summary>
+ </metric>
+ <metric name="SecondsSinceBackgrounded">
+ <summary>
+ Seconds since the renderer was backgrounded, recorded when the task was
+ completed. Only set if the renderer is backgrounded.
</summary>
</metric>
<metric name="TaskCPUDuration">
@@ -2726,7 +2732,7 @@
</metric>
<metric name="UseCase">
<summary>
- MainThreadSchedulerImpl's UseCase when this task was run. See
+ MainThreadSchedulerImpl's UseCase when this task was completed. See
blink::scheduler::UseCase for the values of this enum.
</summary>
</metric>