Chromium Code Reviews| Index: components/page_load_metrics/common/page_load_timing.cc |
| diff --git a/components/page_load_metrics/common/page_load_timing.cc b/components/page_load_metrics/common/page_load_timing.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f7b844f4fe012721afffb3dee1fed3a403211e7b |
| --- /dev/null |
| +++ b/components/page_load_metrics/common/page_load_timing.cc |
| @@ -0,0 +1,63 @@ |
| +// Copyright 2015 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 "components/page_load_metrics/common/page_load_timing.h" |
| +#include "third_party/WebKit/public/web/WebPerformance.h" |
| + |
| +namespace page_load_metrics { |
| + |
| +PageLoadTiming::PageLoadTiming() {} |
| +PageLoadTiming::PageLoadTiming(blink::WebPerformance& p) { |
|
Bryan McQuade
2015/09/02 18:26:46
in this case I think a single-character variable n
Charlie Harrison
2015/09/03 14:00:52
Done.
|
| + double start = p.navigationStart(); |
| + navigation_start = base::Time::FromDoubleT(start); |
| + response_start = ClampDelta(p.responseStart(), start); |
| + dom_content_loaded_event_start = |
| + ClampDelta(p.domContentLoadedEventStart(), start); |
| + load_event_start = ClampDelta(p.loadEventStart(), start); |
| + first_layout = ClampDelta(p.firstLayout(), start); |
| +} |
| + |
| +base::TimeDelta PageLoadTiming::ClampDelta(double event_ms, |
|
Bryan McQuade
2015/09/02 18:26:46
clamp delta doesn't need to be a member function -
|
| + double start_ms) const { |
| + double delta = event_ms - start_ms; |
| + return base::TimeDelta::FromMillisecondsD(delta < 0 ? 0 : delta); |
| +} |
| + |
| +PageLoadTiming::~PageLoadTiming() {} |
| + |
| +bool PageLoadTiming::operator==(const PageLoadTiming& other) const { |
| + return navigation_start == other.navigation_start && |
| + response_start == other.response_start && |
| + dom_content_loaded_event_start == |
| + other.dom_content_loaded_event_start && |
| + load_event_start == other.load_event_start && |
| + first_layout == other.first_layout; |
| +} |
| + |
| +bool PageLoadTiming::IsChild(const PageLoadTiming& parent) const { |
|
Bryan McQuade
2015/09/02 18:26:46
I do think these policy methods are slightly imple
|
| + return (parent.navigation_start.is_null() || |
| + navigation_start == parent.navigation_start); |
| +} |
| + |
| +bool PageLoadTiming::IsComplete() const { |
| + return !navigation_start.is_null() && !response_start.is_zero() && |
| + !dom_content_loaded_event_start.is_zero() && |
| + !load_event_start.is_zero() && !first_layout.is_zero(); |
| +} |
| + |
| +bool PageLoadTiming::IsEmpty() const { |
| + return navigation_start.is_null() && response_start.is_zero() && |
| + dom_content_loaded_event_start.is_zero() && |
| + load_event_start.is_zero() && first_layout.is_zero(); |
| +} |
| + |
| +// Order: navigation_start => response_start => |
| +// dom_content_loaded_event_start => load_event_start |
| +bool PageLoadTiming::IsOrdered() const { |
| + return !response_start.is_zero() && |
| + response_start < dom_content_loaded_event_start && |
| + dom_content_loaded_event_start < load_event_start; |
| +} |
| + |
| +} // namespace page_load_metrics |