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

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

Issue 2874663005: [Page Load Metrics] Add mojom file to page load metrics. (Closed)
Patch Set: rebase 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 (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/metrics_render_frame_observer.h" 5 #include "chrome/renderer/page_load_metrics/metrics_render_frame_observer.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 25 matching lines...) Expand all
36 return fake_timing_ipc_sender_.Send(message); 36 return fake_timing_ipc_sender_.Send(message);
37 } 37 }
38 38
39 void set_mock_timer(std::unique_ptr<base::Timer> timer) { 39 void set_mock_timer(std::unique_ptr<base::Timer> timer) {
40 ASSERT_EQ(nullptr, mock_timer_); 40 ASSERT_EQ(nullptr, mock_timer_);
41 mock_timer_ = std::move(timer); 41 mock_timer_ = std::move(timer);
42 } 42 }
43 43
44 void set_is_main_frame(bool is_main_frame) { is_main_frame_ = is_main_frame; } 44 void set_is_main_frame(bool is_main_frame) { is_main_frame_ = is_main_frame; }
45 45
46 bool WasFakeTimingConsumed() const { return fake_timing_.IsEmpty(); } 46 bool WasFakeTimingConsumed() const { return IsEmpty(*fake_timing_); }
47 47
48 void ExpectPageLoadTiming(const PageLoadTiming& timing) { 48 void ExpectPageLoadTiming(const mojom::PageLoadTiming& timing) {
49 SetFakePageLoadTiming(timing); 49 SetFakePageLoadTiming(timing);
50 fake_timing_ipc_sender_.ExpectPageLoadTiming(timing); 50 fake_timing_ipc_sender_.ExpectPageLoadTiming(timing);
51 } 51 }
52 52
53 void SetFakePageLoadTiming(const PageLoadTiming& timing) { 53 void SetFakePageLoadTiming(const mojom::PageLoadTiming& timing) {
54 EXPECT_TRUE(fake_timing_.IsEmpty()); 54 EXPECT_EQ(nullptr, fake_timing_.get());
55 fake_timing_ = timing; 55 fake_timing_ = timing.Clone();
56 } 56 }
57 57
58 PageLoadTiming GetTiming() const override { 58 mojo::StructPtr<mojom::PageLoadTiming> GetTiming() const override {
59 PageLoadTiming tmp = fake_timing_; 59 EXPECT_NE(nullptr, fake_timing_.get());
60 fake_timing_ = PageLoadTiming(); 60 return std::move(fake_timing_);
61 return tmp;
62 } 61 }
63 62
64 void VerifyExpectedTimings() const { 63 void VerifyExpectedTimings() const {
65 EXPECT_TRUE(fake_timing_.IsEmpty()); 64 EXPECT_EQ(nullptr, fake_timing_.get());
66 fake_timing_ipc_sender_.VerifyExpectedTimings(); 65 fake_timing_ipc_sender_.VerifyExpectedTimings();
67 } 66 }
68 67
69 bool ShouldSendMetrics() const override { return true; } 68 bool ShouldSendMetrics() const override { return true; }
70 bool HasNoRenderFrame() const override { return false; } 69 bool HasNoRenderFrame() const override { return false; }
71 bool IsMainFrame() const override { return is_main_frame_; } 70 bool IsMainFrame() const override { return is_main_frame_; }
72 71
73 private: 72 private:
74 FakePageTimingMetricsIPCSender fake_timing_ipc_sender_; 73 FakePageTimingMetricsIPCSender fake_timing_ipc_sender_;
75 mutable PageLoadTiming fake_timing_; 74 mutable mojo::StructPtr<mojom::PageLoadTiming> fake_timing_;
76 mutable std::unique_ptr<base::Timer> mock_timer_; 75 mutable std::unique_ptr<base::Timer> mock_timer_;
77 bool is_main_frame_ = true; 76 bool is_main_frame_ = true;
78 }; 77 };
79 78
80 typedef testing::Test MetricsRenderFrameObserverTest; 79 typedef testing::Test MetricsRenderFrameObserverTest;
81 80
82 TEST_F(MetricsRenderFrameObserverTest, NoMetrics) { 81 TEST_F(MetricsRenderFrameObserverTest, NoMetrics) {
83 TestMetricsRenderFrameObserver observer; 82 TestMetricsRenderFrameObserver observer;
84 base::MockTimer* mock_timer = new base::MockTimer(false, false); 83 base::MockTimer* mock_timer = new base::MockTimer(false, false);
85 observer.set_mock_timer(base::WrapUnique(mock_timer)); 84 observer.set_mock_timer(base::WrapUnique(mock_timer));
86 85
87 observer.DidChangePerformanceTiming(); 86 observer.DidChangePerformanceTiming();
88 ASSERT_FALSE(mock_timer->IsRunning()); 87 ASSERT_FALSE(mock_timer->IsRunning());
89 } 88 }
90 89
91 TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { 90 TEST_F(MetricsRenderFrameObserverTest, SingleMetric) {
92 base::Time nav_start = base::Time::FromDoubleT(10); 91 base::Time nav_start = base::Time::FromDoubleT(10);
93 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10); 92 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10);
94 93
95 TestMetricsRenderFrameObserver observer; 94 TestMetricsRenderFrameObserver observer;
96 base::MockTimer* mock_timer = new base::MockTimer(false, false); 95 base::MockTimer* mock_timer = new base::MockTimer(false, false);
97 observer.set_mock_timer(base::WrapUnique(mock_timer)); 96 observer.set_mock_timer(base::WrapUnique(mock_timer));
98 97
99 PageLoadTiming timing; 98 mojom::PageLoadTiming timing;
99 page_load_metrics::InitPageLoadTimingForTest(&timing);
100 timing.navigation_start = nav_start; 100 timing.navigation_start = nav_start;
101 observer.ExpectPageLoadTiming(timing); 101 observer.ExpectPageLoadTiming(timing);
102 observer.DidCommitProvisionalLoad(true, false); 102 observer.DidCommitProvisionalLoad(true, false);
103 mock_timer->Fire(); 103 mock_timer->Fire();
104 104
105 timing.document_timing.first_layout = first_layout; 105 timing.document_timing->first_layout = first_layout;
106 observer.ExpectPageLoadTiming(timing); 106 observer.ExpectPageLoadTiming(timing);
107 107
108 observer.DidChangePerformanceTiming(); 108 observer.DidChangePerformanceTiming();
109 mock_timer->Fire(); 109 mock_timer->Fire();
110 } 110 }
111 111
112 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { 112 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) {
113 base::Time nav_start = base::Time::FromDoubleT(10); 113 base::Time nav_start = base::Time::FromDoubleT(10);
114 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 114 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
115 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); 115 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2);
116 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); 116 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2);
117 117
118 TestMetricsRenderFrameObserver observer; 118 TestMetricsRenderFrameObserver observer;
119 base::MockTimer* mock_timer = new base::MockTimer(false, false); 119 base::MockTimer* mock_timer = new base::MockTimer(false, false);
120 observer.set_mock_timer(base::WrapUnique(mock_timer)); 120 observer.set_mock_timer(base::WrapUnique(mock_timer));
121 121
122 PageLoadTiming timing; 122 mojom::PageLoadTiming timing;
123 page_load_metrics::InitPageLoadTimingForTest(&timing);
123 timing.navigation_start = nav_start; 124 timing.navigation_start = nav_start;
124 observer.ExpectPageLoadTiming(timing); 125 observer.ExpectPageLoadTiming(timing);
125 observer.DidCommitProvisionalLoad(true, false); 126 observer.DidCommitProvisionalLoad(true, false);
126 mock_timer->Fire(); 127 mock_timer->Fire();
127 128
128 timing.document_timing.first_layout = first_layout; 129 timing.document_timing->first_layout = first_layout;
129 timing.document_timing.dom_content_loaded_event_start = dom_event; 130 timing.document_timing->dom_content_loaded_event_start = dom_event;
130 observer.ExpectPageLoadTiming(timing); 131 observer.ExpectPageLoadTiming(timing);
131 132
132 observer.DidChangePerformanceTiming(); 133 observer.DidChangePerformanceTiming();
133 mock_timer->Fire(); 134 mock_timer->Fire();
134 135
135 // At this point, we should have triggered the generation of two metrics. 136 // At this point, we should have triggered the generation of two metrics.
136 // Verify and reset the observer's expectations before moving on to the next 137 // Verify and reset the observer's expectations before moving on to the next
137 // part of the test. 138 // part of the test.
138 observer.VerifyExpectedTimings(); 139 observer.VerifyExpectedTimings();
139 140
140 timing.document_timing.load_event_start = load_event; 141 timing.document_timing->load_event_start = load_event;
141 observer.ExpectPageLoadTiming(timing); 142 observer.ExpectPageLoadTiming(timing);
142 143
143 observer.DidChangePerformanceTiming(); 144 observer.DidChangePerformanceTiming();
144 mock_timer->Fire(); 145 mock_timer->Fire();
145 146
146 // Verify and reset the observer's expectations before moving on to the next 147 // Verify and reset the observer's expectations before moving on to the next
147 // part of the test. 148 // part of the test.
148 observer.VerifyExpectedTimings(); 149 observer.VerifyExpectedTimings();
149 150
150 // The PageLoadTiming above includes timing information for the first layout, 151 // The PageLoadTiming above includes timing information for the first layout,
151 // dom content, and load metrics. However, since we've already generated 152 // dom content, and load metrics. However, since we've already generated
152 // timing information for all of these metrics previously, we do not expect 153 // timing information for all of these metrics previously, we do not expect
153 // this invocation to generate any additional metrics. 154 // this invocation to generate any additional metrics.
155 observer.SetFakePageLoadTiming(timing);
154 observer.DidChangePerformanceTiming(); 156 observer.DidChangePerformanceTiming();
155 ASSERT_FALSE(mock_timer->IsRunning()); 157 ASSERT_FALSE(mock_timer->IsRunning());
156 } 158 }
157 159
158 TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { 160 TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) {
159 base::Time nav_start = base::Time::FromDoubleT(10); 161 base::Time nav_start = base::Time::FromDoubleT(10);
160 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 162 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
161 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); 163 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2);
162 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); 164 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2);
163 165
164 TestMetricsRenderFrameObserver observer; 166 TestMetricsRenderFrameObserver observer;
165 base::MockTimer* mock_timer = new base::MockTimer(false, false); 167 base::MockTimer* mock_timer = new base::MockTimer(false, false);
166 observer.set_mock_timer(base::WrapUnique(mock_timer)); 168 observer.set_mock_timer(base::WrapUnique(mock_timer));
167 169
168 PageLoadTiming timing; 170 mojom::PageLoadTiming timing;
171 page_load_metrics::InitPageLoadTimingForTest(&timing);
169 timing.navigation_start = nav_start; 172 timing.navigation_start = nav_start;
170 observer.ExpectPageLoadTiming(timing); 173 observer.ExpectPageLoadTiming(timing);
171 observer.DidCommitProvisionalLoad(true, false); 174 observer.DidCommitProvisionalLoad(true, false);
172 mock_timer->Fire(); 175 mock_timer->Fire();
173 176
174 timing.document_timing.first_layout = first_layout; 177 timing.document_timing->first_layout = first_layout;
175 timing.document_timing.dom_content_loaded_event_start = dom_event; 178 timing.document_timing->dom_content_loaded_event_start = dom_event;
176 timing.document_timing.load_event_start = load_event; 179 timing.document_timing->load_event_start = load_event;
177 observer.ExpectPageLoadTiming(timing); 180 observer.ExpectPageLoadTiming(timing);
178 observer.DidChangePerformanceTiming(); 181 observer.DidChangePerformanceTiming();
179 mock_timer->Fire(); 182 mock_timer->Fire();
180 183
181 // At this point, we should have triggered the generation of two metrics. 184 // At this point, we should have triggered the generation of two metrics.
182 // Verify and reset the observer's expectations before moving on to the next 185 // Verify and reset the observer's expectations before moving on to the next
183 // part of the test. 186 // part of the test.
184 observer.VerifyExpectedTimings(); 187 observer.VerifyExpectedTimings();
185 188
186 base::Time nav_start_2 = base::Time::FromDoubleT(100); 189 base::Time nav_start_2 = base::Time::FromDoubleT(100);
187 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20); 190 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20);
188 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20); 191 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20);
189 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20); 192 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20);
190 PageLoadTiming timing_2; 193 mojom::PageLoadTiming timing_2;
194 page_load_metrics::InitPageLoadTimingForTest(&timing_2);
191 timing_2.navigation_start = nav_start_2; 195 timing_2.navigation_start = nav_start_2;
192 196
193 base::MockTimer* mock_timer2 = new base::MockTimer(false, false); 197 base::MockTimer* mock_timer2 = new base::MockTimer(false, false);
194 observer.set_mock_timer(base::WrapUnique(mock_timer2)); 198 observer.set_mock_timer(base::WrapUnique(mock_timer2));
195 199
196 observer.ExpectPageLoadTiming(timing_2); 200 observer.ExpectPageLoadTiming(timing_2);
197 observer.DidCommitProvisionalLoad(true, false); 201 observer.DidCommitProvisionalLoad(true, false);
198 mock_timer2->Fire(); 202 mock_timer2->Fire();
199 203
200 timing_2.document_timing.first_layout = first_layout_2; 204 timing_2.document_timing->first_layout = first_layout_2;
201 timing_2.document_timing.dom_content_loaded_event_start = dom_event_2; 205 timing_2.document_timing->dom_content_loaded_event_start = dom_event_2;
202 timing_2.document_timing.load_event_start = load_event_2; 206 timing_2.document_timing->load_event_start = load_event_2;
203 observer.ExpectPageLoadTiming(timing_2); 207 observer.ExpectPageLoadTiming(timing_2);
204 208
205 observer.DidChangePerformanceTiming(); 209 observer.DidChangePerformanceTiming();
206 mock_timer2->Fire(); 210 mock_timer2->Fire();
207 } 211 }
208 212
209 TEST_F(MetricsRenderFrameObserverTest, NoUpdatesFromChildFrames) { 213 TEST_F(MetricsRenderFrameObserverTest, NoUpdatesFromChildFrames) {
210 base::Time nav_start = base::Time::FromDoubleT(10); 214 base::Time nav_start = base::Time::FromDoubleT(10);
211 215
212 TestMetricsRenderFrameObserver observer; 216 TestMetricsRenderFrameObserver observer;
213 base::MockTimer* mock_timer = new base::MockTimer(false, false); 217 base::MockTimer* mock_timer = new base::MockTimer(false, false);
214 observer.set_mock_timer(base::WrapUnique(mock_timer)); 218 observer.set_mock_timer(base::WrapUnique(mock_timer));
215 observer.set_is_main_frame(false); 219 observer.set_is_main_frame(false);
216 220
217 PageLoadTiming timing; 221 mojom::PageLoadTiming timing;
222 page_load_metrics::InitPageLoadTimingForTest(&timing);
218 timing.navigation_start = nav_start; 223 timing.navigation_start = nav_start;
219 observer.SetFakePageLoadTiming(timing); 224 observer.SetFakePageLoadTiming(timing);
220 observer.DidCommitProvisionalLoad(true, false); 225 observer.DidCommitProvisionalLoad(true, false);
221 ASSERT_FALSE(observer.WasFakeTimingConsumed()); 226 ASSERT_FALSE(observer.WasFakeTimingConsumed());
222 ASSERT_FALSE(mock_timer->IsRunning()); 227 ASSERT_FALSE(mock_timer->IsRunning());
223 228
224 observer.DidChangePerformanceTiming(); 229 observer.DidChangePerformanceTiming();
225 ASSERT_FALSE(observer.WasFakeTimingConsumed()); 230 ASSERT_FALSE(observer.WasFakeTimingConsumed());
226 ASSERT_FALSE(mock_timer->IsRunning()); 231 ASSERT_FALSE(mock_timer->IsRunning());
227 } 232 }
228 233
229 } // namespace page_load_metrics 234 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698