OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" | 5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "base/timer/timer.h" | 11 #include "base/timer/timer.h" |
12 #include "components/page_load_metrics/common/page_load_metrics_messages.h" | 12 #include "components/page_load_metrics/common/page_load_metrics_messages.h" |
13 #include "ipc/ipc_sender.h" | 13 #include "ipc/ipc_sender.h" |
14 | 14 |
15 namespace page_load_metrics { | 15 namespace page_load_metrics { |
16 | 16 |
17 namespace { | 17 namespace { |
18 const int kTimerDelayMillis = 1000; | 18 const int kTimerDelayMillis = 1000; |
19 } // namespace | 19 } // namespace |
20 | 20 |
21 PageTimingMetricsSender::PageTimingMetricsSender(IPC::Sender* ipc_sender, | 21 PageTimingMetricsSender::PageTimingMetricsSender(IPC::Sender* ipc_sender, |
22 int routing_id, | 22 int routing_id, |
23 scoped_ptr<base::Timer> timer) | 23 scoped_ptr<base::Timer> timer) |
24 : ipc_sender_(ipc_sender), | 24 : ipc_sender_(ipc_sender), |
25 routing_id_(routing_id), | 25 routing_id_(routing_id), |
26 timer_(std::move(timer)) {} | 26 timer_(std::move(timer)), |
| 27 metadata_(PageLoadMetadata()) {} |
27 | 28 |
28 // On destruction, we want to send any data we have if we have a timer | 29 // On destruction, we want to send any data we have if we have a timer |
29 // currently running (and thus are talking to a browser process) | 30 // currently running (and thus are talking to a browser process) |
30 PageTimingMetricsSender::~PageTimingMetricsSender() { | 31 PageTimingMetricsSender::~PageTimingMetricsSender() { |
31 if (timer_->IsRunning()) { | 32 if (timer_->IsRunning()) { |
32 timer_->Stop(); | 33 timer_->Stop(); |
33 SendNow(); | 34 SendNow(); |
34 } | 35 } |
35 } | 36 } |
36 | 37 |
| 38 void PageTimingMetricsSender::DidUseExperiment(blink::WebExperimentData data) { |
| 39 metadata_.experiment_flags |= data; |
| 40 } |
| 41 |
37 void PageTimingMetricsSender::Send(const PageLoadTiming& timing) { | 42 void PageTimingMetricsSender::Send(const PageLoadTiming& timing) { |
38 if (timing == last_timing_) | 43 if (timing == last_timing_) |
39 return; | 44 return; |
40 | 45 |
41 // We want to make sure that each PageTimingMetricsSender is associated | 46 // We want to make sure that each PageTimingMetricsSender is associated |
42 // with a distinct page navigation. Because we reset the object on commit, | 47 // with a distinct page navigation. Because we reset the object on commit, |
43 // we can trash last_timing_ on a provisional load before SendNow() fires. | 48 // we can trash last_timing_ on a provisional load before SendNow() fires. |
44 if (!last_timing_.navigation_start.is_null() && | 49 if (!last_timing_.navigation_start.is_null() && |
45 last_timing_.navigation_start != timing.navigation_start) { | 50 last_timing_.navigation_start != timing.navigation_start) { |
46 return; | 51 return; |
47 } | 52 } |
48 | 53 |
49 last_timing_ = timing; | 54 last_timing_ = timing; |
50 | 55 |
51 if (!timer_->IsRunning()) | 56 if (!timer_->IsRunning()) |
52 timer_->Start( | 57 timer_->Start( |
53 FROM_HERE, base::TimeDelta::FromMilliseconds(kTimerDelayMillis), | 58 FROM_HERE, base::TimeDelta::FromMilliseconds(kTimerDelayMillis), |
54 base::Bind(&PageTimingMetricsSender::SendNow, base::Unretained(this))); | 59 base::Bind(&PageTimingMetricsSender::SendNow, base::Unretained(this))); |
55 } | 60 } |
56 | 61 |
57 void PageTimingMetricsSender::SendNow() { | 62 void PageTimingMetricsSender::SendNow() { |
58 ipc_sender_->Send( | 63 ipc_sender_->Send(new PageLoadMetricsMsg_TimingUpdated( |
59 new PageLoadMetricsMsg_TimingUpdated(routing_id_, last_timing_)); | 64 routing_id_, last_timing_, metadata_)); |
60 } | 65 } |
61 | 66 |
62 } // namespace page_load_metrics | 67 } // namespace page_load_metrics |
OLD | NEW |