11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <limits> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/test/test_now_source.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace cc { 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TestNowSource::Constructors 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<TestNowSource> TestNowSource::Create() { 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_refptr(new TestNowSource()); 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<TestNowSource> TestNowSource::Create(base::TimeTicks initial) { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_refptr(new TestNowSource(initial)); 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<TestNowSource> TestNowSource::Create(int64_t initial) { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return make_scoped_refptr(new TestNowSource(initial)); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTestNowSource::TestNowSource() 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : initial_(base::TimeTicks::FromInternalValue(10000)), now_() { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Reset(); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTestNowSource::TestNowSource(base::TimeTicks initial) 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : initial_(initial), now_() { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Reset(); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTestNowSource::TestNowSource(int64_t initial) 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : initial_(base::TimeTicks::FromInternalValue(initial)), now_() { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Reset(); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTestNowSource::~TestNowSource() { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TestNowSource actual functionality 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::Reset() { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_INSTANT2("cc", 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "TestNowSource::Reset", 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_SCOPE_THREAD, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "previous", 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "initial", 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci initial_); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_ = initial_; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::TimeTicks TestNowSource::Now() const { 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return now_; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::SetNow(base::TimeTicks time) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_INSTANT2("cc", 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "TestNowSource::SetNow", 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_SCOPE_THREAD, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "previous", 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "new", 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(time >= now_); // Time should always go forward. 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_ = time; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::AdvanceNow(base::TimeDelta period) { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_INSTANT2("cc", 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "TestNowSource::AdvanceNow", 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TRACE_EVENT_SCOPE_THREAD, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "previous", 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "by", 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci period.ToInternalValue()); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(now_ != kAbsoluteMaxNow); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(period >= base::TimeDelta()); // Time should always go forward. 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci now_ += period; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst base::TimeTicks TestNowSource::kAbsoluteMaxNow = 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeTicks::FromInternalValue(std::numeric_limits<int64_t>::max()); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TestNowSource::Convenience functions 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::AdvanceNowMicroseconds(int64_t period_in_microseconds) { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AdvanceNow(base::TimeDelta::FromMicroseconds(period_in_microseconds)); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::SetNowMicroseconds(int64_t time_in_microseconds) { 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetNow(base::TimeTicks::FromInternalValue(time_in_microseconds)); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TestNowSource::Tracing functions 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid TestNowSource::AsValueInto(base::debug::TracedValue* state) const { 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci state->SetInteger("now_in_microseconds", now_.ToInternalValue()); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_refptr<base::debug::ConvertableToTraceFormat> TestNowSource::AsValue() 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const { 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::debug::TracedValue> state = 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new base::debug::TracedValue(); 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AsValueInto(state.get()); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return state; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TestNowSource::Pretty printing functions 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string TestNowSource::ToString() const { 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string output("TestNowSource("); 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AsValue()->AppendAsTraceFormat(&output); 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci output += ")"; 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return output; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci::std::ostream& operator<<(::std::ostream& os, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<TestNowSource>& src) { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci os << src->ToString(); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return os; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PrintTo(const scoped_refptr<TestNowSource>& src, ::std::ostream* os) { 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *os << src; 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace cc 126