blob: f262cf64b0b7df420417af302330b922ce984114 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/compositor/scoped_layer_request.h"
#include "base/check.h"
#include "ui/compositor/layer_textured.h"
namespace ui {
////////////////////////////////////////////////////////////////////////////////
// ScopedLayerRequest<LayerRequestType type>
template <LayerRequestType type>
Layer* ScopedLayerRequest<type>::GetLayer() const {
return const_cast<Layer*>(observation_.GetSource());
}
template <LayerRequestType type>
void ScopedLayerRequest<type>::LayerDestroyed(Layer* layer) {
observation_.Reset();
}
////////////////////////////////////////////////////////////////////////////////
// ScopedPaintLock
template <>
ScopedLayerRequest<LayerRequestType::kPaint>::ScopedLayerRequest(Layer* layer) {
CHECK(layer);
CHECK(layer->AsTextured());
observation_.Observe(layer);
layer->AsTextured()->AddDeferredPaintRequest();
}
template <>
ScopedLayerRequest<LayerRequestType::kPaint>::~ScopedLayerRequest() {
if (Layer* layer = GetLayer()) {
layer->AsTextured()->RemoveDeferredPaintRequest();
}
}
////////////////////////////////////////////////////////////////////////////////
// ScopedCacheRenderSurfaceLock
template <>
ScopedLayerRequest<LayerRequestType::kCacheRenderSurface>::ScopedLayerRequest(
Layer* layer) {
CHECK(layer);
observation_.Observe(layer);
layer->AddCacheRenderSurfaceRequest();
}
template <>
ScopedLayerRequest<
LayerRequestType::kCacheRenderSurface>::~ScopedLayerRequest() {
if (Layer* layer = GetLayer()) {
layer->RemoveCacheRenderSurfaceRequest();
}
}
////////////////////////////////////////////////////////////////////////////////
// ScopedTrilinearFilteringLock
template <>
ScopedLayerRequest<LayerRequestType::kTrilinearFiltering>::ScopedLayerRequest(
Layer* layer) {
CHECK(layer);
observation_.Observe(layer);
layer->AddTrilinearFilteringRequest();
}
template <>
ScopedLayerRequest<
LayerRequestType::kTrilinearFiltering>::~ScopedLayerRequest() {
if (Layer* layer = GetLayer()) {
layer->RemoveTrilinearFilteringRequest();
}
}
template class COMPOSITOR_EXPORT ScopedLayerRequest<LayerRequestType::kPaint>;
template class COMPOSITOR_EXPORT
ScopedLayerRequest<LayerRequestType::kCacheRenderSurface>;
template class COMPOSITOR_EXPORT
ScopedLayerRequest<LayerRequestType::kTrilinearFiltering>;
} // namespace ui