0

Remove gpu_compositing from ToClosestSkColorType

The are few callsites that can pass gpu_compositing = false, they are
renambed to ToClosestSkColorTypeDeprecated, so we can work on
eliminating them.

Hardcoding to N32 was needed only for SharedBitmaps.

Bug: 383575394
Change-Id: Idf22d09ece603b54ae2c8a485f21f1390267a354
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6089238
Reviewed-by: Colin Blundell <blundell@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1405518}
This commit is contained in:
Vasiliy Telezhnikov
2025-01-13 07:49:44 -08:00
committed by Chromium LUCI CQ
parent 00bc426d09
commit 1470c9737d
20 changed files with 55 additions and 55 deletions

@@ -59,7 +59,8 @@ void RasterBufferProvider::PlaybackToMemory(
DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format.ToString(); DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format.ToString();
SkColorType color_type = ToClosestSkColorType(gpu_compositing, format); SkColorType color_type =
ToClosestSkColorTypeDeprecated(gpu_compositing, format);
// Uses kPremul_SkAlphaType since the result is not known to be opaque. // Uses kPremul_SkAlphaType since the result is not known to be opaque.
SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), color_type, SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), color_type,
@@ -104,8 +105,8 @@ void RasterBufferProvider::PlaybackToMemory(
TRACE_EVENT0("cc", TRACE_EVENT0("cc",
"RasterBufferProvider::PlaybackToMemory::ConvertRGBA4444"); "RasterBufferProvider::PlaybackToMemory::ConvertRGBA4444");
SkImageInfo dst_info = SkImageInfo dst_info = info.makeColorType(
info.makeColorType(ToClosestSkColorType(gpu_compositing, format)); ToClosestSkColorTypeDeprecated(gpu_compositing, format));
auto dst_canvas = auto dst_canvas =
SkCanvas::MakeRasterDirect(dst_info, memory, stride, &surface_props); SkCanvas::MakeRasterDirect(dst_info, memory, stride, &surface_props);
DCHECK(dst_canvas); DCHECK(dst_canvas);

@@ -2159,7 +2159,7 @@ TEST_F(PixelInspectTileManagerTest, LowResHasNoImage) {
EXPECT_TRUE(tile->draw_info().IsReadyToDraw()); EXPECT_TRUE(tile->draw_info().IsReadyToDraw());
gfx::Size resource_size = tile->draw_info().resource_size(); gfx::Size resource_size = tile->draw_info().resource_size();
SkColorType ct = ToClosestSkColorType( SkColorType ct = ToClosestSkColorTypeDeprecated(
TestSoftwareRasterBufferProvider::kIsGpuCompositing, TestSoftwareRasterBufferProvider::kIsGpuCompositing,
TestSoftwareRasterBufferProvider::kSharedImageFormat); TestSoftwareRasterBufferProvider::kSharedImageFormat);
auto info = SkImageInfo::Make(resource_size.width(), resource_size.height(), auto info = SkImageInfo::Make(resource_size.width(), resource_size.height(),

@@ -248,8 +248,7 @@ class LayerTreeHostImpl::ImageDecodeCacheHolder {
size_t decoded_image_working_set_budget_bytes, size_t decoded_image_working_set_budget_bytes,
RasterDarkModeFilter* dark_mode_filter) { RasterDarkModeFilter* dark_mode_filter) {
if (raster_caps.use_gpu_rasterization) { if (raster_caps.use_gpu_rasterization) {
auto color_type = viz::ToClosestSkColorType( auto color_type = viz::ToClosestSkColorType(raster_caps.tile_format);
/*gpu_compositing=*/true, raster_caps.tile_format);
if (enable_shared_image_cache_for_gpu) { if (enable_shared_image_cache_for_gpu) {
image_decode_cache_ptr_ = image_decode_cache_ptr_ =
&worker_context_provider_wrapper->GetGpuImageDecodeCache( &worker_context_provider_wrapper->GetGpuImageDecodeCache(
@@ -263,7 +262,8 @@ class LayerTreeHostImpl::ImageDecodeCacheHolder {
} }
} else { } else {
image_decode_cache_ = std::make_unique<SoftwareImageDecodeCache>( image_decode_cache_ = std::make_unique<SoftwareImageDecodeCache>(
viz::ToClosestSkColorType(gpu_compositing, raster_caps.tile_format), viz::ToClosestSkColorTypeDeprecated(gpu_compositing,
raster_caps.tile_format),
decoded_image_working_set_budget_bytes); decoded_image_working_set_budget_bytes);
} }

@@ -15,8 +15,8 @@
namespace viz { namespace viz {
SkColorType ToClosestSkColorType(bool gpu_compositing, SkColorType ToClosestSkColorTypeDeprecated(bool gpu_compositing,
SharedImageFormat format) { SharedImageFormat format) {
CHECK(format.is_single_plane()); CHECK(format.is_single_plane());
if (!gpu_compositing) { if (!gpu_compositing) {
@@ -28,6 +28,12 @@ SkColorType ToClosestSkColorType(bool gpu_compositing,
return kN32_SkColorType; return kN32_SkColorType;
} }
return ToClosestSkColorType(format);
}
SkColorType ToClosestSkColorType(SharedImageFormat format) {
CHECK(format.is_single_plane());
if (format == SinglePlaneFormat::kRGBA_4444) { if (format == SinglePlaneFormat::kRGBA_4444) {
return kARGB_4444_SkColorType; return kARGB_4444_SkColorType;
} else if (format == SinglePlaneFormat::kRGBA_8888) { } else if (format == SinglePlaneFormat::kRGBA_8888) {
@@ -72,7 +78,7 @@ SkColorType ToClosestSkColorType(bool gpu_compositing,
SkColorType ToClosestSkColorType(SharedImageFormat format, int plane_index) { SkColorType ToClosestSkColorType(SharedImageFormat format, int plane_index) {
CHECK(format.IsValidPlaneIndex(plane_index)); CHECK(format.IsValidPlaneIndex(plane_index));
if (format.is_single_plane()) { if (format.is_single_plane()) {
return ToClosestSkColorType(/*gpu_compositing=*/true, format); return ToClosestSkColorType(format);
} }
// No external sampling, format is per plane. // No external sampling, format is per plane.

@@ -42,8 +42,14 @@ class TestInProcessContextProvider;
// is always RGBA and there is no difference between RGBA/BGRA. Also, these // is always RGBA and there is no difference between RGBA/BGRA. Also, these
// formats should not be used for software SkImages/SkSurfaces. // formats should not be used for software SkImages/SkSurfaces.
COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT) COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT)
SkColorType ToClosestSkColorType(bool gpu_compositing, SkColorType ToClosestSkColorType(SharedImageFormat format);
SharedImageFormat format);
// Legacy version of the above, allowing to set `gpu_compositing` to false,
// which essentially hardcodes N32. This is due to how legacy SharedBitmap
// worked.
COMPONENT_EXPORT(VIZ_SHARED_IMAGE_FORMAT)
SkColorType ToClosestSkColorTypeDeprecated(bool gpu_compositing,
SharedImageFormat format);
// Returns the closest SkColorType for a given `format` that does not prefer // Returns the closest SkColorType for a given `format` that does not prefer
// external sampler and `plane_index`. For single planar formats (eg. RGBA) the // external sampler and `plane_index`. For single planar formats (eg. RGBA) the

@@ -134,7 +134,7 @@ TEST_F(SharedImageFormatUtilsTest, ToClosestSkColorTypeSoftwareRGBX) {
SharedImageFormat format = SinglePlaneFormat::kRGBX_8888; SharedImageFormat format = SinglePlaneFormat::kRGBX_8888;
ASSERT_EQ(format.NumberOfPlanes(), 1); ASSERT_EQ(format.NumberOfPlanes(), 1);
EXPECT_EQ(kN32_SkColorType, EXPECT_EQ(kN32_SkColorType,
ToClosestSkColorType(/*gpu_compositing=*/false, format)); ToClosestSkColorTypeDeprecated(/*gpu_compositing=*/false, format));
} }
} // namespace } // namespace

@@ -4679,7 +4679,8 @@ TEST_P(RendererPixelTest, TileDrawQuadNearestNeighbor) {
constexpr SharedImageFormat format = SinglePlaneFormat::kRGBA_8888; constexpr SharedImageFormat format = SinglePlaneFormat::kRGBA_8888;
gfx::Rect viewport(this->device_viewport_size_); gfx::Rect viewport(this->device_viewport_size_);
SkColorType ct = ToClosestSkColorType(!is_software_renderer(), format); SkColorType ct =
ToClosestSkColorTypeDeprecated(!is_software_renderer(), format);
SkImageInfo info = SkImageInfo::Make(2, 2, ct, kPremul_SkAlphaType); SkImageInfo info = SkImageInfo::Make(2, 2, ct, kPremul_SkAlphaType);
SkBitmap bitmap; SkBitmap bitmap;
bitmap.allocPixels(info); bitmap.allocPixels(info);

@@ -630,7 +630,7 @@ void SkiaOutputSurfaceImpl::MakePromiseSkImageSinglePlane(
SkColorType color_type = SkColorType color_type =
format.PrefersExternalSampler() format.PrefersExternalSampler()
? gpu::ToClosestSkColorTypeExternalSampler(format) ? gpu::ToClosestSkColorTypeExternalSampler(format)
: ToClosestSkColorType(/*gpu_compositing=*/true, format); : ToClosestSkColorType(format);
if (force_rgbx) { if (force_rgbx) {
if (color_type == SkColorType::kBGRA_8888_SkColorType || if (color_type == SkColorType::kBGRA_8888_SkColorType ||
@@ -848,8 +848,7 @@ SkCanvas* SkiaOutputSurfaceImpl::BeginPaintRenderPass(
CHECK(!current_paint_); CHECK(!current_paint_);
CHECK(resource_sync_tokens_.empty()); CHECK(resource_sync_tokens_.empty());
SkColorType color_type = SkColorType color_type = ToClosestSkColorType(format);
ToClosestSkColorType(/*gpu_compositing=*/true, format);
if (graphite_recorder_) { if (graphite_recorder_) {
SkImageInfo image_info = SkImageInfo image_info =
SkImageInfo::Make(gfx::SizeToSkISize(surface_size), color_type, SkImageInfo::Make(gfx::SizeToSkISize(surface_size), color_type,

@@ -130,8 +130,7 @@ void FakeSkiaOutputSurface::MakePromiseSkImage(
return; return;
} }
auto sk_color_type = auto sk_color_type = ToClosestSkColorType(image_context->format());
ToClosestSkColorType(true /* gpu_compositing */, image_context->format());
image_context->SetImage( image_context->SetImage(
SkImages::BorrowTextureFrom(gr_context(), backend_texture, SkImages::BorrowTextureFrom(gr_context(), backend_texture,
kTopLeft_GrSurfaceOrigin, sk_color_type, kTopLeft_GrSurfaceOrigin, sk_color_type,
@@ -176,8 +175,7 @@ SkCanvas* FakeSkiaOutputSurface::BeginPaintRenderPass(
auto& sk_surface = sk_surfaces_[id]; auto& sk_surface = sk_surfaces_[id];
if (!sk_surface) { if (!sk_surface) {
SkColorType color_type = SkColorType color_type = ToClosestSkColorType(format);
ToClosestSkColorType(true /* gpu_compositing */, format);
SkImageInfo image_info = SkImageInfo::Make( SkImageInfo image_info = SkImageInfo::Make(
surface_size.width(), surface_size.height(), color_type, surface_size.width(), surface_size.height(), color_type,
kPremul_SkAlphaType, std::move(color_space)); kPremul_SkAlphaType, std::move(color_space));

@@ -721,9 +721,9 @@ bool PepperGraphics2DHost::PrepareTransferableResource(
src = swizzled.get(); src = swizzled.get();
} }
SkImageInfo src_info = SkImageInfo::Make( SkImageInfo src_info = SkImageInfo::Make(size.width(), size.height(),
size.width(), size.height(), viz::ToClosestSkColorType(true, format), viz::ToClosestSkColorType(format),
kUnknown_SkAlphaType); kUnknown_SkAlphaType);
ri->WaitSyncTokenCHROMIUM(in_sync_token.GetConstData()); ri->WaitSyncTokenCHROMIUM(in_sync_token.GetConstData());
uint32_t texture_target = shared_image->GetTextureTarget(); uint32_t texture_target = shared_image->GetTextureTarget();

@@ -1986,7 +1986,7 @@ void RasterDecoderImpl::DoWritePixelsINTERNAL(GLint x_offset,
} }
viz::SharedImageFormat dest_format = dest_shared_image->format(); viz::SharedImageFormat dest_format = dest_shared_image->format();
if (SkColorTypeBytesPerPixel(viz::ToClosestSkColorType(true, dest_format)) != if (SkColorTypeBytesPerPixel(viz::ToClosestSkColorType(dest_format)) !=
SkColorTypeBytesPerPixel(static_cast<SkColorType>(src_sk_color_type))) { SkColorTypeBytesPerPixel(static_cast<SkColorType>(src_sk_color_type))) {
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glWritePixels", LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glWritePixels",
"Bytes per pixel for src SkColorType and dst " "Bytes per pixel for src SkColorType and dst "
@@ -2861,8 +2861,7 @@ void RasterDecoderImpl::DoBeginRasterCHROMIUM(GLfloat r,
DCHECK(locked_handles_.empty()); DCHECK(locked_handles_.empty());
DCHECK(!raster_canvas_); DCHECK(!raster_canvas_);
SkColorType sk_color_type = viz::ToClosestSkColorType( SkColorType sk_color_type = viz::ToClosestSkColorType(shared_image->format());
/*gpu_compositing=*/true, shared_image->format());
int final_msaa_count; int final_msaa_count;
uint32_t flags; uint32_t flags;

@@ -309,9 +309,8 @@ TEST_P(AHardwareBufferImageBackingFactoryTest, InitialData) {
SkAlphaType alpha_type = kPremul_SkAlphaType; SkAlphaType alpha_type = kPremul_SkAlphaType;
gpu::SharedImageUsageSet usage = SHARED_IMAGE_USAGE_DISPLAY_READ; gpu::SharedImageUsageSet usage = SHARED_IMAGE_USAGE_DISPLAY_READ;
auto image_info = auto image_info = SkImageInfo::Make(
SkImageInfo::Make(gfx::SizeToSkISize(size), gfx::SizeToSkISize(size), viz::ToClosestSkColorType(format), alpha_type);
viz::ToClosestSkColorType(true, format), alpha_type);
SkBitmap expected_bitmap; SkBitmap expected_bitmap;
expected_bitmap.allocPixels(image_info); expected_bitmap.allocPixels(image_info);

@@ -385,8 +385,7 @@ sk_sp<SkSurface> DCompSurfaceImageBacking::BeginDrawGanesh(
GrGLFramebufferInfo framebuffer_info = {0}; GrGLFramebufferInfo framebuffer_info = {0};
DCHECK_EQ(gl_surface_->GetBackingFramebufferObject(), 0u); DCHECK_EQ(gl_surface_->GetBackingFramebufferObject(), 0u);
SkColorType color_type = viz::ToClosestSkColorType( SkColorType color_type = viz::ToClosestSkColorType(format());
/*gpu_compositing=*/true, format());
switch (color_type) { switch (color_type) {
case kRGBA_8888_SkColorType: case kRGBA_8888_SkColorType:
framebuffer_info.fFormat = GL_RGBA8; framebuffer_info.fFormat = GL_RGBA8;

@@ -190,8 +190,7 @@ bool RawDrawImageBacking::CreateBackendTextureAndFlushPaintOps(bool flush) {
if (context_state_->context_lost()) if (context_state_->context_lost())
return false; return false;
auto sk_color = viz::ToClosestSkColorType( auto sk_color = viz::ToClosestSkColorType(format());
/*gpu_compositing=*/true, format());
const std::string label = const std::string label =
"RawDrawImageBacking" + CreateLabelForSharedImageUsage(usage()); "RawDrawImageBacking" + CreateLabelForSharedImageUsage(usage());
GrDirectContext* direct_context = context_state_->gr_context(); GrDirectContext* direct_context = context_state_->gr_context();

@@ -413,10 +413,9 @@ SkiaGaneshImageRepresentation::ScopedGaneshReadAccess::CreateSkImage(
if (format.is_single_plane() || format.PrefersExternalSampler()) { if (format.is_single_plane() || format.PrefersExternalSampler()) {
DCHECK_EQ(static_cast<int>(promise_image_textures_.size()), 1); DCHECK_EQ(static_cast<int>(promise_image_textures_.size()), 1);
auto alpha_type = representation()->alpha_type(); auto alpha_type = representation()->alpha_type();
auto color_type = auto color_type = format.PrefersExternalSampler()
format.PrefersExternalSampler() ? ToClosestSkColorTypeExternalSampler(format)
? ToClosestSkColorTypeExternalSampler(format) : viz::ToClosestSkColorType(format);
: viz::ToClosestSkColorType(/*gpu_compositing=*/true, format);
return SkImages::BorrowTextureFrom( return SkImages::BorrowTextureFrom(
context_state->gr_context(), promise_image_texture()->backendTexture(), context_state->gr_context(), promise_image_texture()->backendTexture(),
surface_origin, color_type, alpha_type, sk_color_space, surface_origin, color_type, alpha_type, sk_color_space,
@@ -659,10 +658,9 @@ SkiaGraphiteImageRepresentation::ScopedGraphiteReadAccess::CreateSkImage(
if (format.is_single_plane() || format.PrefersExternalSampler()) { if (format.is_single_plane() || format.PrefersExternalSampler()) {
CHECK_EQ(static_cast<int>(graphite_textures_.size()), 1); CHECK_EQ(static_cast<int>(graphite_textures_.size()), 1);
auto alpha_type = representation()->alpha_type(); auto alpha_type = representation()->alpha_type();
auto color_type = auto color_type = format.PrefersExternalSampler()
format.PrefersExternalSampler() ? ToClosestSkColorTypeExternalSampler(format)
? ToClosestSkColorTypeExternalSampler(format) : viz::ToClosestSkColorType(format);
: viz::ToClosestSkColorType(/*gpu_compositing=*/true, format);
auto origin = representation()->surface_origin() == kTopLeft_GrSurfaceOrigin auto origin = representation()->surface_origin() == kTopLeft_GrSurfaceOrigin
? skgpu::Origin::kTopLeft ? skgpu::Origin::kTopLeft
: skgpu::Origin::kBottomLeft; : skgpu::Origin::kBottomLeft;

@@ -85,8 +85,7 @@ SkiaVkAndroidImageRepresentation::BeginWriteAccess(
if (!surface_ || final_msaa_count != surface_msaa_count_ || if (!surface_ || final_msaa_count != surface_msaa_count_ ||
surface_props != surface_->props()) { surface_props != surface_->props()) {
SkColorType sk_color_type = viz::ToClosestSkColorType( SkColorType sk_color_type = viz::ToClosestSkColorType(format());
/*gpu_compositing=*/true, format());
surface_ = SkSurfaces::WrapBackendTexture( surface_ = SkSurfaces::WrapBackendTexture(
gr_context, promise_texture_->backendTexture(), surface_origin(), gr_context, promise_texture_->backendTexture(), surface_origin(),
final_msaa_count, sk_color_type, color_space().ToSkColorSpace(), final_msaa_count, sk_color_type, color_space().ToSkColorSpace(),

@@ -4001,7 +4001,7 @@ GPUTexture* BaseRenderingContext2D::transferToGPUTexture(
} }
wgpu::TextureFormat dawn_format = wgpu::TextureFormat dawn_format =
AsDawnType(viz::ToClosestSkColorType(true, client_si->format())); AsDawnType(viz::ToClosestSkColorType(client_si->format()));
wgpu::TextureDescriptor desc = { wgpu::TextureDescriptor desc = {
.usage = tex_usage, .usage = tex_usage,
.size = {base::checked_cast<uint32_t>(client_si->size().width()), .size = {base::checked_cast<uint32_t>(client_si->size().width()),

@@ -115,8 +115,7 @@ SkColorType GPUCanvasContext::GetSkColorType() const {
if (!swap_buffers_) { if (!swap_buffers_) {
return kN32_SkColorType; return kN32_SkColorType;
} }
return viz::ToClosestSkColorType( return viz::ToClosestSkColorType(swap_buffers_->Format());
/*gpu_compositing=*/true, swap_buffers_->Format());
} }
sk_sp<SkColorSpace> GPUCanvasContext::GetSkColorSpace() const { sk_sp<SkColorSpace> GPUCanvasContext::GetSkColorSpace() const {
@@ -311,8 +310,7 @@ ImageBitmap* GPUCanvasContext::TransferToImageBitmap(
} }
DCHECK(release_callback); DCHECK(release_callback);
auto sk_color_type = viz::ToClosestSkColorType( auto sk_color_type = viz::ToClosestSkColorType(client_si->format());
/*gpu_compositing=*/true, client_si->format());
const SkImageInfo sk_image_info = SkImageInfo::Make( const SkImageInfo sk_image_info = SkImageInfo::Make(
texture_descriptor_.size.width, texture_descriptor_.size.height, texture_descriptor_.size.width, texture_descriptor_.size.height,

@@ -236,10 +236,9 @@ bool CanvasResource::PrepareTransferableResource(
} }
SkImageInfo CanvasResource::CreateSkImageInfo() const { SkImageInfo CanvasResource::CreateSkImageInfo() const {
return SkImageInfo::Make( return SkImageInfo::Make(SkISize::Make(size_.width(), size_.height()),
SkISize::Make(size_.width(), size_.height()), viz::ToClosestSkColorType(format_), alpha_type_,
viz::ToClosestSkColorType(/*gpu_compositing=*/true, format_), alpha_type_, color_space_.ToSkColorSpace());
color_space_.ToSkColorSpace());
} }
// CanvasResourceSharedBitmap // CanvasResourceSharedBitmap

@@ -748,8 +748,7 @@ scoped_refptr<StaticBitmapImage> DrawingBuffer::TransferToStaticBitmapImage() {
DCHECK_EQ(size_.width(), shared_image->size().width()); DCHECK_EQ(size_.width(), shared_image->size().width());
DCHECK_EQ(size_.height(), shared_image->size().height()); DCHECK_EQ(size_.height(), shared_image->size().height());
auto sk_color_type = viz::ToClosestSkColorType( auto sk_color_type = viz::ToClosestSkColorType(shared_image->format());
/*gpu_compositing=*/true, shared_image->format());
const SkImageInfo sk_image_info = SkImageInfo::Make( const SkImageInfo sk_image_info = SkImageInfo::Make(
size_.width(), size_.height(), sk_color_type, kPremul_SkAlphaType); size_.width(), size_.height(), sk_color_type, kPremul_SkAlphaType);