blob: 4d9d6ce240802d261e3901f64bac562dabd51bee [file] [log] [blame]
// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "cobalt/dom/performance.h"
#include "cobalt/dom/performance_high_resolution_time.h"
#include "cobalt/dom/testing/stub_environment_settings.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cobalt {
namespace dom {
TEST(PerformanceTest, Now) {
scoped_refptr<base::SystemMonotonicClock> clock(
new base::SystemMonotonicClock());
testing::StubEnvironmentSettings environment_settings;
scoped_refptr<Performance> performance(
new Performance(&environment_settings, clock));
// Test that now returns a result that is within a correct range for the
// current time.
DOMHighResTimeStamp lower_limit =
performance->MonotonicTimeToDOMHighResTimeStamp(base::TimeTicks::Now());
DOMHighResTimeStamp current_time_in_milliseconds = performance->Now();
DOMHighResTimeStamp upper_limit =
performance->MonotonicTimeToDOMHighResTimeStamp(base::TimeTicks::Now());
DCHECK_GE(current_time_in_milliseconds, lower_limit);
DCHECK_LE(current_time_in_milliseconds, upper_limit);
}
TEST(PerformanceTest, MonotonicTimeToDOMHighResTimeStamp) {
scoped_refptr<base::SystemMonotonicClock> clock(
new base::SystemMonotonicClock());
testing::StubEnvironmentSettings environment_settings;
scoped_refptr<Performance> performance(
new Performance(&environment_settings, clock));
base::TimeTicks current_time_ticks = base::TimeTicks::Now();
DOMHighResTimeStamp current_time = ClampTimeStampMinimumResolution(
current_time_ticks,
Performance::kPerformanceTimerMinResolutionInMicroseconds);
DOMHighResTimeStamp current_time_respect_to_time_origin =
performance->MonotonicTimeToDOMHighResTimeStamp(current_time_ticks);
DOMHighResTimeStamp time_origin = ClampTimeStampMinimumResolution(
performance->GetTimeOrigin(),
Performance::kPerformanceTimerMinResolutionInMicroseconds);
DCHECK_EQ(current_time_respect_to_time_origin, current_time - time_origin);
}
TEST(PerformanceTest, NavigationStart) {
// navigationStart is supposed to return the time, in milliseconds, since
// January 1st, 1970 (UTC):
// https://w3c.github.io/navigation-timing/#the-performancetiming-interface
// We assume (and test) here though that navigationStart time will be set
// relative to the time that the NavigationTiming object was created, since
// the object will be created at the beginning of a new navigation.
scoped_refptr<base::SystemMonotonicClock> clock(
new base::SystemMonotonicClock());
base::TimeTicks lower_limit = base::TimeTicks::Now();
scoped_refptr<PerformanceTiming> performance_timing(
new PerformanceTiming(clock, base::TimeTicks::Now()));
base::TimeTicks upper_limit = base::TimeTicks::Now();
DCHECK_GE(performance_timing->navigation_start(),
static_cast<uint64>((lower_limit.ToInternalValue())));
DCHECK_LE(performance_timing->navigation_start(),
static_cast<uint64>((upper_limit.ToInternalValue())));
}
} // namespace dom
} // namespace cobalt