blob: cd008372af97ed0424f8fda010462d3d4c0f414d [file] [log] [blame]
// Copyright 2020 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 "cc/metrics/events_metrics_manager.h"
#include <memory>
#include <utility>
#include "base/stl_util.h"
namespace cc {
namespace {
class ScopedMonitorImpl : public EventsMetricsManager::ScopedMonitor {
public:
explicit ScopedMonitorImpl(base::Optional<EventMetrics>* active_event)
: active_event_(active_event) {
DCHECK(active_event_);
}
~ScopedMonitorImpl() override { *active_event_ = base::nullopt; }
private:
base::Optional<EventMetrics>* active_event_;
};
} // namespace
EventsMetricsManager::ScopedMonitor::~ScopedMonitor() = default;
EventsMetricsManager::EventsMetricsManager() = default;
EventsMetricsManager::~EventsMetricsManager() = default;
std::unique_ptr<EventsMetricsManager::ScopedMonitor>
EventsMetricsManager::GetScopedMonitor(const EventMetrics& event_metrics) {
DCHECK(!active_event_);
if (!event_metrics.IsWhitelisted())
return nullptr;
active_event_ = event_metrics;
return std::make_unique<ScopedMonitorImpl>(&active_event_);
}
void EventsMetricsManager::SaveActiveEventMetrics() {
if (active_event_) {
saved_events_.push_back(*active_event_);
active_event_ = base::nullopt;
}
}
std::vector<EventMetrics> EventsMetricsManager::TakeSavedEventsMetrics() {
std::vector<EventMetrics> result;
result.swap(saved_events_);
return result;
}
} // namespace cc