| Index: chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
|
| diff --git a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
|
| index b3d5d177608529feee2f2eea982bc0fbea90667d..1329a7dfb92badd706c3f32c6e61f26b8e3521c8 100644
|
| --- a/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
|
| +++ b/chrome/browser/page_load_metrics/observers/subresource_filter_metrics_observer.cc
|
| @@ -35,6 +35,21 @@ const char kHistogramSubresourceFilterLoad[] =
|
| "PageLoad.Clients.SubresourceFilter.DocumentTiming."
|
| "NavigationToLoadEventFired";
|
|
|
| +const char kHistogramSubresourceFilterParseDuration[] =
|
| + "PageLoad.Clients.SubresourceFilter.ParseTiming.ParseDuration";
|
| +const char kHistogramSubresourceFilterParseBlockedOnScriptLoad[] =
|
| + "PageLoad.Clients.SubresourceFilter.ParseTiming.ParseBlockedOnScriptLoad";
|
| +const char kHistogramSubresourceFilterParseBlockedOnScriptLoadDocumentWrite[] =
|
| + "PageLoad.Clients.SubresourceFilter.ParseTiming."
|
| + "ParseBlockedOnScriptLoadFromDocumentWrite";
|
| +const char kHistogramSubresourceFilterParseBlockedOnScriptExecution[] =
|
| + "PageLoad.Clients.SubresourceFilter.ParseTiming."
|
| + "ParseBlockedOnScriptExecution";
|
| +const char
|
| + kHistogramSubresourceFilterParseBlockedOnScriptExecutionDocumentWrite[] =
|
| + "PageLoad.Clients.SubresourceFilter.ParseTiming."
|
| + "ParseBlockedOnScriptExecutionFromDocumentWrite";
|
| +
|
| const char kHistogramSubresourceFilterTotalResources[] =
|
| "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total";
|
| const char kHistogramSubresourceFilterNetworkResources[] =
|
| @@ -50,6 +65,45 @@ const char kHistogramSubresourceFilterNetworkBytes[] =
|
| const char kHistogramSubresourceFilterCacheBytes[] =
|
| "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache";
|
|
|
| +const char kHistogramSubresourceFilterMediaTotalResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total."
|
| + "MediaPlayed";
|
| +const char kHistogramSubresourceFilterMediaNetworkResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources."
|
| + "Network.MediaPlayed";
|
| +const char kHistogramSubresourceFilterMediaCacheResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache."
|
| + "MediaPlayed";
|
| +const char kHistogramSubresourceFilterMediaTotalBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total.MediaPlayed";
|
| +const char kHistogramSubresourceFilterMediaNetworkBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network.MediaPlayed";
|
| +const char kHistogramSubresourceFilterMediaCacheBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache.MediaPlayed";
|
| +
|
| +const char kHistogramSubresourceFilterNoMediaTotalResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Total."
|
| + "NoMediaPlayed";
|
| +const char kHistogramSubresourceFilterNoMediaNetworkResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources."
|
| + "Network.NoMediaPlayed";
|
| +const char kHistogramSubresourceFilterNoMediaCacheResources[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.CompletedResources.Cache."
|
| + "NoMediaPlayed";
|
| +const char kHistogramSubresourceFilterNoMediaTotalBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Total.NoMediaPlayed";
|
| +const char kHistogramSubresourceFilterNoMediaNetworkBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Network."
|
| + "NoMediaPlayed";
|
| +const char kHistogramSubresourceFilterNoMediaCacheBytes[] =
|
| + "PageLoad.Clients.SubresourceFilter.Experimental.Bytes.Cache.NoMediaPlayed";
|
| +
|
| +const char kHistogramSubresourceFilterForegroundDuration[] =
|
| + "PageLoad.Clients.SubresourceFilter.PageTiming.ForegroundDuration";
|
| +const char kHistogramSubresourceFilterForegroundDurationAfterPaint[] =
|
| + "PageLoad.Clients.SubresourceFilter.PageTiming.ForegroundDuration."
|
| + "AfterPaint";
|
| +
|
| const char kHistogramSubresourceFilterCount[] =
|
| "PageLoad.Clients.SubresourceFilter.Count";
|
|
|
| @@ -90,7 +144,7 @@ SubresourceFilterMetricsObserver::FlushMetricsOnAppEnterBackground(
|
| // 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)
|
| - OnGoingAway(timing, info);
|
| + OnGoingAway(timing, info, base::TimeTicks::Now());
|
| return STOP_OBSERVING;
|
| }
|
|
|
| @@ -110,7 +164,7 @@ SubresourceFilterMetricsObserver::OnCommit(
|
| void SubresourceFilterMetricsObserver::OnComplete(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| - OnGoingAway(timing, info);
|
| + OnGoingAway(timing, info, base::TimeTicks());
|
| }
|
|
|
| void SubresourceFilterMetricsObserver::OnLoadedResource(
|
| @@ -124,6 +178,36 @@ void SubresourceFilterMetricsObserver::OnLoadedResource(
|
| }
|
| }
|
|
|
| +void SubresourceFilterMetricsObserver::OnParseStop(
|
| + const page_load_metrics::PageLoadTiming& timing,
|
| + const page_load_metrics::PageLoadExtraInfo& info) {
|
| + if (!subresource_filter_observed_)
|
| + return;
|
| +
|
| + if (!WasStartedInForegroundOptionalEventInForeground(timing.parse_stop, info))
|
| + return;
|
| +
|
| + base::TimeDelta parse_duration =
|
| + timing.parse_stop.value() - timing.parse_start.value();
|
| + PAGE_LOAD_HISTOGRAM(internal::kHistogramSubresourceFilterParseDuration,
|
| + parse_duration);
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterParseBlockedOnScriptLoad,
|
| + timing.parse_blocked_on_script_load_duration.value());
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kHistogramSubresourceFilterParseBlockedOnScriptLoadDocumentWrite,
|
| + timing.parse_blocked_on_script_load_from_document_write_duration.value());
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution,
|
| + timing.parse_blocked_on_script_execution_duration.value());
|
| + PAGE_LOAD_HISTOGRAM(
|
| + internal::
|
| + kHistogramSubresourceFilterParseBlockedOnScriptExecutionDocumentWrite,
|
| + timing.parse_blocked_on_script_execution_from_document_write_duration
|
| + .value());
|
| +}
|
| +
|
| void SubresourceFilterMetricsObserver::OnFirstContentfulPaint(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| const page_load_metrics::PageLoadExtraInfo& info) {
|
| @@ -199,9 +283,16 @@ void SubresourceFilterMetricsObserver::OnLoadingBehaviorObserved(
|
| }
|
| }
|
|
|
| +void SubresourceFilterMetricsObserver::MediaStartedPlaying(
|
| + const content::WebContentsObserver::MediaPlayerInfo& video_type,
|
| + bool is_in_main_frame) {
|
| + played_media_ = true;
|
| +}
|
| +
|
| void SubresourceFilterMetricsObserver::OnGoingAway(
|
| const page_load_metrics::PageLoadTiming& timing,
|
| - const page_load_metrics::PageLoadExtraInfo& info) {
|
| + const page_load_metrics::PageLoadExtraInfo& info,
|
| + base::TimeTicks app_background_time) {
|
| if (!subresource_filter_observed_)
|
| return;
|
|
|
| @@ -221,4 +312,54 @@ void SubresourceFilterMetricsObserver::OnGoingAway(
|
| cache_bytes_);
|
| PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterTotalBytes,
|
| cache_bytes_ + network_bytes_);
|
| +
|
| + if (played_media_) {
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterMediaNetworkResources,
|
| + num_network_resources_);
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterMediaCacheResources,
|
| + num_cache_resources_);
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterMediaTotalResources,
|
| + num_cache_resources_ + num_network_resources_);
|
| +
|
| + PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterMediaNetworkBytes,
|
| + network_bytes_);
|
| + PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterMediaCacheBytes,
|
| + cache_bytes_);
|
| + PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterMediaTotalBytes,
|
| + cache_bytes_ + network_bytes_);
|
| + } else {
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterNoMediaNetworkResources,
|
| + num_network_resources_);
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterNoMediaCacheResources,
|
| + num_cache_resources_);
|
| + PAGE_RESOURCE_COUNT_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterNoMediaTotalResources,
|
| + num_cache_resources_ + num_network_resources_);
|
| +
|
| + PAGE_BYTES_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterNoMediaNetworkBytes,
|
| + network_bytes_);
|
| + PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterNoMediaCacheBytes,
|
| + cache_bytes_);
|
| + PAGE_BYTES_HISTOGRAM(internal::kHistogramSubresourceFilterNoMediaTotalBytes,
|
| + cache_bytes_ + network_bytes_);
|
| + }
|
| +
|
| + base::Optional<base::TimeDelta> foreground_duration =
|
| + GetInitialForegroundDuration(info, app_background_time);
|
| + if (foreground_duration) {
|
| + PAGE_LOAD_LONG_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterForegroundDuration,
|
| + foreground_duration.value());
|
| + if (timing.first_paint && timing.first_paint < foreground_duration) {
|
| + PAGE_LOAD_LONG_HISTOGRAM(
|
| + internal::kHistogramSubresourceFilterForegroundDurationAfterPaint,
|
| + foreground_duration.value() - timing.first_paint.value());
|
| + }
|
| + }
|
| }
|
|
|