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

Side by Side Diff: chrome/renderer/page_load_metrics/page_timing_metrics_sender_unittest.cc

Issue 2874663005: [Page Load Metrics] Add mojom file to page load metrics. (Closed)
Patch Set: Created 3 years, 7 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 "chrome/renderer/page_load_metrics/page_timing_metrics_sender.h" 5 #include "chrome/renderer/page_load_metrics/page_timing_metrics_sender.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "base/timer/mock_timer.h" 8 #include "base/timer/mock_timer.h"
9 #include "chrome/common/page_load_metrics/page_load_timing.h" 9 #include "chrome/common/page_load_metrics/page_load_timing.h"
10 #include "chrome/renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender. h" 10 #include "chrome/renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender. h"
11 #include "ipc/ipc_message.h" 11 #include "ipc/ipc_message.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace page_load_metrics { 14 namespace page_load_metrics {
15 15
16 // Thin wrapper around PageTimingMetricsSender that provides access to the 16 // Thin wrapper around PageTimingMetricsSender that provides access to the
17 // MockTimer instance. 17 // MockTimer instance.
18 class TestPageTimingMetricsSender : public PageTimingMetricsSender { 18 class TestPageTimingMetricsSender : public PageTimingMetricsSender {
19 public: 19 public:
20 explicit TestPageTimingMetricsSender(IPC::Sender* ipc_sender, 20 explicit TestPageTimingMetricsSender(
21 const PageLoadTiming& initial_timing) 21 IPC::Sender* ipc_sender,
22 mojo::StructPtr<PageLoadTiming> initial_timing)
22 : PageTimingMetricsSender( 23 : PageTimingMetricsSender(
23 ipc_sender, 24 ipc_sender,
24 MSG_ROUTING_NONE, 25 MSG_ROUTING_NONE,
25 std::unique_ptr<base::Timer>(new base::MockTimer(false, false)), 26 std::unique_ptr<base::Timer>(new base::MockTimer(false, false)),
26 initial_timing) {} 27 std::move(initial_timing)) {}
27 28
28 base::MockTimer* mock_timer() const { 29 base::MockTimer* mock_timer() const {
29 return reinterpret_cast<base::MockTimer*>(timer()); 30 return reinterpret_cast<base::MockTimer*>(timer());
30 } 31 }
31 }; 32 };
32 33
33 class PageTimingMetricsSenderTest : public testing::Test { 34 class PageTimingMetricsSenderTest : public testing::Test {
34 public: 35 public:
35 PageTimingMetricsSenderTest() 36 PageTimingMetricsSenderTest()
36 : metrics_sender_(new TestPageTimingMetricsSender(&fake_ipc_sender_, 37 : metrics_sender_(
37 PageLoadTiming())) {} 38 new TestPageTimingMetricsSender(&fake_ipc_sender_,
39 PageLoadTiming::New())) {}
38 40
39 protected: 41 protected:
40 FakePageTimingMetricsIPCSender fake_ipc_sender_; 42 FakePageTimingMetricsIPCSender fake_ipc_sender_;
41 std::unique_ptr<TestPageTimingMetricsSender> metrics_sender_; 43 std::unique_ptr<TestPageTimingMetricsSender> metrics_sender_;
42 }; 44 };
43 45
44 TEST_F(PageTimingMetricsSenderTest, Basic) { 46 TEST_F(PageTimingMetricsSenderTest, Basic) {
45 base::Time nav_start = base::Time::FromDoubleT(10); 47 base::Time nav_start = base::Time::FromDoubleT(10);
46 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 48 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
47 49
48 PageLoadTiming timing; 50 PageLoadTiming timing;
51 page_load_metrics::InitPageLoadTimingForTest(&timing);
49 timing.navigation_start = nav_start; 52 timing.navigation_start = nav_start;
50 timing.document_timing.first_layout = first_layout; 53 timing.document_timing->first_layout = first_layout;
51 54
52 metrics_sender_->Send(timing); 55 metrics_sender_->Send(timing.Clone());
53 56
54 // Firing the timer should trigger sending of an OnTimingUpdated IPC. 57 // Firing the timer should trigger sending of an OnTimingUpdated IPC.
55 fake_ipc_sender_.ExpectPageLoadTiming(timing); 58 fake_ipc_sender_.ExpectPageLoadTiming(timing);
56 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 59 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
57 metrics_sender_->mock_timer()->Fire(); 60 metrics_sender_->mock_timer()->Fire();
58 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 61 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
59 62
60 // At this point, we should have triggered the send of the PageLoadTiming IPC. 63 // At this point, we should have triggered the send of the PageLoadTiming IPC.
61 fake_ipc_sender_.VerifyExpectedTimings(); 64 fake_ipc_sender_.VerifyExpectedTimings();
62 65
63 // Attempt to send the same timing instance again. The send should be 66 // Attempt to send the same timing instance again. The send should be
64 // suppressed, since the timing instance hasn't changed since the last send. 67 // suppressed, since the timing instance hasn't changed since the last send.
65 metrics_sender_->Send(timing); 68 metrics_sender_->Send(timing.Clone());
66 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 69 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
67 } 70 }
68 71
69 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) { 72 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) {
70 base::Time nav_start = base::Time::FromDoubleT(10); 73 base::Time nav_start = base::Time::FromDoubleT(10);
71 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 74 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
72 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 75 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
73 76
74 PageLoadTiming timing; 77 PageLoadTiming timing;
78 page_load_metrics::InitPageLoadTimingForTest(&timing);
75 timing.navigation_start = nav_start; 79 timing.navigation_start = nav_start;
76 timing.document_timing.first_layout = first_layout; 80 timing.document_timing->first_layout = first_layout;
77 81
78 metrics_sender_->Send(timing); 82 metrics_sender_->Send(timing.Clone());
79 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 83 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
80 84
81 // Send an updated PageLoadTiming before the timer has fired. When the timer 85 // Send an updated PageLoadTiming before the timer has fired. When the timer
82 // fires, the updated PageLoadTiming should be sent. 86 // fires, the updated PageLoadTiming should be sent.
83 timing.document_timing.load_event_start = load_event; 87 timing.document_timing->load_event_start = load_event;
84 metrics_sender_->Send(timing); 88 metrics_sender_->Send(timing.Clone());
85 89
86 // Firing the timer should trigger sending of the OnTimingUpdated IPC with 90 // Firing the timer should trigger sending of the OnTimingUpdated IPC with
87 // the most recently provided PageLoadTiming instance. 91 // the most recently provided PageLoadTiming instance.
88 fake_ipc_sender_.ExpectPageLoadTiming(timing); 92 fake_ipc_sender_.ExpectPageLoadTiming(timing);
89 metrics_sender_->mock_timer()->Fire(); 93 metrics_sender_->mock_timer()->Fire();
90 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 94 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
91 } 95 }
92 96
93 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) { 97 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) {
94 base::Time nav_start = base::Time::FromDoubleT(10); 98 base::Time nav_start = base::Time::FromDoubleT(10);
95 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 99 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
96 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 100 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
97 101
98 PageLoadTiming timing; 102 PageLoadTiming timing;
103 page_load_metrics::InitPageLoadTimingForTest(&timing);
99 timing.navigation_start = nav_start; 104 timing.navigation_start = nav_start;
100 timing.document_timing.first_layout = first_layout; 105 timing.document_timing->first_layout = first_layout;
101 106
102 metrics_sender_->Send(timing); 107 metrics_sender_->Send(timing.Clone());
103 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 108 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
104 fake_ipc_sender_.ExpectPageLoadTiming(timing); 109 fake_ipc_sender_.ExpectPageLoadTiming(timing);
105 metrics_sender_->mock_timer()->Fire(); 110 metrics_sender_->mock_timer()->Fire();
106 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 111 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
107 fake_ipc_sender_.VerifyExpectedTimings(); 112 fake_ipc_sender_.VerifyExpectedTimings();
108 113
109 // Send an updated PageLoadTiming after the timer for the first send request 114 // Send an updated PageLoadTiming after the timer for the first send request
110 // has fired, and verify that a second IPC is sent. 115 // has fired, and verify that a second IPC is sent.
111 timing.document_timing.load_event_start = load_event; 116 timing.document_timing->load_event_start = load_event;
112 metrics_sender_->Send(timing); 117 metrics_sender_->Send(timing.Clone());
113 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 118 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
114 fake_ipc_sender_.ExpectPageLoadTiming(timing); 119 fake_ipc_sender_.ExpectPageLoadTiming(timing);
115 metrics_sender_->mock_timer()->Fire(); 120 metrics_sender_->mock_timer()->Fire();
116 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 121 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
117 } 122 }
118 123
119 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { 124 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) {
120 PageLoadTiming timing; 125 PageLoadTiming timing;
126 page_load_metrics::InitPageLoadTimingForTest(&timing);
121 timing.navigation_start = base::Time::FromDoubleT(10); 127 timing.navigation_start = base::Time::FromDoubleT(10);
122 timing.document_timing.first_layout = base::TimeDelta::FromMilliseconds(10); 128 timing.document_timing->first_layout = base::TimeDelta::FromMilliseconds(10);
123 129
124 // This test wants to verify behavior in the PageTimingMetricsSender 130 // This test wants to verify behavior in the PageTimingMetricsSender
125 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_| 131 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_|
126 // is destroyed below. 132 // is destroyed below.
127 metrics_sender_->Send(timing); 133 metrics_sender_->Send(timing.Clone());
128 fake_ipc_sender_.ExpectPageLoadTiming(timing); 134 fake_ipc_sender_.ExpectPageLoadTiming(timing);
129 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 135 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
130 136
131 // Destroy |metrics_sender_|, in order to force its destructor to run. 137 // Destroy |metrics_sender_|, in order to force its destructor to run.
132 metrics_sender_.reset(); 138 metrics_sender_.reset();
133 } 139 }
134 140
135 } // namespace page_load_metrics 141 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698