OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/browser/page_load_metrics/observers/data_reduction_proxy_metric
s_observer.h" | 5 #include "chrome/browser/page_load_metrics/observers/data_reduction_proxy_metric
s_observer.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <functional> | 9 #include <functional> |
10 #include <memory> | 10 #include <memory> |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 | 133 |
134 class DataReductionProxyMetricsObserverTest | 134 class DataReductionProxyMetricsObserverTest |
135 : public page_load_metrics::PageLoadMetricsObserverTestHarness { | 135 : public page_load_metrics::PageLoadMetricsObserverTestHarness { |
136 public: | 136 public: |
137 DataReductionProxyMetricsObserverTest() | 137 DataReductionProxyMetricsObserverTest() |
138 : pingback_client_(new TestPingbackClient()), | 138 : pingback_client_(new TestPingbackClient()), |
139 data_reduction_proxy_used_(false), | 139 data_reduction_proxy_used_(false), |
140 is_using_lofi_(false) {} | 140 is_using_lofi_(false) {} |
141 | 141 |
142 void ResetTest() { | 142 void ResetTest() { |
| 143 page_load_metrics::InitPageLoadTimingForTest(&timing_); |
143 // Reset to the default testing state. Does not reset histogram state. | 144 // Reset to the default testing state. Does not reset histogram state. |
144 timing_.navigation_start = base::Time::FromDoubleT(1); | 145 timing_.navigation_start = base::Time::FromDoubleT(1); |
145 timing_.response_start = base::TimeDelta::FromSeconds(2); | 146 timing_.response_start = base::TimeDelta::FromSeconds(2); |
146 timing_.parse_timing.parse_start = base::TimeDelta::FromSeconds(3); | 147 timing_.parse_timing->parse_start = base::TimeDelta::FromSeconds(3); |
147 timing_.paint_timing.first_contentful_paint = | 148 timing_.paint_timing->first_contentful_paint = |
148 base::TimeDelta::FromSeconds(4); | 149 base::TimeDelta::FromSeconds(4); |
149 timing_.paint_timing.first_paint = base::TimeDelta::FromSeconds(4); | 150 timing_.paint_timing->first_paint = base::TimeDelta::FromSeconds(4); |
150 timing_.paint_timing.first_meaningful_paint = | 151 timing_.paint_timing->first_meaningful_paint = |
151 base::TimeDelta::FromSeconds(8); | 152 base::TimeDelta::FromSeconds(8); |
152 timing_.paint_timing.first_image_paint = base::TimeDelta::FromSeconds(5); | 153 timing_.paint_timing->first_image_paint = base::TimeDelta::FromSeconds(5); |
153 timing_.paint_timing.first_text_paint = base::TimeDelta::FromSeconds(6); | 154 timing_.paint_timing->first_text_paint = base::TimeDelta::FromSeconds(6); |
154 timing_.document_timing.load_event_start = base::TimeDelta::FromSeconds(7); | 155 timing_.document_timing->load_event_start = base::TimeDelta::FromSeconds(7); |
155 timing_.parse_timing.parse_stop = base::TimeDelta::FromSeconds(4); | 156 timing_.parse_timing->parse_stop = base::TimeDelta::FromSeconds(4); |
156 timing_.parse_timing.parse_blocked_on_script_load_duration = | 157 timing_.parse_timing->parse_blocked_on_script_load_duration = |
157 base::TimeDelta::FromSeconds(1); | 158 base::TimeDelta::FromSeconds(1); |
158 PopulateRequiredTimingFields(&timing_); | 159 PopulateRequiredTimingFields(&timing_); |
159 } | 160 } |
160 | 161 |
161 void RunTest(bool data_reduction_proxy_used, bool is_using_lofi) { | 162 void RunTest(bool data_reduction_proxy_used, bool is_using_lofi) { |
162 data_reduction_proxy_used_ = data_reduction_proxy_used; | 163 data_reduction_proxy_used_ = data_reduction_proxy_used; |
163 is_using_lofi_ = is_using_lofi; | 164 is_using_lofi_ = is_using_lofi; |
164 NavigateAndCommit(GURL(kDefaultTestUrl)); | 165 NavigateAndCommit(GURL(kDefaultTestUrl)); |
165 SimulateTimingUpdate(timing_); | 166 SimulateTimingUpdate(timing_); |
166 pingback_client_->Reset(); | 167 pingback_client_->Reset(); |
(...skipping 14 matching lines...) Expand all Loading... |
181 } else { | 182 } else { |
182 EXPECT_TRUE(!expected); | 183 EXPECT_TRUE(!expected); |
183 EXPECT_TRUE(!actual); | 184 EXPECT_TRUE(!actual); |
184 } | 185 } |
185 } | 186 } |
186 | 187 |
187 void ValidateTimes() { | 188 void ValidateTimes() { |
188 EXPECT_TRUE(pingback_client_->send_pingback_called()); | 189 EXPECT_TRUE(pingback_client_->send_pingback_called()); |
189 EXPECT_EQ(timing_.navigation_start, | 190 EXPECT_EQ(timing_.navigation_start, |
190 pingback_client_->timing()->navigation_start); | 191 pingback_client_->timing()->navigation_start); |
191 ExpectEqualOrUnset(timing_.paint_timing.first_contentful_paint, | 192 ExpectEqualOrUnset(timing_.paint_timing->first_contentful_paint, |
192 pingback_client_->timing()->first_contentful_paint); | 193 pingback_client_->timing()->first_contentful_paint); |
193 ExpectEqualOrUnset( | 194 ExpectEqualOrUnset( |
194 timing_.paint_timing.first_meaningful_paint, | 195 timing_.paint_timing->first_meaningful_paint, |
195 pingback_client_->timing()->experimental_first_meaningful_paint); | 196 pingback_client_->timing()->experimental_first_meaningful_paint); |
196 ExpectEqualOrUnset(timing_.response_start, | 197 ExpectEqualOrUnset(timing_.response_start, |
197 pingback_client_->timing()->response_start); | 198 pingback_client_->timing()->response_start); |
198 ExpectEqualOrUnset(timing_.document_timing.load_event_start, | 199 ExpectEqualOrUnset(timing_.document_timing->load_event_start, |
199 pingback_client_->timing()->load_event_start); | 200 pingback_client_->timing()->load_event_start); |
200 ExpectEqualOrUnset(timing_.paint_timing.first_image_paint, | 201 ExpectEqualOrUnset(timing_.paint_timing->first_image_paint, |
201 pingback_client_->timing()->first_image_paint); | 202 pingback_client_->timing()->first_image_paint); |
202 } | 203 } |
203 | 204 |
204 void ValidateLoFiInPingback(bool lofi_expected) { | 205 void ValidateLoFiInPingback(bool lofi_expected) { |
205 EXPECT_TRUE(pingback_client_->send_pingback_called()); | 206 EXPECT_TRUE(pingback_client_->send_pingback_called()); |
206 EXPECT_EQ(lofi_expected, pingback_client_->data().lofi_received()); | 207 EXPECT_EQ(lofi_expected, pingback_client_->data().lofi_received()); |
207 } | 208 } |
208 | 209 |
209 void ValidateHistograms() { | 210 void ValidateHistograms() { |
210 ValidateHistogramsForSuffix( | 211 ValidateHistogramsForSuffix( |
211 internal::kHistogramDOMContentLoadedEventFiredSuffix, | 212 internal::kHistogramDOMContentLoadedEventFiredSuffix, |
212 timing_.document_timing.dom_content_loaded_event_start); | 213 timing_.document_timing->dom_content_loaded_event_start); |
213 ValidateHistogramsForSuffix(internal::kHistogramFirstLayoutSuffix, | 214 ValidateHistogramsForSuffix(internal::kHistogramFirstLayoutSuffix, |
214 timing_.document_timing.first_layout); | 215 timing_.document_timing->first_layout); |
215 ValidateHistogramsForSuffix(internal::kHistogramLoadEventFiredSuffix, | 216 ValidateHistogramsForSuffix(internal::kHistogramLoadEventFiredSuffix, |
216 timing_.document_timing.load_event_start); | 217 timing_.document_timing->load_event_start); |
217 ValidateHistogramsForSuffix(internal::kHistogramFirstContentfulPaintSuffix, | 218 ValidateHistogramsForSuffix(internal::kHistogramFirstContentfulPaintSuffix, |
218 timing_.paint_timing.first_contentful_paint); | 219 timing_.paint_timing->first_contentful_paint); |
219 ValidateHistogramsForSuffix(internal::kHistogramFirstMeaningfulPaintSuffix, | 220 ValidateHistogramsForSuffix(internal::kHistogramFirstMeaningfulPaintSuffix, |
220 timing_.paint_timing.first_meaningful_paint); | 221 timing_.paint_timing->first_meaningful_paint); |
221 ValidateHistogramsForSuffix(internal::kHistogramFirstImagePaintSuffix, | 222 ValidateHistogramsForSuffix(internal::kHistogramFirstImagePaintSuffix, |
222 timing_.paint_timing.first_image_paint); | 223 timing_.paint_timing->first_image_paint); |
223 ValidateHistogramsForSuffix(internal::kHistogramFirstPaintSuffix, | 224 ValidateHistogramsForSuffix(internal::kHistogramFirstPaintSuffix, |
224 timing_.paint_timing.first_paint); | 225 timing_.paint_timing->first_paint); |
225 ValidateHistogramsForSuffix(internal::kHistogramFirstTextPaintSuffix, | 226 ValidateHistogramsForSuffix(internal::kHistogramFirstTextPaintSuffix, |
226 timing_.paint_timing.first_text_paint); | 227 timing_.paint_timing->first_text_paint); |
227 ValidateHistogramsForSuffix(internal::kHistogramParseStartSuffix, | 228 ValidateHistogramsForSuffix(internal::kHistogramParseStartSuffix, |
228 timing_.parse_timing.parse_start); | 229 timing_.parse_timing->parse_start); |
229 ValidateHistogramsForSuffix( | 230 ValidateHistogramsForSuffix( |
230 internal::kHistogramParseBlockedOnScriptLoadSuffix, | 231 internal::kHistogramParseBlockedOnScriptLoadSuffix, |
231 timing_.parse_timing.parse_blocked_on_script_load_duration); | 232 timing_.parse_timing->parse_blocked_on_script_load_duration); |
232 ValidateHistogramsForSuffix(internal::kHistogramParseDurationSuffix, | 233 ValidateHistogramsForSuffix(internal::kHistogramParseDurationSuffix, |
233 timing_.parse_timing.parse_stop.value() - | 234 timing_.parse_timing->parse_stop.value() - |
234 timing_.parse_timing.parse_start.value()); | 235 timing_.parse_timing->parse_start.value()); |
235 } | 236 } |
236 | 237 |
237 void ValidateHistogramsForSuffix( | 238 void ValidateHistogramsForSuffix( |
238 const std::string& histogram_suffix, | 239 const std::string& histogram_suffix, |
239 const base::Optional<base::TimeDelta>& event) { | 240 const base::Optional<base::TimeDelta>& event) { |
240 histogram_tester().ExpectTotalCount( | 241 histogram_tester().ExpectTotalCount( |
241 std::string(internal::kHistogramDataReductionProxyPrefix) | 242 std::string(internal::kHistogramDataReductionProxyPrefix) |
242 .append(histogram_suffix), | 243 .append(histogram_suffix), |
243 data_reduction_proxy_used_ ? 1 : 0); | 244 data_reduction_proxy_used_ ? 1 : 0); |
244 histogram_tester().ExpectTotalCount( | 245 histogram_tester().ExpectTotalCount( |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 | 336 |
336 protected: | 337 protected: |
337 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { | 338 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { |
338 tracker->AddObserver( | 339 tracker->AddObserver( |
339 base::MakeUnique<TestDataReductionProxyMetricsObserver>( | 340 base::MakeUnique<TestDataReductionProxyMetricsObserver>( |
340 web_contents(), pingback_client_.get(), data_reduction_proxy_used_, | 341 web_contents(), pingback_client_.get(), data_reduction_proxy_used_, |
341 is_using_lofi_)); | 342 is_using_lofi_)); |
342 } | 343 } |
343 | 344 |
344 std::unique_ptr<TestPingbackClient> pingback_client_; | 345 std::unique_ptr<TestPingbackClient> pingback_client_; |
345 page_load_metrics::PageLoadTiming timing_; | 346 page_load_metrics::mojom::PageLoadTiming timing_; |
346 | 347 |
347 private: | 348 private: |
348 bool data_reduction_proxy_used_; | 349 bool data_reduction_proxy_used_; |
349 bool is_using_lofi_; | 350 bool is_using_lofi_; |
350 | 351 |
351 DISALLOW_COPY_AND_ASSIGN(DataReductionProxyMetricsObserverTest); | 352 DISALLOW_COPY_AND_ASSIGN(DataReductionProxyMetricsObserverTest); |
352 }; | 353 }; |
353 | 354 |
354 TEST_F(DataReductionProxyMetricsObserverTest, DataReductionProxyOff) { | 355 TEST_F(DataReductionProxyMetricsObserverTest, DataReductionProxyOff) { |
355 ResetTest(); | 356 ResetTest(); |
(...skipping 21 matching lines...) Expand all Loading... |
377 TEST_F(DataReductionProxyMetricsObserverTest, OnCompletePingback) { | 378 TEST_F(DataReductionProxyMetricsObserverTest, OnCompletePingback) { |
378 ResetTest(); | 379 ResetTest(); |
379 // Verify that when data reduction proxy was used the correct timing | 380 // Verify that when data reduction proxy was used the correct timing |
380 // information is sent to SendPingback. | 381 // information is sent to SendPingback. |
381 RunTestAndNavigateToUntrackedUrl(true, false); | 382 RunTestAndNavigateToUntrackedUrl(true, false); |
382 ValidateTimes(); | 383 ValidateTimes(); |
383 | 384 |
384 ResetTest(); | 385 ResetTest(); |
385 // Verify that when data reduction proxy was used but first image paint is | 386 // Verify that when data reduction proxy was used but first image paint is |
386 // unset, the correct timing information is sent to SendPingback. | 387 // unset, the correct timing information is sent to SendPingback. |
387 timing_.paint_timing.first_image_paint = base::nullopt; | 388 timing_.paint_timing->first_image_paint = base::nullopt; |
388 RunTestAndNavigateToUntrackedUrl(true, false); | 389 RunTestAndNavigateToUntrackedUrl(true, false); |
389 ValidateTimes(); | 390 ValidateTimes(); |
390 | 391 |
391 ResetTest(); | 392 ResetTest(); |
392 // Verify that when data reduction proxy was used but first contentful paint | 393 // Verify that when data reduction proxy was used but first contentful paint |
393 // is unset, SendPingback is not called. | 394 // is unset, SendPingback is not called. |
394 timing_.paint_timing.first_contentful_paint = base::nullopt; | 395 timing_.paint_timing->first_contentful_paint = base::nullopt; |
395 RunTestAndNavigateToUntrackedUrl(true, false); | 396 RunTestAndNavigateToUntrackedUrl(true, false); |
396 ValidateTimes(); | 397 ValidateTimes(); |
397 | 398 |
398 ResetTest(); | 399 ResetTest(); |
399 // Verify that when data reduction proxy was used but first meaningful paint | 400 // Verify that when data reduction proxy was used but first meaningful paint |
400 // is unset, SendPingback is not called. | 401 // is unset, SendPingback is not called. |
401 timing_.paint_timing.first_meaningful_paint = base::nullopt; | 402 timing_.paint_timing->first_meaningful_paint = base::nullopt; |
402 RunTestAndNavigateToUntrackedUrl(true, false); | 403 RunTestAndNavigateToUntrackedUrl(true, false); |
403 ValidateTimes(); | 404 ValidateTimes(); |
404 | 405 |
405 ResetTest(); | 406 ResetTest(); |
406 // Verify that when data reduction proxy was used but load event start is | 407 // Verify that when data reduction proxy was used but load event start is |
407 // unset, SendPingback is not called. | 408 // unset, SendPingback is not called. |
408 timing_.document_timing.load_event_start = base::nullopt; | 409 timing_.document_timing->load_event_start = base::nullopt; |
409 RunTestAndNavigateToUntrackedUrl(true, false); | 410 RunTestAndNavigateToUntrackedUrl(true, false); |
410 ValidateTimes(); | 411 ValidateTimes(); |
411 ValidateLoFiInPingback(false); | 412 ValidateLoFiInPingback(false); |
412 | 413 |
413 ResetTest(); | 414 ResetTest(); |
414 | 415 |
415 std::unique_ptr<DataReductionProxyData> data = | 416 std::unique_ptr<DataReductionProxyData> data = |
416 base::MakeUnique<DataReductionProxyData>(); | 417 base::MakeUnique<DataReductionProxyData>(); |
417 data->set_used_data_reduction_proxy(true); | 418 data->set_used_data_reduction_proxy(true); |
418 data->set_lofi_received(true); | 419 data->set_lofi_received(true); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 } | 562 } |
562 } | 563 } |
563 | 564 |
564 NavigateToUntrackedUrl(); | 565 NavigateToUntrackedUrl(); |
565 | 566 |
566 ValidateDataHistograms(network_resources, drp_resources, network_bytes, | 567 ValidateDataHistograms(network_resources, drp_resources, network_bytes, |
567 drp_bytes, ocl_bytes); | 568 drp_bytes, ocl_bytes); |
568 } | 569 } |
569 | 570 |
570 } // namespace data_reduction_proxy | 571 } // namespace data_reduction_proxy |
OLD | NEW |