12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2017 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 "ui/base/scoped_visibility_tracker.h"
- #include <utility>
- #include "base/time/tick_clock.h"
- namespace ui {
- ScopedVisibilityTracker::ScopedVisibilityTracker(
- const base::TickClock* tick_clock,
- bool is_shown)
- : tick_clock_(tick_clock) {
- DCHECK(tick_clock_);
- if (is_shown)
- OnShown();
- }
- ScopedVisibilityTracker::~ScopedVisibilityTracker() {}
- void ScopedVisibilityTracker::OnShown() {
- Update(true /* in_foreground */);
- }
- void ScopedVisibilityTracker::OnHidden() {
- Update(false /* in_foreground */);
- }
- base::TimeDelta ScopedVisibilityTracker::GetForegroundDuration() const {
- if (currently_in_foreground_)
- return foreground_duration_ + (tick_clock_->NowTicks() - last_time_shown_);
- return foreground_duration_;
- }
- void ScopedVisibilityTracker::Update(bool in_foreground) {
- base::TimeTicks now = tick_clock_->NowTicks();
- if (currently_in_foreground_)
- foreground_duration_ += now - last_time_shown_;
- if (in_foreground)
- last_time_shown_ = now;
- currently_in_foreground_ = in_foreground;
- }
- } // namespace ui
|