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

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

Issue 2952343004: Adding previews information to PLM UKM (Closed)
Patch Set: rebase Created 3 years, 5 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/page_load_metrics/observers/previews_ukm_observer.h"
6
7 #include "base/optional.h"
8 #include "base/time/time.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/loader/chrome_navigation_data.h"
11 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
12 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
13 #include "chrome/browser/previews/previews_infobar_delegate.h"
14 #include "chrome/common/page_load_metrics/page_load_timing.h"
15 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data .h"
16 #include "components/ukm/ukm_source.h"
17 #include "content/public/browser/navigation_handle.h"
18 #include "services/metrics/public/cpp/ukm_entry_builder.h"
19 #include "services/metrics/public/cpp/ukm_recorder.h"
20
21 namespace previews {
22
23 namespace {
24
25 const char kPreviewsName[] = "Previews";
26 const char kPreviewsServerLoFi[] = "server_lofi";
27 const char kPreviewsClientLoFi[] = "client_lofi";
28 const char kPreviewsLitePage[] = "lite_page";
29 const char kPreviewsOptOut[] = "opt_out";
30
31 } // namespace
32
33 PreviewsUKMObserver::PreviewsUKMObserver() {}
34
35 PreviewsUKMObserver::~PreviewsUKMObserver() {}
36
37 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
38 PreviewsUKMObserver::OnCommit(content::NavigationHandle* navigation_handle,
39 ukm::SourceId source_id) {
40 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
41 // As documented in content/public/browser/navigation_handle.h, this
42 // NavigationData is a clone of the NavigationData instance returned from
43 // ResourceDispatcherHostDelegate::GetNavigationData during commit.
44 // Because ChromeResourceDispatcherHostDelegate always returns a
45 // ChromeNavigationData, it is safe to static_cast here.
46 ChromeNavigationData* chrome_navigation_data =
47 static_cast<ChromeNavigationData*>(
48 navigation_handle->GetNavigationData());
49 if (!chrome_navigation_data)
50 return CONTINUE_OBSERVING;
51 data_reduction_proxy::DataReductionProxyData* data =
52 chrome_navigation_data->GetDataReductionProxyData();
53 if (data && data->used_data_reduction_proxy() && data->lite_page_received()) {
54 lite_page_seen_ = true;
55 }
56
57 return CONTINUE_OBSERVING;
58 }
59
60 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
61 PreviewsUKMObserver::OnStart(content::NavigationHandle* navigation_handle,
62 const GURL& currently_committed_url,
63 bool started_in_foreground) {
64 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
65 if (!started_in_foreground)
66 return STOP_OBSERVING;
67 return CONTINUE_OBSERVING;
68 }
69
70 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
71 PreviewsUKMObserver::FlushMetricsOnAppEnterBackground(
72 const page_load_metrics::mojom::PageLoadTiming& timing,
73 const page_load_metrics::PageLoadExtraInfo& info) {
74 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
75 RecordPreviewsTypes(info);
76 return STOP_OBSERVING;
77 }
78
79 void PreviewsUKMObserver::OnComplete(
80 const page_load_metrics::mojom::PageLoadTiming& timing,
81 const page_load_metrics::PageLoadExtraInfo& info) {
82 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
83 RecordPreviewsTypes(info);
84 }
85
86 void PreviewsUKMObserver::RecordPreviewsTypes(
87 const page_load_metrics::PageLoadExtraInfo& info) {
88 // Only record previews types when they occur.
89 if (!server_lofi_seen_ && !client_lofi_seen_ && !lite_page_seen_)
90 return;
91 ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
92 if (!ukm_recorder)
93 return;
94 std::unique_ptr<ukm::UkmEntryBuilder> builder =
95 ukm_recorder->GetEntryBuilder(info.source_id, kPreviewsName);
96 if (server_lofi_seen_)
97 builder->AddMetric(kPreviewsServerLoFi, true);
98 if (client_lofi_seen_)
99 builder->AddMetric(kPreviewsClientLoFi, true);
100 if (lite_page_seen_)
101 builder->AddMetric(kPreviewsLitePage, true);
102 if (opt_out_occurred_)
103 builder->AddMetric(kPreviewsOptOut, true);
104 }
105
106 void PreviewsUKMObserver::OnLoadedResource(
107 const page_load_metrics::ExtraRequestCompleteInfo&
108 extra_request_complete_info) {
109 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
110 if (extra_request_complete_info.data_reduction_proxy_data) {
111 if (extra_request_complete_info.data_reduction_proxy_data
112 ->lofi_received()) {
113 server_lofi_seen_ = true;
114 }
115 if (extra_request_complete_info.data_reduction_proxy_data
116 ->client_lofi_requested()) {
117 client_lofi_seen_ = true;
118 }
119 }
120 }
121
122 void PreviewsUKMObserver::OnEventOccurred(const void* const event_key) {
123 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
124 if (event_key == PreviewsInfoBarDelegate::OptOutEventKey())
125 opt_out_occurred_ = true;
126 }
127
128 } // namespace previews
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698