#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 );
}
void ScopedVisibilityTracker::OnHidden() {
Update(false );
}
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;
}
}