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

Side by Side Diff: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer.cc

Issue 2719823003: Convert first contentful paint logging to the new UKM client API (Closed)
Patch Set: migrate to int32_t Created 3 years, 9 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/ukm_page_load_metrics_obser ver.h" 5 #include "chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_obser ver.h"
6 #include "chrome/browser/browser_process.h" 6 #include "chrome/browser/browser_process.h"
7 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
8 #include "components/ukm/ukm_entry_builder.h"
7 #include "components/ukm/ukm_service.h" 9 #include "components/ukm/ukm_service.h"
8 #include "components/ukm/ukm_source.h" 10
11 namespace internal {
12
13 const char kUkmPageLoadEventName[] = "PageLoad";
14 const char kUkmFirstContentfulPaintName[] =
15 "PaintTiming.NavigationToFirstContentfulPaint";
16
17 } // namespace internal
9 18
10 // static 19 // static
11 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> 20 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver>
12 UkmPageLoadMetricsObserver::CreateIfNeeded() { 21 UkmPageLoadMetricsObserver::CreateIfNeeded() {
13 if (!g_browser_process->ukm_service()) { 22 if (!g_browser_process->ukm_service()) {
14 return nullptr; 23 return nullptr;
15 } 24 }
16 25
17 return base::MakeUnique<UkmPageLoadMetricsObserver>(); 26 return base::MakeUnique<UkmPageLoadMetricsObserver>();
18 } 27 }
19 28
20 UkmPageLoadMetricsObserver::UkmPageLoadMetricsObserver() {} 29 UkmPageLoadMetricsObserver::UkmPageLoadMetricsObserver()
30 : source_id_(ukm::UkmService::NewSourceId()) {}
31
32 UkmPageLoadMetricsObserver::~UkmPageLoadMetricsObserver() = default;
21 33
22 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnStart( 34 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnStart(
23 content::NavigationHandle* navigation_handle, 35 content::NavigationHandle* navigation_handle,
24 const GURL& currently_committed_url, 36 const GURL& currently_committed_url,
25 bool started_in_foreground) { 37 bool started_in_foreground) {
26 return started_in_foreground ? CONTINUE_OBSERVING : STOP_OBSERVING; 38 if (!started_in_foreground)
39 return STOP_OBSERVING;
40
41 ukm::UkmService* ukm_service = g_browser_process->ukm_service();
42 ukm_service->UpdateSourceURL(source_id_, navigation_handle->GetURL());
43 return CONTINUE_OBSERVING;
27 } 44 }
28 45
29 UkmPageLoadMetricsObserver::ObservePolicy 46 UkmPageLoadMetricsObserver::ObservePolicy
30 UkmPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground( 47 UkmPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground(
31 const page_load_metrics::PageLoadTiming& timing, 48 const page_load_metrics::PageLoadTiming& timing,
32 const page_load_metrics::PageLoadExtraInfo& info) { 49 const page_load_metrics::PageLoadExtraInfo& info) {
33 SendMetricsToUkm(timing, info); 50 AddTimingMetrics(timing);
51 AddPageLoadExtraInfoMetrics(info, base::TimeTicks::Now());
34 return STOP_OBSERVING; 52 return STOP_OBSERVING;
35 } 53 }
36 54
37 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnHidden( 55 UkmPageLoadMetricsObserver::ObservePolicy UkmPageLoadMetricsObserver::OnHidden(
38 const page_load_metrics::PageLoadTiming& timing, 56 const page_load_metrics::PageLoadTiming& timing,
39 const page_load_metrics::PageLoadExtraInfo& info) { 57 const page_load_metrics::PageLoadExtraInfo& info) {
40 SendMetricsToUkm(timing, info); 58 AddTimingMetrics(timing);
59 AddPageLoadExtraInfoMetrics(info, base::TimeTicks());
rkaplow 2017/03/01 23:54:39 shouldn't this be Now()? Also i also see the argum
Bryan McQuade 2017/03/02 03:49:50 ah, this is used for some of the future metrics th
41 return STOP_OBSERVING; 60 return STOP_OBSERVING;
42 } 61 }
43 62
63 void UkmPageLoadMetricsObserver::OnFailedProvisionalLoad(
64 const page_load_metrics::FailedProvisionalLoadInfo& failed_load_info,
65 const page_load_metrics::PageLoadExtraInfo& extra_info) {
66 AddPageLoadExtraInfoMetrics(extra_info, base::TimeTicks());
67 }
68
44 void UkmPageLoadMetricsObserver::OnComplete( 69 void UkmPageLoadMetricsObserver::OnComplete(
45 const page_load_metrics::PageLoadTiming& timing, 70 const page_load_metrics::PageLoadTiming& timing,
46 const page_load_metrics::PageLoadExtraInfo& info) { 71 const page_load_metrics::PageLoadExtraInfo& info) {
47 SendMetricsToUkm(timing, info); 72 AddTimingMetrics(timing);
73 AddPageLoadExtraInfoMetrics(info, base::TimeTicks());
48 } 74 }
49 75
50 void UkmPageLoadMetricsObserver::SendMetricsToUkm( 76 void UkmPageLoadMetricsObserver::AddTimingMetrics(
51 const page_load_metrics::PageLoadTiming& timing, 77 const page_load_metrics::PageLoadTiming& timing) {
52 const page_load_metrics::PageLoadExtraInfo& info) { 78 if (!timing.first_contentful_paint)
53 if (!info.did_commit || !timing.first_contentful_paint)
54 return; 79 return;
55 80
56 ukm::UkmService* ukm_service = g_browser_process->ukm_service(); 81 ukm::UkmService* ukm_service = g_browser_process->ukm_service();
57 DCHECK(ukm_service); 82 std::unique_ptr<ukm::UkmEntryBuilder> builder =
83 ukm_service->GetEntryBuilder(source_id_, internal::kUkmPageLoadEventName);
84 builder->AddMetric(internal::kUkmFirstContentfulPaintName,
85 timing.first_contentful_paint.value().InMilliseconds());
86 }
58 87
59 std::unique_ptr<ukm::UkmSource> source = base::MakeUnique<ukm::UkmSource>(); 88 void UkmPageLoadMetricsObserver::AddPageLoadExtraInfoMetrics(
60 source->set_committed_url(info.url); 89 const page_load_metrics::PageLoadExtraInfo& info,
61 source->set_first_contentful_paint(timing.first_contentful_paint.value()); 90 base::TimeTicks app_background_time) {
rkaplow 2017/03/01 23:54:39 a_b_t seems to be unused
Bryan McQuade 2017/03/02 03:49:50 removed
62 91 ukm::UkmService* ukm_service = g_browser_process->ukm_service();
63 ukm_service->RecordSource(std::move(source)); 92 ukm_service->UpdateSourceURL(source_id_, info.url);
64 } 93 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698