| 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..8282a5e9ec6979a40d7d3678686282ad58b85d8a
 | 
| --- /dev/null
 | 
| +++ b/components/page_load_metrics/common/page_load_timing.cc
 | 
| @@ -0,0 +1,48 @@
 | 
| +// 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 {
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +base::TimeDelta ClampDelta(double event_ms, double start_ms) {
 | 
| +  double delta = event_ms - start_ms;
 | 
| +  return base::TimeDelta::FromMillisecondsD(delta < 0 ? 0 : delta);
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
| +PageLoadTiming::PageLoadTiming() {}
 | 
| +PageLoadTiming::PageLoadTiming(const blink::WebPerformance& perf) {
 | 
| +  double start = perf.navigationStart();
 | 
| +  navigation_start = base::Time::FromDoubleT(start);
 | 
| +  response_start = ClampDelta(perf.responseStart(), start);
 | 
| +  dom_content_loaded_event_start =
 | 
| +      ClampDelta(perf.domContentLoadedEventStart(), start);
 | 
| +  load_event_start = ClampDelta(perf.loadEventStart(), start);
 | 
| +  first_layout = ClampDelta(perf.firstLayout(), start);
 | 
| +}
 | 
| +
 | 
| +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::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();
 | 
| +}
 | 
| +}  // namespace page_load_metrics
 | 
| 
 |