blob: 77e17495bbaff5594629a23b3b9150a80e74a377 [file] [log] [blame]
// Copyright 2020 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/paint_preview/browser/warm_compositor.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/memory/singleton.h"
#include "components/paint_preview/browser/compositor_utils.h"
namespace paint_preview {
WarmCompositor::WarmCompositor()
: compositor_service_(nullptr, base::OnTaskRunnerDeleter(nullptr)) {}
WarmCompositor::~WarmCompositor() = default;
// static
WarmCompositor* WarmCompositor::GetInstance() {
return base::Singleton<WarmCompositor,
base::LeakySingletonTraits<WarmCompositor>>::get();
}
void WarmCompositor::WarmupCompositor() {
if (compositor_service_)
return;
compositor_service_ = StartCompositorService(base::BindOnce(
&WarmCompositor::OnDisconnect, weak_ptr_factory_.GetWeakPtr()));
}
bool WarmCompositor::StopCompositor() {
if (!compositor_service_)
return false;
compositor_service_.reset();
return true;
}
std::unique_ptr<PaintPreviewCompositorService, base::OnTaskRunnerDeleter>
WarmCompositor::GetOrStartCompositorService(
base::OnceClosure disconnect_handler) {
if (!compositor_service_)
return StartCompositorService(std::move(disconnect_handler));
compositor_service_->SetDisconnectHandler(std::move(disconnect_handler));
return std::move(compositor_service_);
}
void WarmCompositor::OnDisconnect() {
compositor_service_.reset();
}
} // namespace paint_preview