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

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: comment on BroadcastEventToObservers 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() {}
tbansal1 2017/07/12 21:58:45 Is it useful to add sequence checker on this class
RyanSturm 2017/07/17 18:48:30 Done.
34
35 PreviewsUKMObserver::~PreviewsUKMObserver() {}
36
37 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
38 PreviewsUKMObserver::OnCommit(content::NavigationHandle* navigation_handle,
39 ukm::SourceId source_id) {
40 // As documented in content/public/browser/navigation_handle.h, this
41 // NavigationData is a clone of the NavigationData instance returned from
42 // ResourceDispatcherHostDelegate::GetNavigationData during commit.
43 // Because ChromeResourceDispatcherHostDelegate always returns a
44 // ChromeNavigationData, it is safe to static_cast here.
45 ChromeNavigationData* chrome_navigation_data =
46 static_cast<ChromeNavigationData*>(
47 navigation_handle->GetNavigationData());
48 if (!chrome_navigation_data)
49 return CONTINUE_OBSERVING;
50 data_reduction_proxy::DataReductionProxyData* data =
51 chrome_navigation_data->GetDataReductionProxyData();
52 if (data && data->used_data_reduction_proxy() && data->lite_page_received()) {
53 lite_page_seen_ = true;
54 }
55
56 return CONTINUE_OBSERVING;
57 }
58
59 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
60 PreviewsUKMObserver::OnStart(content::NavigationHandle* navigation_handle,
61 const GURL& currently_committed_url,
62 bool started_in_foreground) {
63 if (!started_in_foreground)
64 return STOP_OBSERVING;
65 return CONTINUE_OBSERVING;
66 }
67
68 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
69 PreviewsUKMObserver::FlushMetricsOnAppEnterBackground(
70 const page_load_metrics::mojom::PageLoadTiming& timing,
71 const page_load_metrics::PageLoadExtraInfo& info) {
72 RecordPreviewsTypes(info);
73 return STOP_OBSERVING;
74 }
75
76 void PreviewsUKMObserver::OnComplete(
77 const page_load_metrics::mojom::PageLoadTiming& timing,
78 const page_load_metrics::PageLoadExtraInfo& info) {
79 RecordPreviewsTypes(info);
80 }
81
82 void PreviewsUKMObserver::RecordPreviewsTypes(
83 const page_load_metrics::PageLoadExtraInfo& info) {
84 // Only record previews types when they occur.
85 if (!server_lofi_seen_ && !client_lofi_seen_ && !lite_page_seen_)
86 return;
87 ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
88 if (!ukm_recorder)
89 return;
90 std::unique_ptr<ukm::UkmEntryBuilder> builder =
91 ukm_recorder->GetEntryBuilder(info.source_id, kPreviewsName);
92 if (server_lofi_seen_)
93 builder->AddMetric(kPreviewsServerLoFi, true);
94 if (client_lofi_seen_)
95 builder->AddMetric(kPreviewsClientLoFi, true);
96 if (lite_page_seen_)
97 builder->AddMetric(kPreviewsLitePage, true);
98 if (opt_out_occurred_)
99 builder->AddMetric(kPreviewsOptOut, true);
100 }
101
102 void PreviewsUKMObserver::OnLoadedResource(
103 const page_load_metrics::ExtraRequestCompleteInfo&
104 extra_request_complete_info) {
105 if (extra_request_complete_info.data_reduction_proxy_data) {
106 if (extra_request_complete_info.data_reduction_proxy_data
107 ->lofi_received()) {
108 server_lofi_seen_ = true;
109 }
110 if (extra_request_complete_info.data_reduction_proxy_data
111 ->client_lofi_requested()) {
112 client_lofi_seen_ = true;
tbansal1 2017/07/12 21:58:45 Is this |seen| or |requested|?
RyanSturm 2017/07/17 18:48:30 They are synonymous in that adding the range heade
113 }
114 }
115 }
116
117 void PreviewsUKMObserver::OnEventOccurred(const void* const event_key) {
118 if (event_key == PreviewsInfoBarDelegate::OptOutEventKey())
119 opt_out_occurred_ = true;
120 }
121
122 } // namespace previews
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698