blob: ef78d7bac26e162d0716d29aceecdcfd4be96511 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/resource_coordinator/lifecycle_unit_base.h"
#include "base/observer_list.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit_source_base.h"
#include "chrome/browser/resource_coordinator/time.h"
namespace resource_coordinator {
LifecycleUnitBase::LifecycleUnitBase(LifecycleUnitSourceBase* source)
: source_(source) {
if (source_)
source_->NotifyLifecycleUnitBeingCreated(this);
}
LifecycleUnitBase::~LifecycleUnitBase() {
if (source_)
source_->NotifyLifecycleUnitBeingDestroyed(this);
}
LifecycleUnitSource* LifecycleUnitBase::GetSource() const {
return source_;
}
int32_t LifecycleUnitBase::GetID() const {
return id_;
}
LifecycleUnitState LifecycleUnitBase::GetState() const {
return state_;
}
base::TimeTicks LifecycleUnitBase::GetStateChangeTime() const {
return state_change_time_;
}
size_t LifecycleUnitBase::GetDiscardCount() const {
return discard_count_;
}
void LifecycleUnitBase::AddObserver(LifecycleUnitObserver* observer) {
observers_.AddObserver(observer);
}
void LifecycleUnitBase::RemoveObserver(LifecycleUnitObserver* observer) {
observers_.RemoveObserver(observer);
}
void LifecycleUnitBase::SetDiscardCountForTesting(size_t discard_count) {
discard_count_ = discard_count;
}
void LifecycleUnitBase::SetState(LifecycleUnitState state,
LifecycleUnitStateChangeReason reason) {
if (state == state_)
return;
// Only increment the discard count once the discard has actually completed.
if (state == LifecycleUnitState::DISCARDED)
++discard_count_;
LifecycleUnitState last_state = state_;
state_ = state;
state_change_time_ = NowTicks();
for (auto& observer : observers_)
observer.OnLifecycleUnitStateChanged(this, last_state, reason);
}
void LifecycleUnitBase::OnLifecycleUnitDestroyed() {
for (auto& observer : observers_)
observer.OnLifecycleUnitDestroyed(this);
}
int32_t LifecycleUnitBase::next_id_ = 0;
} // namespace resource_coordinator