Index: components/page_load_metrics/browser/metrics_web_contents_observer.cc |
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc |
index 617d7d6d211ed1b8283e168b81edebda28cde8f5..c327616987df06d40d6c02b3d929abd1dab44185 100644 |
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc |
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc |
@@ -5,6 +5,7 @@ |
#include "components/page_load_metrics/browser/metrics_web_contents_observer.h" |
#include <algorithm> |
+#include <ostream> |
#include <string> |
#include <utility> |
@@ -53,6 +54,16 @@ const char kClientRedirectDelayAfterPaint[] = |
namespace { |
+// Helper to allow use of Optional<> values in LOG() messages. |
+std::ostream& operator<<(std::ostream& os, |
+ const base::Optional<base::TimeDelta>& opt) { |
+ if (opt) |
+ os << opt.value(); |
+ else |
+ os << "(unset)"; |
+ return os; |
+} |
+ |
// The url we see from the renderer side is not always the same as what |
// we see from the browser side (e.g. chrome://newtab). We want to be |
// sure here that we aren't logging UMA for internal pages. |
@@ -70,11 +81,12 @@ bool IsRelevantNavigation(content::NavigationHandle* navigation_handle, |
// If second is non-zero, first must also be non-zero and less than or equal to |
// second. |
-bool EventsInOrder(base::TimeDelta first, base::TimeDelta second) { |
- if (second.is_zero()) { |
+bool EventsInOrder(const base::Optional<base::TimeDelta>& first, |
+ const base::Optional<base::TimeDelta>& second) { |
+ if (!second) { |
return true; |
} |
- return !first.is_zero() && first <= second; |
+ return first && first <= second; |
} |
bool IsValidPageLoadTiming(const PageLoadTiming& timing) { |
@@ -111,9 +123,9 @@ bool IsValidPageLoadTiming(const PageLoadTiming& timing) { |
return false; |
} |
- if (!timing.parse_stop.is_zero()) { |
+ if (timing.parse_stop) { |
const base::TimeDelta parse_duration = |
- timing.parse_stop - timing.parse_start; |
+ timing.parse_stop.value() - timing.parse_start.value(); |
if (timing.parse_blocked_on_script_load_duration > parse_duration) { |
NOTREACHED() << "Invalid parse_blocked_on_script_load_duration " |
<< timing.parse_blocked_on_script_load_duration |
@@ -212,28 +224,24 @@ void DispatchObserverTimingCallbacks(PageLoadMetricsObserver* observer, |
const PageLoadMetadata& last_metadata, |
const PageLoadExtraInfo& extra_info) { |
observer->OnTimingUpdate(new_timing, extra_info); |
- if (!new_timing.dom_content_loaded_event_start.is_zero() && |
- last_timing.dom_content_loaded_event_start.is_zero()) |
+ if (new_timing.dom_content_loaded_event_start && |
+ !last_timing.dom_content_loaded_event_start) |
observer->OnDomContentLoadedEventStart(new_timing, extra_info); |
- if (!new_timing.load_event_start.is_zero() && |
- last_timing.load_event_start.is_zero()) |
+ if (new_timing.load_event_start && !last_timing.load_event_start) |
observer->OnLoadEventStart(new_timing, extra_info); |
- if (!new_timing.first_layout.is_zero() && last_timing.first_layout.is_zero()) |
+ if (new_timing.first_layout && !last_timing.first_layout) |
observer->OnFirstLayout(new_timing, extra_info); |
- if (!new_timing.first_paint.is_zero() && last_timing.first_paint.is_zero()) |
+ if (new_timing.first_paint && !last_timing.first_paint) |
observer->OnFirstPaint(new_timing, extra_info); |
- if (!new_timing.first_text_paint.is_zero() && |
- last_timing.first_text_paint.is_zero()) |
+ if (new_timing.first_text_paint && !last_timing.first_text_paint) |
observer->OnFirstTextPaint(new_timing, extra_info); |
- if (!new_timing.first_image_paint.is_zero() && |
- last_timing.first_image_paint.is_zero()) |
+ if (new_timing.first_image_paint && !last_timing.first_image_paint) |
observer->OnFirstImagePaint(new_timing, extra_info); |
- if (!new_timing.first_contentful_paint.is_zero() && |
- last_timing.first_contentful_paint.is_zero()) |
+ if (new_timing.first_contentful_paint && !last_timing.first_contentful_paint) |
observer->OnFirstContentfulPaint(new_timing, extra_info); |
- if (!new_timing.parse_start.is_zero() && last_timing.parse_start.is_zero()) |
+ if (new_timing.parse_start && !last_timing.parse_start) |
observer->OnParseStart(new_timing, extra_info); |
- if (!new_timing.parse_stop.is_zero() && last_timing.parse_stop.is_zero()) |
+ if (new_timing.parse_stop && !last_timing.parse_stop) |
observer->OnParseStop(new_timing, extra_info); |
if (extra_info.metadata.behavior_flags != last_metadata.behavior_flags) |
observer->OnLoadingBehaviorObserved(extra_info); |
@@ -390,8 +398,9 @@ void PageLoadTracker::OnInputEvent(const blink::WebInputEvent& event) { |
void PageLoadTracker::NotifyClientRedirectTo( |
const PageLoadTracker& destination) { |
base::TimeDelta redirect_delay_after_paint; |
- if (!timing_.first_paint.is_zero()) { |
- base::TimeTicks first_paint_time = navigation_start() + timing_.first_paint; |
+ if (timing_.first_paint) { |
+ base::TimeTicks first_paint_time = |
+ navigation_start() + timing_.first_paint.value(); |
if (destination.navigation_start() > first_paint_time) |
redirect_delay_after_paint = |
destination.navigation_start() - first_paint_time; |