Home | History | Annotate | Download | only in sequence_manager
      1 // Copyright 2018 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/task/sequence_manager/lazy_now.h"
      6 
      7 #include "base/time/tick_clock.h"
      8 
      9 namespace base {
     10 namespace sequence_manager {
     11 
     12 LazyNow::LazyNow(TimeTicks now) : tick_clock_(nullptr), now_(now) {}
     13 
     14 LazyNow::LazyNow(const TickClock* tick_clock)
     15     : tick_clock_(tick_clock), now_() {
     16   DCHECK(tick_clock);
     17 }
     18 
     19 LazyNow::LazyNow(LazyNow&& move_from) noexcept
     20     : tick_clock_(move_from.tick_clock_), now_(move_from.now_) {
     21   move_from.tick_clock_ = nullptr;
     22   move_from.now_ = nullopt;
     23 }
     24 
     25 TimeTicks LazyNow::Now() {
     26   // It looks tempting to avoid using Optional and to rely on is_null() instead,
     27   // but in some test environments clock intentionally starts from zero.
     28   if (!now_) {
     29     DCHECK(tick_clock_);  // It can fire only on use after std::move.
     30     now_ = tick_clock_->NowTicks();
     31   }
     32   return *now_;
     33 }
     34 
     35 }  // namespace sequence_manager
     36 }  // namespace base
     37