| Index: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| index 059653cbaf9ebc27469efbaf6d40328aa3d5bb12..125253091dd7c215b9a50f5ce4448c6268b7b0ba 100644
|
| --- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| +++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
|
| @@ -72,14 +72,14 @@ void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
|
| // non-null, we will send metrics for the current page at some later time, as
|
| // those metrics become available.
|
| if (ShouldSendMetrics()) {
|
| - PageLoadTiming timing;
|
| + mojo::StructPtr<mojom::PageLoadTiming> timing(CreatePageLoadTiming());
|
| if (IsMainFrame()) {
|
| // Only populate PageLoadTiming for the main frame.
|
| timing = GetTiming();
|
| - DCHECK(!timing.navigation_start.is_null());
|
| + DCHECK(!timing->navigation_start.is_null());
|
| }
|
| - page_timing_metrics_sender_.reset(
|
| - new PageTimingMetricsSender(this, routing_id(), CreateTimer(), timing));
|
| + page_timing_metrics_sender_.reset(new PageTimingMetricsSender(
|
| + this, routing_id(), CreateTimer(), std::move(timing)));
|
| }
|
| }
|
|
|
| @@ -88,8 +88,7 @@ void MetricsRenderFrameObserver::SendMetrics() {
|
| return;
|
| if (HasNoRenderFrame())
|
| return;
|
| - PageLoadTiming timing(GetTiming());
|
| - page_timing_metrics_sender_->Send(timing);
|
| + page_timing_metrics_sender_->Send(GetTiming());
|
| }
|
|
|
| bool MetricsRenderFrameObserver::ShouldSendMetrics() const {
|
| @@ -100,72 +99,73 @@ bool MetricsRenderFrameObserver::ShouldSendMetrics() const {
|
| return RendererPageTrackDecider(&document, frame->DataSource()).ShouldTrack();
|
| }
|
|
|
| -PageLoadTiming MetricsRenderFrameObserver::GetTiming() const {
|
| +mojo::StructPtr<PageLoadTiming> MetricsRenderFrameObserver::GetTiming() const {
|
| const blink::WebPerformance& perf =
|
| render_frame()->GetWebFrame()->Performance();
|
|
|
| - PageLoadTiming timing;
|
| + mojo::StructPtr<mojom::PageLoadTiming> timing(CreatePageLoadTiming());
|
| double start = perf.NavigationStart();
|
| - timing.navigation_start = base::Time::FromDoubleT(start);
|
| + timing->navigation_start = base::Time::FromDoubleT(start);
|
| if (perf.ResponseStart() > 0.0)
|
| - timing.response_start = ClampDelta(perf.ResponseStart(), start);
|
| + timing->response_start = ClampDelta(perf.ResponseStart(), start);
|
| if (perf.DomContentLoadedEventStart() > 0.0) {
|
| - timing.document_timing.dom_content_loaded_event_start =
|
| + timing->document_timing->dom_content_loaded_event_start =
|
| ClampDelta(perf.DomContentLoadedEventStart(), start);
|
| }
|
| if (perf.LoadEventStart() > 0.0) {
|
| - timing.document_timing.load_event_start =
|
| + timing->document_timing->load_event_start =
|
| ClampDelta(perf.LoadEventStart(), start);
|
| }
|
| if (perf.FirstLayout() > 0.0)
|
| - timing.document_timing.first_layout = ClampDelta(perf.FirstLayout(), start);
|
| + timing->document_timing->first_layout =
|
| + ClampDelta(perf.FirstLayout(), start);
|
| if (perf.FirstPaint() > 0.0)
|
| - timing.paint_timing.first_paint = ClampDelta(perf.FirstPaint(), start);
|
| + timing->paint_timing->first_paint = ClampDelta(perf.FirstPaint(), start);
|
| if (perf.FirstTextPaint() > 0.0) {
|
| - timing.paint_timing.first_text_paint =
|
| + timing->paint_timing->first_text_paint =
|
| ClampDelta(perf.FirstTextPaint(), start);
|
| }
|
| if (perf.FirstImagePaint() > 0.0) {
|
| - timing.paint_timing.first_image_paint =
|
| + timing->paint_timing->first_image_paint =
|
| ClampDelta(perf.FirstImagePaint(), start);
|
| }
|
| if (perf.FirstContentfulPaint() > 0.0) {
|
| - timing.paint_timing.first_contentful_paint =
|
| + timing->paint_timing->first_contentful_paint =
|
| ClampDelta(perf.FirstContentfulPaint(), start);
|
| }
|
| if (perf.FirstMeaningfulPaint() > 0.0) {
|
| - timing.paint_timing.first_meaningful_paint =
|
| + timing->paint_timing->first_meaningful_paint =
|
| ClampDelta(perf.FirstMeaningfulPaint(), start);
|
| }
|
| if (perf.ParseStart() > 0.0)
|
| - timing.parse_timing.parse_start = ClampDelta(perf.ParseStart(), start);
|
| + timing->parse_timing->parse_start = ClampDelta(perf.ParseStart(), start);
|
| if (perf.ParseStop() > 0.0)
|
| - timing.parse_timing.parse_stop = ClampDelta(perf.ParseStop(), start);
|
| - if (timing.parse_timing.parse_start) {
|
| + timing->parse_timing->parse_stop = ClampDelta(perf.ParseStop(), start);
|
| + if (timing->parse_timing->parse_start) {
|
| // If we started parsing, record all parser durations such as the amount of
|
| // time blocked on script load, even if those values are zero.
|
| - timing.parse_timing.parse_blocked_on_script_load_duration =
|
| + timing->parse_timing->parse_blocked_on_script_load_duration =
|
| base::TimeDelta::FromSecondsD(perf.ParseBlockedOnScriptLoadDuration());
|
| - timing.parse_timing
|
| - .parse_blocked_on_script_load_from_document_write_duration =
|
| + timing->parse_timing
|
| + ->parse_blocked_on_script_load_from_document_write_duration =
|
| base::TimeDelta::FromSecondsD(
|
| perf.ParseBlockedOnScriptLoadFromDocumentWriteDuration());
|
| - timing.parse_timing.parse_blocked_on_script_execution_duration =
|
| + timing->parse_timing->parse_blocked_on_script_execution_duration =
|
| base::TimeDelta::FromSecondsD(
|
| perf.ParseBlockedOnScriptExecutionDuration());
|
| - timing.parse_timing
|
| - .parse_blocked_on_script_execution_from_document_write_duration =
|
| + timing->parse_timing
|
| + ->parse_blocked_on_script_execution_from_document_write_duration =
|
| base::TimeDelta::FromSecondsD(
|
| perf.ParseBlockedOnScriptExecutionFromDocumentWriteDuration());
|
| }
|
|
|
| if (perf.AuthorStyleSheetParseDurationBeforeFCP() > 0.0) {
|
| - timing.style_sheet_timing.author_style_sheet_parse_duration_before_fcp =
|
| + timing->style_sheet_timing->author_style_sheet_parse_duration_before_fcp =
|
| base::TimeDelta::FromSecondsD(
|
| perf.AuthorStyleSheetParseDurationBeforeFCP());
|
| }
|
| if (perf.UpdateStyleDurationBeforeFCP() > 0.0) {
|
| - timing.style_sheet_timing.update_style_duration_before_fcp =
|
| + timing->style_sheet_timing->update_style_duration_before_fcp =
|
| base::TimeDelta::FromSecondsD(perf.UpdateStyleDurationBeforeFCP());
|
| }
|
| return timing;
|
|
|