Commit 91436df9 authored by Vasiliy Telezhnikov's avatar Vasiliy Telezhnikov Committed by Commit Bot

Remove GLRendererCopier from SkiaRenderer

This CL removes GLRendererCopier for SkiaRenderer, as we use skia for
readback on all platforms.

Bug: 1044594
Change-Id: I51ee6f36c87a0598a5aa7dd9d9dc1c9ca1417d73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2307651Reviewed-by: default avatarJonathan Backer <backer@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790983}
parent 396d268a
......@@ -19,9 +19,6 @@ namespace features {
const base::Feature kForcePreferredIntervalForVideo{
"ForcePreferredIntervalForVideo", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kUseSkiaForGLReadback{"UseSkiaForGLReadback",
base::FEATURE_ENABLED_BY_DEFAULT};
// Use the SkiaRenderer.
#if defined(OS_LINUX) && !(defined(OS_CHROMEOS) || BUILDFLAG(IS_CHROMECAST))
const base::Feature kUseSkiaRenderer{"UseSkiaRenderer",
......@@ -91,14 +88,6 @@ bool IsVizHitTestingDebugEnabled() {
switches::kEnableVizHitTestDebug);
}
bool IsUsingSkiaForGLReadback() {
// Viz for webview requires Skia Readback.
if (IsUsingVizForWebView())
return true;
return base::FeatureList::IsEnabled(kUseSkiaForGLReadback);
}
bool IsUsingSkiaRenderer() {
#if defined(OS_ANDROID)
// We don't support KitKat. Check for it before looking at the feature flag
......
......@@ -14,7 +14,6 @@
namespace features {
VIZ_COMMON_EXPORT extern const base::Feature kForcePreferredIntervalForVideo;
VIZ_COMMON_EXPORT extern const base::Feature kUseSkiaForGLReadback;
VIZ_COMMON_EXPORT extern const base::Feature kUseSkiaRenderer;
VIZ_COMMON_EXPORT extern const base::Feature kRecordSkPicture;
VIZ_COMMON_EXPORT extern const base::Feature kDisableDeJelly;
......@@ -33,7 +32,6 @@ VIZ_COMMON_EXPORT extern const base::Feature kWebRtcLogCapturePipeline;
VIZ_COMMON_EXPORT bool IsForcePreferredIntervalForVideoEnabled();
VIZ_COMMON_EXPORT bool IsVizHitTestingDebugEnabled();
VIZ_COMMON_EXPORT bool IsUsingSkiaForGLReadback();
VIZ_COMMON_EXPORT bool IsUsingSkiaRenderer();
VIZ_COMMON_EXPORT bool IsRecordingSkPicture();
#if defined(OS_ANDROID)
......
......@@ -96,8 +96,6 @@ viz_component("service") {
"display/texture_deleter.h",
"display_embedder/buffer_queue.cc",
"display_embedder/buffer_queue.h",
"display_embedder/direct_context_provider.cc",
"display_embedder/direct_context_provider.h",
"display_embedder/gl_output_surface.cc",
"display_embedder/gl_output_surface.h",
"display_embedder/gl_output_surface_buffer_queue.cc",
......
// Copyright 2019 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 COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_DIRECT_CONTEXT_PROVIDER_H_
#define COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_DIRECT_CONTEXT_PROVIDER_H_
#include <stdint.h>
#include <memory>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/observer_list.h"
#include "base/trace_event/memory_dump_provider.h"
#include "components/viz/common/gpu/context_provider.h"
#include "components/viz/service/viz_service_export.h"
#include "gpu/command_buffer/client/gpu_control.h"
#include "gpu/command_buffer/client/shared_image_interface.h"
#include "gpu/command_buffer/common/context_result.h"
#include "gpu/command_buffer/service/gpu_tracer.h"
#include "gpu/command_buffer/service/image_manager.h"
#include "gpu/command_buffer/service/mailbox_manager_impl.h"
#include "gpu/command_buffer/service/passthrough_discardable_manager.h"
#include "gpu/command_buffer/service/service_discardable_manager.h"
#include "gpu/command_buffer/service/shared_image_manager.h"
class GrContext;
namespace gpu {
class CommandBufferDirect;
class DecoderContext;
class SharedImageInterface;
class TransferBuffer;
struct GpuPreferences;
namespace gles2 {
class GLES2CmdHelper;
class GLES2Implementation;
class GLES2Interface;
class TextureManager;
} // namespace gles2
} // namespace gpu
namespace viz {
class ContextLostObserver;
// DirectContextProvider bridges between GPU client code and GPU service
// code. Often we cannot include client and service headers in the same
// translation unit due to collisions between client and service GL
// defines. DirectContextProviderDelegate satisfies DirectContextProvider
// dependencies that require GPU service code that cannot be included by
// DirectContextProvider.
class VIZ_SERVICE_EXPORT DirectContextProviderDelegate {
public:
DirectContextProviderDelegate();
virtual ~DirectContextProviderDelegate();
virtual gpu::SharedImageManager* GetSharedImageManager() = 0;
virtual gpu::SharedImageInterface* GetSharedImageInterface() = 0;
virtual gpu::CommandBufferNamespace GetNamespaceID() const = 0;
virtual gpu::CommandBufferId GetCommandBufferID() const = 0;
// Generate the release ID for a new SyncToken (see
// GpuControl::GenerateFenceSyncRelease).
virtual uint64_t GenerateFenceSyncRelease() = 0;
// Runs |callback| when |sync_token| is released.
virtual void SignalSyncToken(const gpu::SyncToken& sync_token,
base::OnceClosure callback) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(DirectContextProviderDelegate);
};
// DirectContextProvider provides a GLES2Interface by running cross process code
// (e.g. GLES2Implementation and GLES2Decoder) within a single thread. It is
// suitable for easily porting code relying on GLES2Interface, but is less
// efficient than calling native GL because it serializes/deserializes command
// streams, validates command streams, and has unnecessary copies through shared
// memory (e.g. glReadPixels frame buffer). Parts of GLES2Interface are
// NOTIMPLEMENTED().
class VIZ_SERVICE_EXPORT DirectContextProvider
: public base::RefCountedThreadSafe<DirectContextProvider>,
public ContextProvider,
public gpu::GpuControl,
public base::trace_event::MemoryDumpProvider {
public:
DirectContextProvider(scoped_refptr<gl::GLContext> gl_context,
scoped_refptr<gl::GLSurface> gl_surface,
bool supports_alpha,
const gpu::GpuPreferences& gpu_preferences,
gpu::gles2::FeatureInfo* feature_info,
std::unique_ptr<DirectContextProviderDelegate> client);
gpu::DecoderContext* decoder() { return decoder_.get(); }
// Set required state, including texture_client_id as color attachment 0
// of a currently bound framebuffer. If texture_client_id == 0, set FBO0 as
// current.
void SetGLRendererCopierRequiredState(GLuint texture_client_id);
gpu::gles2::TextureManager* texture_manager();
GLuint GenClientTextureId();
void DeleteClientTextureId(GLuint client_id);
void MarkContextLost();
// Call a glFinish() to complete any pending queries.
void FinishQueries();
// ContextProvider implementation.
void AddRef() const override;
void Release() const override;
gpu::ContextResult BindToCurrentThread() override;
gpu::gles2::GLES2Interface* ContextGL() override;
gpu::ContextSupport* ContextSupport() override;
class GrContext* GrContext() override;
gpu::SharedImageInterface* SharedImageInterface() override;
ContextCacheController* CacheController() override;
base::Lock* GetLock() override;
const gpu::Capabilities& ContextCapabilities() const override;
const gpu::GpuFeatureInfo& GetGpuFeatureInfo() const override;
void AddObserver(ContextLostObserver* obs) override;
void RemoveObserver(ContextLostObserver* obs) override;
// GpuControl implementation.
void SetGpuControlClient(gpu::GpuControlClient*) override;
const gpu::Capabilities& GetCapabilities() const override;
int32_t CreateImage(ClientBuffer buffer,
size_t width,
size_t height) override;
void DestroyImage(int32_t id) override;
void SignalQuery(uint32_t query, base::OnceClosure callback) override;
void CreateGpuFence(uint32_t gpu_fence_id, ClientGpuFence source) override;
void GetGpuFence(uint32_t gpu_fence_id,
base::OnceCallback<void(std::unique_ptr<gfx::GpuFence>)>
callback) override;
void SetLock(base::Lock*) override;
void EnsureWorkVisible() override;
gpu::CommandBufferNamespace GetNamespaceID() const override;
gpu::CommandBufferId GetCommandBufferID() const override;
void FlushPendingWork() override;
uint64_t GenerateFenceSyncRelease() override;
bool IsFenceSyncReleased(uint64_t release) override;
void SignalSyncToken(const gpu::SyncToken& sync_token,
base::OnceClosure callback) override;
void WaitSyncToken(const gpu::SyncToken& sync_token) override;
bool CanWaitUnverifiedSyncToken(const gpu::SyncToken& sync_token) override;
void SetDisplayTransform(gfx::OverlayTransform transform) override;
private:
friend class base::RefCountedThreadSafe<DirectContextProvider>;
~DirectContextProvider() override;
void Destroy();
void OnContextLost();
// base::trace_event::MemoryDumpProvider implementation.
bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
base::trace_event::ProcessMemoryDump* pmd) override;
gpu::gles2::MailboxManagerImpl mailbox_manager_;
gpu::gles2::TraceOutputter outputter_;
gpu::gles2::ImageManager image_manager_;
gpu::ServiceDiscardableManager discardable_manager_;
gpu::PassthroughDiscardableManager passthrough_discardable_manager_;
gpu::gles2::ShaderTranslatorCache translator_cache_;
gpu::gles2::FramebufferCompletenessCache completeness_cache_;
gpu::GpuFeatureInfo gpu_feature_info_;
gpu::Capabilities capabilities_;
gpu::ContextResult context_result_ = gpu::ContextResult::kSuccess;
std::unique_ptr<DirectContextProviderDelegate> delegate_;
// Only non-null if BindToCurrentThread() == ContextResult::kSuccess.
std::unique_ptr<gpu::CommandBufferDirect> command_buffer_;
std::unique_ptr<gpu::gles2::GLES2CmdHelper> gles2_cmd_helper_;
std::unique_ptr<gpu::gles2::GLES2Decoder> decoder_;
std::unique_ptr<gpu::TransferBuffer> transfer_buffer_;
scoped_refptr<gl::GLContext> gl_context_;
scoped_refptr<gl::GLSurface> gl_surface_;
std::unique_ptr<gpu::gles2::GLES2Implementation> gles2_implementation_;
GLuint framebuffer_id_ = 0;
THREAD_CHECKER(thread_checker_);
base::ObserverList<ContextLostObserver>::Unchecked observers_;
};
} // namespace viz
#endif // COMPONENTS_VIZ_SERVICE_DISPLAY_EMBEDDER_DIRECT_CONTEXT_PROVIDER_H_
......@@ -51,7 +51,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputDeviceBufferQueue : public SkiaOutputDevice {
SkSurface* BeginPaint(
std::vector<GrBackendSemaphore>* end_semaphores) override;
void EndPaint() override;
bool supports_alpha() { return true; }
bool IsPrimaryPlaneOverlay() const override;
void SchedulePrimaryPlane(
......
......@@ -42,10 +42,6 @@ class SkiaOutputDeviceGL final : public SkiaOutputDevice {
DidSwapBufferCompleteCallback did_swap_buffer_complete_callback);
~SkiaOutputDeviceGL() override;
bool supports_alpha() {
return supports_alpha_;
}
// SkiaOutputDevice implementation:
bool Reshape(const gfx::Size& size,
float device_scale_factor,
......
......@@ -33,8 +33,6 @@ class SkiaOutputDeviceWebView : public SkiaOutputDevice {
SkiaOutputDeviceWebView& operator=(const SkiaOutputDeviceWebView&) = delete;
~SkiaOutputDeviceWebView() override;
bool supports_alpha() const { return supports_alpha_; }
// SkiaOutputDevice implementation:
bool Reshape(const gfx::Size& size,
float device_scale_factor,
......
......@@ -27,7 +27,6 @@
#include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/service/shared_context_state.h"
#include "gpu/command_buffer/service/sync_point_manager.h"
#include "gpu/ipc/in_process_command_buffer.h"
#include "gpu/ipc/service/context_url.h"
#include "gpu/ipc/service/display_context.h"
#include "gpu/ipc/service/image_transport_surface_delegate.h"
......@@ -41,11 +40,11 @@ class ColorSpace;
}
namespace gl {
class GLApi;
class GLSurface;
}
namespace gpu {
class SharedImageRepresentationFactory;
class SyncPointClientState;
}
......@@ -58,10 +57,7 @@ class PlatformWindowSurface;
namespace viz {
class DawnContextProvider;
class DirectContextProvider;
class GLRendererCopier;
class ImageContextImpl;
class TextureDeleter;
class VulkanContextProvider;
namespace copy_output {
......@@ -74,8 +70,6 @@ class SkiaOutputSurfaceImplOnGpu
: public gpu::ImageTransportSurfaceDelegate,
public gpu::SharedContextState::ContextLostObserver {
public:
class ScopedUseContextProvider;
using DidSwapBufferCompleteCallback =
base::RepeatingCallback<void(gpu::SwapBuffersCompleteParams,
const gfx::Size& pixel_size)>;
......@@ -167,7 +161,6 @@ class SkiaOutputSurfaceImplOnGpu
void EndAccessImages(const base::flat_set<ImageContextImpl*>& image_contexts);
sk_sp<GrContextThreadSafeProxy> GetGrContextThreadSafeProxy();
const gl::GLVersionInfo* gl_version_info() const { return gl_version_info_; }
size_t max_resource_cache_bytes() const { return max_resource_cache_bytes_; }
void ReleaseImageContexts(
std::vector<std::unique_ptr<ExternalUseClient::ImageContext>>
......@@ -244,10 +237,6 @@ class SkiaOutputSurfaceImplOnGpu
OutputSurfaceFrame* frame = nullptr);
GrContext* gr_context() { return context_state_->gr_context(); }
gpu::DecoderContext* decoder();
void ScheduleDelayedWork();
void PerformDelayedWork();
bool is_using_vulkan() const {
return !!vulkan_context_provider_ &&
......@@ -296,16 +285,12 @@ class SkiaOutputSurfaceImplOnGpu
VulkanContextProvider* const vulkan_context_provider_;
DawnContextProvider* const dawn_context_provider_;
const RendererSettings renderer_settings_;
// This is only used to lazily create DirectContextProviderDelegate for
// readback using GLRendererCopier.
// TODO(samans): Remove |sequence_id| once readback always uses Skia.
const gpu::SequenceId sequence_id_;
// Should only be run on the client thread with PostTaskToClientThread().
DidSwapBufferCompleteCallback did_swap_buffer_complete_callback_;
BufferPresentedCallback buffer_presented_callback_;
ContextLostCallback context_lost_callback_;
GpuVSyncCallback gpu_vsync_callback_;
bool use_gl_renderer_copier_ = false;
#if defined(USE_OZONE)
// This should outlive gl_surface_ and vulkan_surface_.
......@@ -317,7 +302,6 @@ class SkiaOutputSurfaceImplOnGpu
gfx::ColorSpace color_space_;
scoped_refptr<gl::GLSurface> gl_surface_;
scoped_refptr<gpu::SharedContextState> context_state_;
const gl::GLVersionInfo* gl_version_info_ = nullptr;
size_t max_resource_cache_bytes_ = 0u;
std::unique_ptr<DisplayContext> display_context_;
......@@ -350,21 +334,9 @@ class SkiaOutputSurfaceImplOnGpu
base::flat_map<RenderPassId, OffscreenSurface> offscreen_surfaces_;
scoped_refptr<base::SingleThreadTaskRunner> context_current_task_runner_;
scoped_refptr<DirectContextProvider> context_provider_;
std::unique_ptr<TextureDeleter> texture_deleter_;
std::unique_ptr<GLRendererCopier> copier_;
bool delayed_work_pending_ = false;
gl::GLApi* api_ = nullptr;
bool supports_alpha_ = false;
// Micro-optimization to get to issuing GPU SwapBuffers as soon as possible.
std::vector<sk_sp<SkDeferredDisplayList>> destroy_after_swap_;
const gpu::ContextUrl copier_active_url_;
int num_readbacks_pending_ = 0;
bool readback_poll_pending_ = false;
......
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