Index: chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc |
diff --git a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc |
index e016bb3251445b98216fb664624a3b9a22bd3572..f4a88559e9c5980815b4c5eca7d724d0f968a8e8 100644 |
--- a/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc |
+++ b/chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc |
@@ -30,8 +30,7 @@ PageTimingMetricsSender::PageTimingMetricsSender( |
last_timing_(initial_timing), |
metadata_(PageLoadMetadata()) { |
if (!initial_timing.IsEmpty()) { |
- // Send an initial IPC relatively early to help track aborts. |
- EnsureSendTimer(kInitialTimerDelayMillis); |
+ EnsureSendTimer(); |
} |
} |
@@ -49,7 +48,7 @@ void PageTimingMetricsSender::DidObserveLoadingBehavior( |
if (behavior & metadata_.behavior_flags) |
return; |
metadata_.behavior_flags |= behavior; |
- EnsureSendTimer(kTimerDelayMillis); |
+ EnsureSendTimer(); |
} |
void PageTimingMetricsSender::Send(const PageLoadTiming& timing) { |
@@ -65,17 +64,23 @@ void PageTimingMetricsSender::Send(const PageLoadTiming& timing) { |
} |
last_timing_ = timing; |
- EnsureSendTimer(kTimerDelayMillis); |
+ EnsureSendTimer(); |
} |
-void PageTimingMetricsSender::EnsureSendTimer(int delay) { |
- if (!timer_->IsRunning()) |
+void PageTimingMetricsSender::EnsureSendTimer() { |
+ if (!timer_->IsRunning()) { |
+ // Send the first IPC eagerly to make sure the receiving side knows we're |
+ // sending metrics as soon as possible. |
+ int delay_ms = |
+ have_sent_ipc_ ? kTimerDelayMillis : kInitialTimerDelayMillis; |
timer_->Start( |
- FROM_HERE, base::TimeDelta::FromMilliseconds(delay), |
+ FROM_HERE, base::TimeDelta::FromMilliseconds(delay_ms), |
base::Bind(&PageTimingMetricsSender::SendNow, base::Unretained(this))); |
+ } |
} |
void PageTimingMetricsSender::SendNow() { |
+ have_sent_ipc_ = true; |
ipc_sender_->Send(new PageLoadMetricsMsg_TimingUpdated( |
routing_id_, last_timing_, metadata_)); |
} |