| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/prerender/prerender_histograms.h" | 5 #include "chrome/browser/prerender/prerender_histograms.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 perceived_page_load_time); | 303 perceived_page_load_time); |
| 304 } else if (recorded_non_overlapping) { | 304 } else if (recorded_non_overlapping) { |
| 305 RECORD_PLT("PerceivedPLTFirstAfterMissNonOverlappingOnly", | 305 RECORD_PLT("PerceivedPLTFirstAfterMissNonOverlappingOnly", |
| 306 perceived_page_load_time); | 306 perceived_page_load_time); |
| 307 } | 307 } |
| 308 } | 308 } |
| 309 } | 309 } |
| 310 } | 310 } |
| 311 } | 311 } |
| 312 | 312 |
| 313 void PrerenderHistograms::RecordPerceivedFirstContentfulPaintTime( |
| 314 Origin origin, |
| 315 base::TimeDelta perceived_first_contentful_paint, |
| 316 bool was_hidden) { |
| 317 RecordHistogramTime(GetPerceivedFirstContentfulPaintHistogramName( |
| 318 origin, IsOriginWash(), was_hidden), |
| 319 base::TimeDelta::FromMilliseconds(10), |
| 320 base::TimeDelta::FromMinutes(2), |
| 321 perceived_first_contentful_paint, 50); |
| 322 } |
| 323 |
| 324 void PrerenderHistograms::RecordPerceivedFirstContentfulPaintStatus( |
| 325 Origin origin, |
| 326 bool successful, |
| 327 bool was_hidden) { |
| 328 RecordHistogramEnum( |
| 329 GetHistogramName(origin, IsOriginWash(), "PerceivedTTFCPRecorded") + |
| 330 FirstContentfulPaintHiddenName(was_hidden), |
| 331 successful ? 1 : 0, 2); |
| 332 } |
| 333 |
| 313 void PrerenderHistograms::RecordPageLoadTimeNotSwappedIn( | 334 void PrerenderHistograms::RecordPageLoadTimeNotSwappedIn( |
| 314 Origin origin, | 335 Origin origin, |
| 315 base::TimeDelta page_load_time, | 336 base::TimeDelta page_load_time, |
| 316 const GURL& url) const { | 337 const GURL& url) const { |
| 317 // If the URL to be prerendered is not a http[s] URL, or is a Google URL, | 338 // If the URL to be prerendered is not a http[s] URL, or is a Google URL, |
| 318 // do not record. | 339 // do not record. |
| 319 if (!url.SchemeIsHTTPOrHTTPS() || IsGoogleDomain(url)) | 340 if (!url.SchemeIsHTTPOrHTTPS() || IsGoogleDomain(url)) |
| 320 return; | 341 return; |
| 321 RECORD_PLT("PrerenderNotSwappedInPLT", page_load_time); | 342 RECORD_PLT("PrerenderNotSwappedInPLT", page_load_time); |
| 322 } | 343 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 DCHECK(thread_checker_.CalledOnValidThread()); | 466 DCHECK(thread_checker_.CalledOnValidThread()); |
| 446 | 467 |
| 447 const int kMaxRedirectCount = 10; | 468 const int kMaxRedirectCount = 10; |
| 448 std::string histogram_base_name = base::StringPrintf( | 469 std::string histogram_base_name = base::StringPrintf( |
| 449 "NoStatePrefetch%sResourceRedirects", is_main_resource ? "Main" : "Sub"); | 470 "NoStatePrefetch%sResourceRedirects", is_main_resource ? "Main" : "Sub"); |
| 450 std::string histogram_name = | 471 std::string histogram_name = |
| 451 GetHistogramName(origin, IsOriginWash(), histogram_base_name); | 472 GetHistogramName(origin, IsOriginWash(), histogram_base_name); |
| 452 RecordHistogramEnum(histogram_name, redirect_count, kMaxRedirectCount); | 473 RecordHistogramEnum(histogram_name, redirect_count, kMaxRedirectCount); |
| 453 } | 474 } |
| 454 | 475 |
| 455 void PrerenderHistograms::RecordFirstContentfulPaint( | 476 void PrerenderHistograms::RecordNoStateFirstContentfulPaint( |
| 456 Origin origin, | 477 Origin origin, |
| 457 bool is_no_store, | 478 bool is_no_store, |
| 458 base::TimeDelta time, | 479 base::TimeDelta time, |
| 459 base::TimeDelta prefetch_age) { | 480 base::TimeDelta prefetch_age) { |
| 460 DCHECK(thread_checker_.CalledOnValidThread()); | 481 DCHECK(thread_checker_.CalledOnValidThread()); |
| 461 | 482 |
| 462 if (!prefetch_age.is_zero()) { | 483 if (!prefetch_age.is_zero()) { |
| 463 DCHECK_NE(origin, ORIGIN_NONE); | 484 DCHECK_NE(origin, ORIGIN_NONE); |
| 464 RecordHistogramTime(GetHistogramName(origin, IsOriginWash(), | 485 RecordHistogramTime(GetHistogramName(origin, IsOriginWash(), |
| 465 "Prerender.NoStatePrefetchAge"), | 486 "Prerender.NoStatePrefetchAge"), |
| 466 base::TimeDelta::FromMilliseconds(10), | 487 base::TimeDelta::FromMilliseconds(10), |
| 467 base::TimeDelta::FromMinutes(30), prefetch_age, 50); | 488 base::TimeDelta::FromMinutes(30), prefetch_age, 50); |
| 468 } | 489 } |
| 469 | 490 |
| 470 RecordHistogramTime(GetFirstContentfulPaintHistogramName( | 491 RecordHistogramTime(GetNoStateFirstContentfulPaintHistogramName( |
| 471 origin, IsOriginWash(), is_no_store, prefetch_age), | 492 origin, IsOriginWash(), is_no_store, prefetch_age), |
| 472 base::TimeDelta::FromMilliseconds(10), | 493 base::TimeDelta::FromMilliseconds(10), |
| 473 base::TimeDelta::FromMinutes(2), time, 50); | 494 base::TimeDelta::FromMinutes(2), time, 50); |
| 474 } | 495 } |
| 475 | 496 |
| 476 bool PrerenderHistograms::IsOriginWash() const { | 497 bool PrerenderHistograms::IsOriginWash() const { |
| 477 if (!WithinWindow()) | 498 if (!WithinWindow()) |
| 478 return false; | 499 return false; |
| 479 return origin_wash_; | 500 return origin_wash_; |
| 480 } | 501 } |
| 481 | 502 |
| 482 // static | 503 // static |
| 483 std::string PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 504 std::string PrerenderHistograms::GetNoStateFirstContentfulPaintHistogramName( |
| 484 Origin origin, | 505 Origin origin, |
| 485 bool is_wash, | 506 bool is_wash, |
| 486 bool is_no_store, | 507 bool is_no_store, |
| 487 base::TimeDelta prefetch_age) { | 508 base::TimeDelta prefetch_age) { |
| 488 std::string histogram_base_name; | 509 std::string histogram_base_name; |
| 489 if (prefetch_age.is_zero()) { | 510 if (prefetch_age.is_zero()) { |
| 490 histogram_base_name = "NoStatePrefetchTTFCP.Reference"; | 511 histogram_base_name = "NoStatePrefetchTTFCP.Reference"; |
| 491 } else { | 512 } else { |
| 492 histogram_base_name = prefetch_age < base::TimeDelta::FromMinutes( | 513 histogram_base_name = prefetch_age < base::TimeDelta::FromMinutes( |
| 493 net::HttpCache::kPrefetchReuseMins) | 514 net::HttpCache::kPrefetchReuseMins) |
| 494 ? "NoStatePrefetchTTFCP.Warm" | 515 ? "NoStatePrefetchTTFCP.Warm" |
| 495 : "NoStatePrefetchTTFCP.Cold"; | 516 : "NoStatePrefetchTTFCP.Cold"; |
| 496 } | 517 } |
| 497 | 518 |
| 498 histogram_base_name += is_no_store ? ".NoStore" : ".Cacheable"; | 519 histogram_base_name += is_no_store ? ".NoStore" : ".Cacheable"; |
| 499 return GetHistogramName(origin, is_wash, histogram_base_name); | 520 return GetHistogramName(origin, is_wash, histogram_base_name); |
| 500 } | 521 } |
| 501 | 522 |
| 523 // static |
| 524 std::string PrerenderHistograms::GetPerceivedFirstContentfulPaintHistogramName( |
| 525 Origin origin, |
| 526 bool is_wash, |
| 527 bool was_hidden) { |
| 528 return GetHistogramName(origin, is_wash, "PerceivedTTFCP") + |
| 529 FirstContentfulPaintHiddenName(was_hidden); |
| 530 } |
| 531 |
| 532 std::string PrerenderHistograms::FirstContentfulPaintHiddenName( |
| 533 bool was_hidden) { |
| 534 return was_hidden ? ".Hidden" : ".Visible"; |
| 535 } |
| 536 |
| 502 } // namespace prerender | 537 } // namespace prerender |
| OLD | NEW |