Commit ee29a5b8 authored by Adrienne Walker's avatar Adrienne Walker Committed by Commit Bot

Move CanvasColorParams out of public

This reverts this change:
https://chromium-review.googlesource.com/c/chromium/src/+/1323715

And changes the WebGraphicsContext3dProvider implementation to not
depend on Blink internals by using Skia types.

Bug: 902022
Change-Id: I1fbe7a261095f4b30f1365e99005d332d66b7df8
Reviewed-on: https://chromium-review.googlesource.com/c/1323616Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarDaniel Bratell <bratell@opera.com>
Reviewed-by: default avatarFernando Serboncini <fserb@chromium.org>
Commit-Queue: enne <enne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608907}
parent 71f164a9
...@@ -77,12 +77,10 @@ void WebGraphicsContext3DProviderImpl::OnContextLost() { ...@@ -77,12 +77,10 @@ void WebGraphicsContext3DProviderImpl::OnContextLost() {
} }
cc::ImageDecodeCache* WebGraphicsContext3DProviderImpl::ImageDecodeCache( cc::ImageDecodeCache* WebGraphicsContext3DProviderImpl::ImageDecodeCache(
blink::CanvasColorSpace color_space, SkColorType color_type,
blink::CanvasPixelFormat pixel_format) { sk_sp<SkColorSpace> color_space) {
SkColorType color_type = blink::PixelFormatToSkColorType(pixel_format);
DCHECK(GetGrContext()->colorTypeSupportedAsImage(color_type)); DCHECK(GetGrContext()->colorTypeSupportedAsImage(color_type));
auto key = std::make_pair(color_space, pixel_format); auto key = std::make_pair(color_type, color_space->hash());
auto cache_iterator = image_decode_cache_map_.find(key); auto cache_iterator = image_decode_cache_map_.find(key);
if (cache_iterator != image_decode_cache_map_.end()) if (cache_iterator != image_decode_cache_map_.end())
return cache_iterator->second.get(); return cache_iterator->second.get();
...@@ -100,8 +98,7 @@ cc::ImageDecodeCache* WebGraphicsContext3DProviderImpl::ImageDecodeCache( ...@@ -100,8 +98,7 @@ cc::ImageDecodeCache* WebGraphicsContext3DProviderImpl::ImageDecodeCache(
std::make_unique<cc::GpuImageDecodeCache>( std::make_unique<cc::GpuImageDecodeCache>(
provider_.get(), use_transfer_cache, color_type, kMaxWorkingSetBytes, provider_.get(), use_transfer_cache, color_type, kMaxWorkingSetBytes,
provider_->ContextCapabilities().max_texture_size, provider_->ContextCapabilities().max_texture_size,
cc::PaintImage::kDefaultGeneratorClientId, cc::PaintImage::kDefaultGeneratorClientId, color_space));
blink::CanvasColorSpaceToSkColorSpace(color_space)));
DCHECK(insertion_result.second); DCHECK(insertion_result.second);
cache_iterator = insertion_result.first; cache_iterator = insertion_result.first;
return cache_iterator->second.get(); return cache_iterator->second.get();
......
...@@ -52,8 +52,8 @@ class CONTENT_EXPORT WebGraphicsContext3DProviderImpl ...@@ -52,8 +52,8 @@ class CONTENT_EXPORT WebGraphicsContext3DProviderImpl
void SetErrorMessageCallback( void SetErrorMessageCallback(
base::RepeatingCallback<void(const char*, int32_t)>) override; base::RepeatingCallback<void(const char*, int32_t)>) override;
cc::ImageDecodeCache* ImageDecodeCache( cc::ImageDecodeCache* ImageDecodeCache(
blink::CanvasColorSpace color_space, SkColorType color_type,
blink::CanvasPixelFormat pixel_format) override; sk_sp<SkColorSpace> color_space) override;
ws::ContextProviderCommandBuffer* context_provider() const { ws::ContextProviderCommandBuffer* context_provider() const {
return provider_.get(); return provider_.get();
...@@ -66,7 +66,7 @@ class CONTENT_EXPORT WebGraphicsContext3DProviderImpl ...@@ -66,7 +66,7 @@ class CONTENT_EXPORT WebGraphicsContext3DProviderImpl
scoped_refptr<ws::ContextProviderCommandBuffer> provider_; scoped_refptr<ws::ContextProviderCommandBuffer> provider_;
std::unique_ptr<viz::GLHelper> gl_helper_; std::unique_ptr<viz::GLHelper> gl_helper_;
base::RepeatingClosure context_lost_callback_; base::RepeatingClosure context_lost_callback_;
base::flat_map<std::pair<blink::CanvasColorSpace, blink::CanvasPixelFormat>, base::flat_map<std::pair<SkColorType, uint64_t>,
std::unique_ptr<cc::ImageDecodeCache>> std::unique_ptr<cc::ImageDecodeCache>>
image_decode_cache_map_; image_decode_cache_map_;
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <cstdint> #include <cstdint>
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "base/logging.h"
#include "third_party/skia/include/core/SkImageInfo.h" #include "third_party/skia/include/core/SkImageInfo.h"
class GrContext; class GrContext;
...@@ -61,53 +60,6 @@ class GLHelper; ...@@ -61,53 +60,6 @@ class GLHelper;
namespace blink { namespace blink {
enum CanvasColorSpace {
kSRGBCanvasColorSpace,
kLinearRGBCanvasColorSpace,
kRec2020CanvasColorSpace,
kP3CanvasColorSpace,
kMaxCanvasColorSpace = kP3CanvasColorSpace
};
enum CanvasPixelFormat {
kRGBA8CanvasPixelFormat,
kF16CanvasPixelFormat,
kMaxCanvasPixelFormat = kF16CanvasPixelFormat
};
inline SkColorType PixelFormatToSkColorType(CanvasPixelFormat pixel_format) {
switch (pixel_format) {
case kF16CanvasPixelFormat:
return kRGBA_F16_SkColorType;
case kRGBA8CanvasPixelFormat:
return kN32_SkColorType;
}
NOTREACHED();
return kN32_SkColorType;
}
inline sk_sp<SkColorSpace> CanvasColorSpaceToSkColorSpace(
CanvasColorSpace color_space) {
SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut;
SkColorSpace::RenderTargetGamma gamma = SkColorSpace::kSRGB_RenderTargetGamma;
switch (color_space) {
case kSRGBCanvasColorSpace:
break;
case kLinearRGBCanvasColorSpace:
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
case kRec2020CanvasColorSpace:
gamut = SkColorSpace::kRec2020_Gamut;
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
case kP3CanvasColorSpace:
gamut = SkColorSpace::kDCIP3_D65_Gamut;
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
}
return SkColorSpace::MakeRGB(gamma, gamut);
}
class WebGraphicsContext3DProvider { class WebGraphicsContext3DProvider {
public: public:
virtual ~WebGraphicsContext3DProvider() = default; virtual ~WebGraphicsContext3DProvider() = default;
...@@ -125,11 +77,11 @@ class WebGraphicsContext3DProvider { ...@@ -125,11 +77,11 @@ class WebGraphicsContext3DProvider {
virtual void SetLostContextCallback(base::RepeatingClosure) = 0; virtual void SetLostContextCallback(base::RepeatingClosure) = 0;
virtual void SetErrorMessageCallback( virtual void SetErrorMessageCallback(
base::RepeatingCallback<void(const char* msg, int32_t id)>) = 0; base::RepeatingCallback<void(const char* msg, int32_t id)>) = 0;
// Return a static software image decode cache that matches this color // Return a static software image decode cache for a given color type and
// space and pixel format. // space.
virtual cc::ImageDecodeCache* ImageDecodeCache( virtual cc::ImageDecodeCache* ImageDecodeCache(
CanvasColorSpace color_space, SkColorType color_type,
CanvasPixelFormat pixel_format) = 0; sk_sp<SkColorSpace> color_space) = 0;
}; };
} // namespace blink } // namespace blink
......
...@@ -124,6 +124,19 @@ SkColorType CanvasColorParams::GetSkColorType() const { ...@@ -124,6 +124,19 @@ SkColorType CanvasColorParams::GetSkColorType() const {
return PixelFormatToSkColorType(pixel_format_); return PixelFormatToSkColorType(pixel_format_);
} }
// static
SkColorType CanvasColorParams::PixelFormatToSkColorType(
CanvasPixelFormat pixel_format) {
switch (pixel_format) {
case kF16CanvasPixelFormat:
return kRGBA_F16_SkColorType;
case kRGBA8CanvasPixelFormat:
return kN32_SkColorType;
}
NOTREACHED();
return kN32_SkColorType;
}
SkAlphaType CanvasColorParams::GetSkAlphaType() const { SkAlphaType CanvasColorParams::GetSkAlphaType() const {
if (opacity_mode_ == kOpaque) if (opacity_mode_ == kOpaque)
return kOpaque_SkAlphaType; return kOpaque_SkAlphaType;
...@@ -171,6 +184,28 @@ sk_sp<SkColorSpace> CanvasColorParams::GetSkColorSpace() const { ...@@ -171,6 +184,28 @@ sk_sp<SkColorSpace> CanvasColorParams::GetSkColorSpace() const {
return CanvasColorSpaceToSkColorSpace(color_space_); return CanvasColorSpaceToSkColorSpace(color_space_);
} }
sk_sp<SkColorSpace> CanvasColorParams::CanvasColorSpaceToSkColorSpace(
CanvasColorSpace color_space) {
SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut;
SkColorSpace::RenderTargetGamma gamma = SkColorSpace::kSRGB_RenderTargetGamma;
switch (color_space) {
case kSRGBCanvasColorSpace:
break;
case kLinearRGBCanvasColorSpace:
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
case kRec2020CanvasColorSpace:
gamut = SkColorSpace::kRec2020_Gamut;
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
case kP3CanvasColorSpace:
gamut = SkColorSpace::kDCIP3_D65_Gamut;
gamma = SkColorSpace::kLinear_RenderTargetGamma;
break;
}
return SkColorSpace::MakeRGB(gamma, gamut);
}
gfx::BufferFormat CanvasColorParams::GetBufferFormat() const { gfx::BufferFormat CanvasColorParams::GetBufferFormat() const {
static_assert(kN32_SkColorType == kRGBA_8888_SkColorType || static_assert(kN32_SkColorType == kRGBA_8888_SkColorType ||
kN32_SkColorType == kBGRA_8888_SkColorType, kN32_SkColorType == kBGRA_8888_SkColorType,
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_CANVAS_COLOR_PARAMS_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_CANVAS_COLOR_PARAMS_H_
#include "components/viz/common/resources/resource_format.h" #include "components/viz/common/resources/resource_format.h"
#include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
#include "third_party/blink/renderer/platform/graphics/graphics_types.h" #include "third_party/blink/renderer/platform/graphics/graphics_types.h"
#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/skia/include/core/SkColorSpace.h" #include "third_party/skia/include/core/SkColorSpace.h"
...@@ -25,6 +24,20 @@ class ColorSpace; ...@@ -25,6 +24,20 @@ class ColorSpace;
namespace blink { namespace blink {
enum CanvasColorSpace {
kSRGBCanvasColorSpace,
kLinearRGBCanvasColorSpace,
kRec2020CanvasColorSpace,
kP3CanvasColorSpace,
kMaxCanvasColorSpace = kP3CanvasColorSpace
};
enum CanvasPixelFormat {
kRGBA8CanvasPixelFormat,
kF16CanvasPixelFormat,
kMaxCanvasPixelFormat = kF16CanvasPixelFormat
};
class PLATFORM_EXPORT CanvasColorParams { class PLATFORM_EXPORT CanvasColorParams {
public: public:
// The default constructor will create an output-blended 8-bit surface. // The default constructor will create an output-blended 8-bit surface.
...@@ -61,9 +74,7 @@ class PLATFORM_EXPORT CanvasColorParams { ...@@ -61,9 +74,7 @@ class PLATFORM_EXPORT CanvasColorParams {
// The pixel format to use for allocating SkSurfaces. // The pixel format to use for allocating SkSurfaces.
SkColorType GetSkColorType() const; SkColorType GetSkColorType() const;
static SkColorType PixelFormatToSkColorType(CanvasPixelFormat pixel_format) { static SkColorType PixelFormatToSkColorType(CanvasPixelFormat pixel_format);
return ::blink::PixelFormatToSkColorType(pixel_format);
}
uint8_t BytesPerPixel() const; uint8_t BytesPerPixel() const;
// The color space in which pixels read from the canvas via a shader will be // The color space in which pixels read from the canvas via a shader will be
...@@ -75,9 +86,7 @@ class PLATFORM_EXPORT CanvasColorParams { ...@@ -75,9 +86,7 @@ class PLATFORM_EXPORT CanvasColorParams {
gfx::ColorSpace GetStorageGfxColorSpace() const; gfx::ColorSpace GetStorageGfxColorSpace() const;
sk_sp<SkColorSpace> GetSkColorSpace() const; sk_sp<SkColorSpace> GetSkColorSpace() const;
static sk_sp<SkColorSpace> CanvasColorSpaceToSkColorSpace( static sk_sp<SkColorSpace> CanvasColorSpaceToSkColorSpace(
CanvasColorSpace color_space) { CanvasColorSpace color_space);
return ::blink::CanvasColorSpaceToSkColorSpace(color_space);
}
SkAlphaType GetSkAlphaType() const; SkAlphaType GetSkAlphaType() const;
const SkSurfaceProps* GetSkSurfaceProps() const; const SkSurfaceProps* GetSkSurfaceProps() const;
......
...@@ -751,7 +751,8 @@ cc::ImageDecodeCache* CanvasResourceProvider::ImageDecodeCacheRGBA8() { ...@@ -751,7 +751,8 @@ cc::ImageDecodeCache* CanvasResourceProvider::ImageDecodeCacheRGBA8() {
if (IsAccelerated() && context_provider_wrapper_) { if (IsAccelerated() && context_provider_wrapper_) {
return context_provider_wrapper_->ContextProvider()->ImageDecodeCache( return context_provider_wrapper_->ContextProvider()->ImageDecodeCache(
color_space, kRGBA8CanvasPixelFormat); kN32_SkColorType,
blink::CanvasColorParams::CanvasColorSpaceToSkColorSpace(color_space));
} }
return Image::SharedCCDecodeCache(color_space, kRGBA8CanvasPixelFormat); return Image::SharedCCDecodeCache(color_space, kRGBA8CanvasPixelFormat);
...@@ -765,7 +766,8 @@ cc::ImageDecodeCache* CanvasResourceProvider::ImageDecodeCacheF16() { ...@@ -765,7 +766,8 @@ cc::ImageDecodeCache* CanvasResourceProvider::ImageDecodeCacheF16() {
if (IsAccelerated() && context_provider_wrapper_) { if (IsAccelerated() && context_provider_wrapper_) {
return context_provider_wrapper_->ContextProvider()->ImageDecodeCache( return context_provider_wrapper_->ContextProvider()->ImageDecodeCache(
color_space, kF16CanvasPixelFormat); kRGBA_F16_SkColorType,
blink::CanvasColorParams::CanvasColorSpaceToSkColorSpace(color_space));
} }
return Image::SharedCCDecodeCache(color_space, kF16CanvasPixelFormat); return Image::SharedCCDecodeCache(color_space, kF16CanvasPixelFormat);
} }
......
...@@ -53,8 +53,9 @@ class WebGraphicsContext3DProviderForTests ...@@ -53,8 +53,9 @@ class WebGraphicsContext3DProviderForTests
void SetLostContextCallback(base::Closure) override {} void SetLostContextCallback(base::Closure) override {}
void SetErrorMessageCallback( void SetErrorMessageCallback(
base::RepeatingCallback<void(const char*, int32_t id)>) override {} base::RepeatingCallback<void(const char*, int32_t id)>) override {}
cc::ImageDecodeCache* ImageDecodeCache(CanvasColorSpace, cc::ImageDecodeCache* ImageDecodeCache(
CanvasPixelFormat) override { SkColorType color_type,
sk_sp<SkColorSpace> color_space) override {
return &image_decode_cache_; return &image_decode_cache_;
} }
......
...@@ -53,8 +53,9 @@ class FakeWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider { ...@@ -53,8 +53,9 @@ class FakeWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider {
void SetLostContextCallback(base::Closure) override {} void SetLostContextCallback(base::Closure) override {}
void SetErrorMessageCallback( void SetErrorMessageCallback(
base::RepeatingCallback<void(const char*, int32_t id)>) override {} base::RepeatingCallback<void(const char*, int32_t id)>) override {}
cc::ImageDecodeCache* ImageDecodeCache(CanvasColorSpace, cc::ImageDecodeCache* ImageDecodeCache(
CanvasPixelFormat) override { SkColorType color_type,
sk_sp<SkColorSpace> color_space) override {
return image_decode_cache_; return image_decode_cache_;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment