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

Unified Diff: chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc

Issue 2478903002: DRP metrics observer stop observing after hidden (Closed)
Patch Set: bmcquade comments Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
diff --git a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
index 57d0cc05a3e65f0238e29c1b3681616a802cafd4..50fc1417bf68e062ae617a7bffdfe7759d93106c 100644
--- a/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/data_reduction_proxy_metrics_observer.cc
@@ -22,46 +22,36 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_data.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "url/gurl.h"
namespace data_reduction_proxy {
namespace {
-bool ShouldRecordHistogram(const DataReductionProxyData* data,
- const base::Optional<base::TimeDelta>& event,
- const page_load_metrics::PageLoadExtraInfo& info) {
- return data && data->used_data_reduction_proxy() &&
- WasStartedInForegroundOptionalEventInForeground(event, info);
-}
-
// A macro is needed because PAGE_LOAD_HISTOGRAM creates a static instance of
// the histogram. A distinct histogram is needed for each place that calls
// RECORD_HISTOGRAMS_FOR_SUFFIX. |event| is the timing event representing when
// |value| became available.
-#define RECORD_HISTOGRAMS_FOR_SUFFIX(data, event, value, info, \
- histogram_suffix) \
- do { \
- if (ShouldRecordHistogram(data.get(), event, info)) { \
- PAGE_LOAD_HISTOGRAM( \
- std::string(internal::kHistogramDataReductionProxyPrefix) \
- .append(histogram_suffix), \
- value); \
- if (data->lofi_requested()) { \
- PAGE_LOAD_HISTOGRAM( \
- std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \
- .append(histogram_suffix), \
- value); \
- } \
- } \
+#define RECORD_HISTOGRAMS_FOR_SUFFIX(data, value, histogram_suffix) \
+ do { \
+ PAGE_LOAD_HISTOGRAM( \
+ std::string(internal::kHistogramDataReductionProxyPrefix) \
+ .append(histogram_suffix), \
+ value); \
+ if (data->lofi_requested()) { \
+ PAGE_LOAD_HISTOGRAM( \
+ std::string(internal::kHistogramDataReductionProxyLoFiOnPrefix) \
+ .append(histogram_suffix), \
+ value); \
+ } \
} while (false)
} // namespace
namespace internal {
const char kHistogramDataReductionProxyPrefix[] =
"PageLoad.Clients.DataReductionProxy.";
const char kHistogramDataReductionProxyLoFiOnPrefix[] =
"PageLoad.Clients.DataReductionProxy.LoFiOn.";
@@ -109,38 +99,59 @@ DataReductionProxyMetricsObserver::OnCommit(
// ResourceDispatcherHostDelegate::GetNavigationData during commit.
// Because ChromeResourceDispatcherHostDelegate always returns a
// ChromeNavigationData, it is safe to static_cast here.
ChromeNavigationData* chrome_navigation_data =
static_cast<ChromeNavigationData*>(
navigation_handle->GetNavigationData());
if (!chrome_navigation_data)
return STOP_OBSERVING;
data_reduction_proxy::DataReductionProxyData* data =
chrome_navigation_data->GetDataReductionProxyData();
- if (!data)
+ if (!data || !data->used_data_reduction_proxy())
return STOP_OBSERVING;
data_ = data->DeepCopy();
// DataReductionProxy page loads should only occur on HTTP navigations.
- DCHECK(!data_->used_data_reduction_proxy() ||
- !navigation_handle->GetURL().SchemeIsCryptographic());
+ DCHECK(!navigation_handle->GetURL().SchemeIsCryptographic());
return CONTINUE_OBSERVING;
}
+page_load_metrics::PageLoadMetricsObserver::ObservePolicy
+DataReductionProxyMetricsObserver::OnStart(
+ content::NavigationHandle* navigation_handle,
+ const GURL& currently_committed_url,
+ bool started_in_foreground) {
+ if (!started_in_foreground)
+ return STOP_OBSERVING;
+ return CONTINUE_OBSERVING;
+}
+
+page_load_metrics::PageLoadMetricsObserver::ObservePolicy
+DataReductionProxyMetricsObserver::OnHidden(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
+ SendPingback(timing, info);
+ return STOP_OBSERVING;
+}
+
void DataReductionProxyMetricsObserver::OnComplete(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
+ SendPingback(timing, info);
+}
+
+void DataReductionProxyMetricsObserver::SendPingback(
+ const page_load_metrics::PageLoadTiming& timing,
+ const page_load_metrics::PageLoadExtraInfo& info) {
// TODO(ryansturm): Move to OnFirstBackgroundEvent to handle some fast
// shutdown cases. crbug.com/618072
if (!browser_context_)
return;
- if (!data_ || !data_->used_data_reduction_proxy())
- return;
if (data_reduction_proxy::params::IsIncludedInHoldbackFieldTrial() ||
data_reduction_proxy::params::IsIncludedInTamperDetectionExperiment()) {
return;
}
// Only consider timing events that happened before the first background
// event.
base::Optional<base::TimeDelta> response_start;
base::Optional<base::TimeDelta> load_event_start;
base::Optional<base::TimeDelta> first_image_paint;
base::Optional<base::TimeDelta> first_contentful_paint;
@@ -182,99 +193,89 @@ void DataReductionProxyMetricsObserver::OnComplete(
first_image_paint, first_contentful_paint,
experimental_first_meaningful_paint,
parse_blocked_on_script_load_duration, parse_stop);
GetPingbackClient()->SendPingback(*data_, data_reduction_proxy_timing);
}
void DataReductionProxyMetricsObserver::OnDomContentLoadedEventStart(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
RECORD_HISTOGRAMS_FOR_SUFFIX(
- data_, timing.dom_content_loaded_event_start,
- timing.dom_content_loaded_event_start.value(), info,
+ data_, timing.dom_content_loaded_event_start.value(),
internal::kHistogramDOMContentLoadedEventFiredSuffix);
}
void DataReductionProxyMetricsObserver::OnLoadEventStart(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start,
- timing.load_event_start.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.load_event_start.value(),
internal::kHistogramLoadEventFiredSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstLayout(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout,
- timing.first_layout.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_layout.value(),
internal::kHistogramFirstLayoutSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstPaint(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint,
- timing.first_paint.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_paint.value(),
internal::kHistogramFirstPaintSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstTextPaint(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint,
- timing.first_text_paint.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_text_paint.value(),
internal::kHistogramFirstTextPaintSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstImagePaint(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint,
- timing.first_image_paint.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_image_paint.value(),
internal::kHistogramFirstImagePaintSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstContentfulPaint(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint,
- timing.first_contentful_paint.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_contentful_paint.value(),
internal::kHistogramFirstContentfulPaintSuffix);
}
void DataReductionProxyMetricsObserver::OnFirstMeaningfulPaint(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_meaningful_paint,
- timing.first_meaningful_paint.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.first_meaningful_paint.value(),
internal::kHistogramFirstMeaningfulPaintSuffix);
}
void DataReductionProxyMetricsObserver::OnParseStart(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start,
- timing.parse_start.value(), info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_start.value(),
internal::kHistogramParseStartSuffix);
}
void DataReductionProxyMetricsObserver::OnParseStop(
const page_load_metrics::PageLoadTiming& timing,
const page_load_metrics::PageLoadExtraInfo& info) {
base::TimeDelta parse_duration =
timing.parse_stop.value() - timing.parse_start.value();
- RECORD_HISTOGRAMS_FOR_SUFFIX(data_, timing.parse_stop, parse_duration, info,
+ RECORD_HISTOGRAMS_FOR_SUFFIX(data_, parse_duration,
internal::kHistogramParseDurationSuffix);
RECORD_HISTOGRAMS_FOR_SUFFIX(
- data_, timing.parse_stop,
- timing.parse_blocked_on_script_load_duration.value(), info,
+ data_, timing.parse_blocked_on_script_load_duration.value(),
internal::kHistogramParseBlockedOnScriptLoadSuffix);
}
DataReductionProxyPingbackClient*
DataReductionProxyMetricsObserver::GetPingbackClient() const {
return DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
browser_context_)
->data_reduction_proxy_service()
->pingback_client();
}

Powered by Google App Engine
This is Rietveld 408576698