Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: components/page_load_metrics/renderer/page_timing_metrics_sender.cc

Issue 1857443002: Plumb experiment flags through page_load_metrics and add a new observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@page_load_experiments
Patch Set: clean up unit tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698