Chromium Code Reviews| Index: chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer.cc |
| diff --git a/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..06a80bb7c28d884da3cc068eb52089fa40a8b160 |
| --- /dev/null |
| +++ b/chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer.cc |
| @@ -0,0 +1,73 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/page_load_metrics/observers/media_page_load_metrics_observer.h" |
| + |
| +#include "chrome/browser/page_load_metrics/page_load_metrics_util.h" |
| +#include "chrome/common/page_load_metrics/page_load_timing.h" |
| +#include "third_party/WebKit/public/platform/WebLoadingBehaviorFlag.h" |
| + |
| +namespace { |
| + |
| +const char kHistogramNetworkBytes[] = |
| + "PageLoad.Clients.MediaPageLoad.Experimental.Bytes.Network"; |
| +const char kHistogramCacheBytes[] = |
| + "PageLoad.Clients.MediaPageLoad.Experimental.Bytes.Cache"; |
| +const char kHistogramTotalBytes[] = |
| + "PageLoad.Clients.MediaPageLoad.Experimental.Bytes.Total"; |
| + |
| +} // namespace |
| + |
| +MediaPageLoadMetricsObserver::MediaPageLoadMetricsObserver() |
| + : cache_bytes_(0), network_bytes_(0), played_media_(false) {} |
| + |
| +MediaPageLoadMetricsObserver::~MediaPageLoadMetricsObserver() {} |
|
mlamouri (slow - plz ping)
2017/03/13 18:38:27
nit: = default;
RyanSturm
2017/03/13 23:38:24
Done. I've only rarely seen "default" for destruct
|
| + |
| +void MediaPageLoadMetricsObserver::OnLoadedResource( |
| + const page_load_metrics::ExtraRequestInfo& extra_request_info) { |
| + if (extra_request_info.was_cached) { |
| + cache_bytes_ += extra_request_info.raw_body_bytes; |
| + } else { |
| + network_bytes_ += extra_request_info.raw_body_bytes; |
| + } |
| +} |
| + |
| +page_load_metrics::PageLoadMetricsObserver::ObservePolicy |
| +MediaPageLoadMetricsObserver::FlushMetricsOnAppEnterBackground( |
| + const page_load_metrics::PageLoadTiming& timing, |
| + const page_load_metrics::PageLoadExtraInfo& info) { |
| + // FlushMetricsOnAppEnterBackground is invoked on Android in cases where the |
| + // app is about to be backgrounded, as part of the Activity.onPause() |
| + // flow. After this method is invoked, Chrome may be killed without further |
| + // notification, so we record final metrics collected up to this point. |
| + if (info.did_commit && played_media_) { |
| + RecordByteHistograms(); |
| + } |
| + return STOP_OBSERVING; |
| +} |
| + |
| +void MediaPageLoadMetricsObserver::OnComplete( |
| + const page_load_metrics::PageLoadTiming& timing, |
| + const page_load_metrics::PageLoadExtraInfo& info) { |
| + if (!played_media_) |
| + return; |
| + RecordByteHistograms(); |
| +} |
| + |
| +void MediaPageLoadMetricsObserver::OnLoadingBehaviorObserved( |
| + const page_load_metrics::PageLoadExtraInfo& info) { |
| + if (played_media_) |
| + return; |
| + |
| + played_media_ = |
| + (info.metadata.behavior_flags & |
| + blink::WebLoadingBehaviorFlag::WebLoadingBehaviorMediaPlayed) != 0; |
| +} |
| + |
| +void MediaPageLoadMetricsObserver::RecordByteHistograms() { |
| + DCHECK(played_media_); |
| + PAGE_BYTES_HISTOGRAM(kHistogramNetworkBytes, network_bytes_); |
| + PAGE_BYTES_HISTOGRAM(kHistogramCacheBytes, cache_bytes_); |
| + PAGE_BYTES_HISTOGRAM(kHistogramTotalBytes, network_bytes_ + cache_bytes_); |
| +} |