| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_TEST_FAKE_WEB_GRAPHICS_CONTEXT_3D_PROVIDER_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_TEST_FAKE_WEB_GRAPHICS_CONTEXT_3D_PROVIDER_H_ |
| |
| #include "cc/test/stub_decode_cache.h" |
| #include "cc/tiles/image_decode_cache.h" |
| #include "components/viz/test/test_context_provider.h" |
| #include "gpu/command_buffer/client/gles2_interface.h" |
| #include "gpu/command_buffer/client/raster_implementation_gles.h" |
| #include "gpu/command_buffer/common/capabilities.h" |
| #include "gpu/config/gpu_feature_info.h" |
| #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h" |
| #include "third_party/skia/include/core/SkRefCnt.h" |
| #include "third_party/skia/include/gpu/GrDirectContext.h" |
| #include "third_party/skia/include/gpu/mock/GrMockTypes.h" |
| |
| namespace blink { |
| |
| class FakeWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider { |
| public: |
| explicit FakeWebGraphicsContext3DProvider( |
| gpu::gles2::GLES2Interface* gl, |
| cc::ImageDecodeCache* cache = nullptr, |
| GrDirectContext* gr_context = nullptr, |
| viz::RasterContextProvider* raster_context_provider = nullptr) |
| : gl_(gl), |
| image_decode_cache_(cache ? cache : &stub_image_decode_cache_), |
| raster_context_provider_(raster_context_provider) { |
| if (gr_context) { |
| gr_context_ = sk_ref_sp<GrDirectContext>(gr_context); |
| } else { |
| GrMockOptions mockOptions; |
| gr_context_ = GrDirectContext::MakeMock(&mockOptions); |
| } |
| |
| // TODO(nazabris, crbug.com/1017508) Use RasterImplementation after |
| // all references to GLES2Interface have been removed. |
| raster_interface_ = |
| std::make_unique<gpu::raster::RasterImplementationGLES>(gl_, nullptr); |
| |
| // enable all gpu features. |
| for (unsigned feature = 0; feature < gpu::NUMBER_OF_GPU_FEATURE_TYPES; |
| ++feature) { |
| gpu_feature_info_.status_values[feature] = gpu::kGpuFeatureStatusEnabled; |
| } |
| } |
| ~FakeWebGraphicsContext3DProvider() override = default; |
| |
| GrDirectContext* GetGrContext() override { return gr_context_.get(); } |
| |
| const gpu::Capabilities& GetCapabilities() const override { |
| return capabilities_; |
| } |
| void SetCapabilities(const gpu::Capabilities& c) { capabilities_ = c; } |
| |
| const gpu::GpuFeatureInfo& GetGpuFeatureInfo() const override { |
| return gpu_feature_info_; |
| } |
| |
| const WebglPreferences& GetWebglPreferences() const override { |
| return webgl_preferences_; |
| } |
| |
| gpu::GLHelper* GetGLHelper() override { return nullptr; } |
| |
| gpu::InterfaceBase* InterfaceBase() override { return gl_; } |
| gpu::gles2::GLES2Interface* ContextGL() override { return gl_; } |
| gpu::raster::RasterInterface* RasterInterface() override { |
| if (!raster_interface_) |
| return nullptr; |
| |
| return raster_interface_.get(); |
| } |
| bool IsContextLost() override { |
| return RasterInterface() && |
| RasterInterface()->GetGraphicsResetStatusKHR() != GL_NO_ERROR; |
| } |
| gpu::webgpu::WebGPUInterface* WebGPUInterface() override { return nullptr; } |
| |
| bool BindToCurrentThread() override { return false; } |
| void SetLostContextCallback(base::RepeatingClosure) override {} |
| void SetErrorMessageCallback( |
| base::RepeatingCallback<void(const char*, int32_t id)>) override {} |
| cc::ImageDecodeCache* ImageDecodeCache(SkColorType color_type) override { |
| return image_decode_cache_; |
| } |
| viz::TestSharedImageInterface* SharedImageInterface() override { |
| return &test_shared_image_interface_; |
| } |
| void CopyVideoFrame(media::PaintCanvasVideoRenderer* video_render, |
| media::VideoFrame* video_frame, |
| cc::PaintCanvas* canvas) override {} |
| viz::RasterContextProvider* RasterContextProvider() const override { |
| return raster_context_provider_; |
| } |
| |
| private: |
| cc::StubDecodeCache stub_image_decode_cache_; |
| viz::TestSharedImageInterface test_shared_image_interface_; |
| gpu::gles2::GLES2Interface* gl_; |
| std::unique_ptr<gpu::raster::RasterInterface> raster_interface_; |
| sk_sp<GrDirectContext> gr_context_; |
| gpu::Capabilities capabilities_; |
| gpu::GpuFeatureInfo gpu_feature_info_; |
| WebglPreferences webgl_preferences_; |
| cc::ImageDecodeCache* image_decode_cache_; |
| viz::RasterContextProvider* raster_context_provider_; |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_TEST_FAKE_WEB_GRAPHICS_CONTEXT_3D_PROVIDER_H_ |