blob: c5fc9d107e87f1472f1c98ba6a60d8448bb64f35 [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.
#ifndef COMPONENTS_PAINT_PREVIEW_BROWSER_WARM_COMPOSITOR_H_
#define COMPONENTS_PAINT_PREVIEW_BROWSER_WARM_COMPOSITOR_H_
#include <memory>
#include "base/task/task_runner.h"
#include "components/paint_preview/public/paint_preview_compositor_service.h"
namespace base {
template <typename T>
struct DefaultSingletonTraits;
}
namespace paint_preview {
// A class that can hold a pre-warmed compositor service for use.
class WarmCompositor {
public:
~WarmCompositor();
WarmCompositor(const WarmCompositor&) = delete;
WarmCompositor& operator=(const WarmCompositor&) = delete;
static WarmCompositor* GetInstance();
// Warms up the compositor service.
void WarmupCompositor();
// Releases the warmed compositor service if there is one. Returns true if a
// compositor was released.
bool StopCompositor();
// Passes the pre-warmed compositor to the caller if one is present.
// Otherwise starts a new compositor.
std::unique_ptr<PaintPreviewCompositorService, base::OnTaskRunnerDeleter>
GetOrStartCompositorService(base::OnceClosure disconnect_handler);
private:
WarmCompositor();
friend struct base::DefaultSingletonTraits<WarmCompositor>;
void OnDisconnect();
std::unique_ptr<PaintPreviewCompositorService, base::OnTaskRunnerDeleter>
compositor_service_;
base::WeakPtrFactory<WarmCompositor> weak_ptr_factory_{this};
};
} // namespace paint_preview
#endif // COMPONENTS_PAINT_PREVIEW_BROWSER_WARM_COMPOSITOR_H_