blob: 89f75389a4ce24387e538210330f72b4843ba57c [file]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/performance_manager/graph/tracing_observer.h"
#include "base/task/sequenced_task_runner.h"
namespace performance_manager {
TracingObserverList::TracingObserverList()
: task_runner_(base::SequencedTaskRunner::GetCurrentDefault()) {
notify_closure_ = base::BindRepeating(&TracingObserverList::NotifyObservers,
weak_ptr_factory_.GetWeakPtr());
base::TrackEvent::AddSessionObserver(this);
}
TracingObserverList::~TracingObserverList() {
base::TrackEvent::RemoveSessionObserver(this);
}
void TracingObserverList::AddObserver(TracingObserver* observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
observers_.AddObserver(observer);
}
void TracingObserverList::RemoveObserver(TracingObserver* observer) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
observers_.RemoveObserver(observer);
}
void TracingObserverList::NotifyObservers() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
observers_.Notify(&TracingObserver::OnTraceSessionStart);
}
void TracingObserverList::OnStart(const perfetto::DataSourceBase::StartArgs&) {
task_runner_->PostTask(FROM_HERE, notify_closure_);
}
} // namespace performance_manager