Commit b311e47f authored by Jonathan Backer's avatar Jonathan Backer Committed by Commit Bot

Force Android WebView use_skia_renderer_non_ddl

This CL makes Android WebView use this mode explicitly whenever
SkiaRenderer is asked for. This will allow some further clean of
SkiaOutputSurfaceImpl* in follow up CLs.

Change-Id: Ibcba761477bbe89829ae647ffd22ff7a80d4247b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1539779
Commit-Queue: Jonathan Backer <backer@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#644493}
parent 6b6e4456
......@@ -23,7 +23,6 @@
#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
#include "components/viz/service/display/display.h"
#include "components/viz/service/display/display_scheduler.h"
#include "components/viz/service/display_embedder/skia_output_surface_impl.h"
#include "components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h"
#include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
......@@ -84,6 +83,7 @@ SurfacesInstance::SurfacesInstance()
this, frame_sink_manager_.get(), frame_sink_id_, is_root,
needs_sync_points);
// Android WebView always uses non-DDL regardless of RendererSetting.
const bool use_skia_renderer =
settings.use_skia_renderer || settings.use_skia_renderer_non_ddl;
auto* command_line = base::CommandLine::ForCurrentProcess();
......@@ -103,7 +103,7 @@ SurfacesInstance::SurfacesInstance()
std::unique_ptr<viz::OutputSurface> output_surface;
viz::SkiaOutputSurface* skia_output_surface = nullptr;
gl_surface_ = base::MakeRefCounted<AwGLSurface>();
if (settings.use_skia_renderer || settings.use_skia_renderer_non_ddl) {
if (use_skia_renderer) {
auto* task_executor = DeferredGpuCommandService::GetInstance();
if (!shared_context_state_) {
auto gl_context =
......@@ -119,16 +119,10 @@ SurfacesInstance::SurfacesInstance()
.enabled_gpu_driver_bug_workarounds),
nullptr /* gr_shader_cache */);
}
if (settings.use_skia_renderer_non_ddl) {
output_surface = std::make_unique<viz::SkiaOutputSurfaceImplNonDDL>(
gl_surface_, shared_context_state_, task_executor->mailbox_manager(),
task_executor->shared_image_manager(),
task_executor->sync_point_manager(),
false /* need_swapbuffers_ack */);
} else {
output_surface = std::make_unique<viz::SkiaOutputSurfaceImpl>(
task_executor, gl_surface_, shared_context_state_);
}
output_surface = std::make_unique<viz::SkiaOutputSurfaceImplNonDDL>(
gl_surface_, shared_context_state_, task_executor->mailbox_manager(),
task_executor->shared_image_manager(),
task_executor->sync_point_manager(), false /* need_swapbuffers_ack */);
skia_output_surface =
static_cast<viz::SkiaOutputSurface*>(output_surface.get());
} else {
......
......@@ -27,7 +27,6 @@
#include "gpu/command_buffer/common/swap_buffers_complete_params.h"
#include "gpu/command_buffer/service/scheduler.h"
#include "gpu/command_buffer/service/shared_image_representation.h"
#include "gpu/ipc/command_buffer_task_executor.h"
#include "gpu/vulkan/buildflags.h"
#include "third_party/skia/include/core/SkYUVAIndex.h"
#include "ui/gfx/skia_util.h"
......@@ -276,7 +275,6 @@ SkiaOutputSurfaceImpl::SkiaOutputSurfaceImpl(
SyntheticBeginFrameSource* synthetic_begin_frame_source,
const RendererSettings& renderer_settings)
: gpu_service_(gpu_service),
task_executor_(nullptr),
is_using_vulkan_(gpu_service->is_using_vulkan()),
surface_handle_(surface_handle),
synthetic_begin_frame_source_(synthetic_begin_frame_source),
......@@ -285,19 +283,6 @@ SkiaOutputSurfaceImpl::SkiaOutputSurfaceImpl(
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
}
SkiaOutputSurfaceImpl::SkiaOutputSurfaceImpl(
gpu::CommandBufferTaskExecutor* task_executor,
scoped_refptr<gl::GLSurface> gl_surface,
scoped_refptr<gpu::SharedContextState> shared_context_state)
: gpu_service_(nullptr),
task_executor_(task_executor),
gl_surface_(std::move(gl_surface)),
shared_context_state_(std::move(shared_context_state)),
is_using_vulkan_(false),
surface_handle_(gpu::kNullSurfaceHandle),
synthetic_begin_frame_source_(nullptr),
weak_ptr_factory_(this) {}
SkiaOutputSurfaceImpl::~SkiaOutputSurfaceImpl() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
recorder_.reset();
......@@ -318,12 +303,7 @@ void SkiaOutputSurfaceImpl::BindToClient(OutputSurfaceClient* client) {
client_ = client;
weak_ptr_ = weak_ptr_factory_.GetWeakPtr();
if (task_executor_) {
DCHECK(!sequence_);
sequence_ = task_executor_->CreateSequence();
} else {
client_thread_task_runner_ = base::ThreadTaskRunnerHandle::Get();
}
client_thread_task_runner_ = base::ThreadTaskRunnerHandle::Get();
base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
auto callback = base::BindOnce(&SkiaOutputSurfaceImpl::InitializeOnGpuThread,
......@@ -361,12 +341,6 @@ void SkiaOutputSurfaceImpl::Reshape(const gfx::Size& size,
const gfx::ColorSpace& color_space,
bool has_alpha,
bool use_stencil) {
reshape_surface_size_ = size;
reshape_device_scale_factor_ = device_scale_factor;
reshape_color_space_ = color_space;
reshape_has_alpha_ = has_alpha;
reshape_use_stencil_ = use_stencil;
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (initialize_waitable_event_) {
initialize_waitable_event_->Wait();
......@@ -374,23 +348,15 @@ void SkiaOutputSurfaceImpl::Reshape(const gfx::Size& size,
}
SkSurfaceCharacterization* characterization = nullptr;
// If the render target is changed between GL fbo zero and non-zero, we cannot
// recreate SkSurface characterization from the existing characterization. So
// we have to request a new SkSurface characterization from
// SkiaOutputSurfaceImplOnGpu.
backing_framebuffer_object_ =
gl_surface_ ? gl_surface_->GetBackingFramebufferObject() : 0;
if (!characterization_.isValid() ||
(!is_using_vulkan_ &&
characterization_.usesGLFBO0() != (backing_framebuffer_object_ == 0))) {
if (characterization_.isValid()) {
// TODO(weiliang): support color space. https://crbug.com/795132
characterization_ =
characterization_.createResized(size.width(), size.height());
} else {
characterization = &characterization_;
initialize_waitable_event_ = std::make_unique<base::WaitableEvent>(
base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
} else {
// TODO(weiliang): support color space. https://crbug.com/795132
characterization_ =
characterization_.createResized(size.width(), size.height());
}
// impl_on_gpu_ is released on the GPU thread by a posted task from
......@@ -464,15 +430,6 @@ SkCanvas* SkiaOutputSurfaceImpl::BeginPaintCurrentFrame() {
}
DCHECK(characterization_.isValid());
// The fbo is changed, in that case we need notify SkiaOutputSurfaceImplOnGpu,
// so it can recreate SkSurface from the new fbo, and return a updated
// SkSurfaceCharacterization if necessary.
if (gl_surface_ && backing_framebuffer_object_ !=
gl_surface_->GetBackingFramebufferObject()) {
Reshape(reshape_surface_size_, reshape_device_scale_factor_,
reshape_color_space_, reshape_has_alpha_, reshape_use_stencil_);
}
recorder_.emplace(characterization_);
if (!renderer_settings_.show_overdraw_feedback)
return recorder_->getCanvas();
......@@ -676,35 +633,22 @@ void SkiaOutputSurfaceImpl::InitializeOnGpuThread(base::WaitableEvent* event) {
base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(event)));
}
if (task_executor_) {
// When |task_executor_| is not nullptr, DidSwapBuffersComplete(),
// BufferPresented(), ContextList() are not expected to be called by this
// class. The SurfacesInstance will do it.
impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
task_executor_, gl_surface_, std::move(shared_context_state_),
sequence_->GetSequenceId(), renderer_settings_,
base::DoNothing::Repeatedly<gpu::SwapBuffersCompleteParams,
const gfx::Size&>(),
base::DoNothing::Repeatedly<const gfx::PresentationFeedback&>(),
base::DoNothing::Repeatedly<>());
} else {
auto did_swap_buffer_complete_callback = base::BindRepeating(
&SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
did_swap_buffer_complete_callback = CreateSafeCallback(
client_thread_task_runner_, did_swap_buffer_complete_callback);
auto buffer_presented_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
buffer_presented_callback = CreateSafeCallback(client_thread_task_runner_,
buffer_presented_callback);
auto context_lost_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
context_lost_callback =
CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
gpu_service_, surface_handle_, renderer_settings_,
did_swap_buffer_complete_callback, buffer_presented_callback,
context_lost_callback);
}
auto did_swap_buffer_complete_callback = base::BindRepeating(
&SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
did_swap_buffer_complete_callback = CreateSafeCallback(
client_thread_task_runner_, did_swap_buffer_complete_callback);
auto buffer_presented_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
buffer_presented_callback =
CreateSafeCallback(client_thread_task_runner_, buffer_presented_callback);
auto context_lost_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
context_lost_callback =
CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
gpu_service_, surface_handle_, renderer_settings_,
did_swap_buffer_complete_callback, buffer_presented_callback,
context_lost_callback);
capabilities_ = impl_on_gpu_->capabilities();
}
......@@ -788,13 +732,9 @@ void SkiaOutputSurfaceImpl::ContextLost() {
void SkiaOutputSurfaceImpl::ScheduleGpuTask(
base::OnceClosure callback,
std::vector<gpu::SyncToken> sync_tokens) {
if (gpu_service_) {
auto sequence_id = gpu_service_->skia_output_surface_sequence_id();
gpu_service_->scheduler()->ScheduleTask(gpu::Scheduler::Task(
sequence_id, std::move(callback), std::move(sync_tokens)));
} else {
sequence_->ScheduleTask(std::move(callback), std::move(sync_tokens));
}
auto sequence_id = gpu_service_->skia_output_surface_sequence_id();
gpu_service_->scheduler()->ScheduleTask(gpu::Scheduler::Task(
sequence_id, std::move(callback), std::move(sync_tokens)));
}
GrBackendFormat SkiaOutputSurfaceImpl::GetGrBackendFormatForTexture(
......
......@@ -26,15 +26,6 @@ namespace base {
class WaitableEvent;
}
namespace gl {
class GLSurface;
}
namespace gpu {
class CommandBufferTaskExecutor;
class SharedContextState;
} // namespace gpu
namespace viz {
class GpuServiceImpl;
......@@ -57,10 +48,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImpl : public SkiaOutputSurface {
gpu::SurfaceHandle surface_handle,
SyntheticBeginFrameSource* synthetic_begin_frame_source,
const RendererSettings& renderer_settings);
SkiaOutputSurfaceImpl(
gpu::CommandBufferTaskExecutor* task_executor,
scoped_refptr<gl::GLSurface> gl_surface,
scoped_refptr<gpu::SharedContextState> shared_context_state);
~SkiaOutputSurfaceImpl() override;
// OutputSurface implementation:
......@@ -145,24 +132,11 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImpl : public SkiaOutputSurface {
GpuServiceImpl* const gpu_service_;
// Stuffs for running with |task_executor_| instead of |gpu_service_|.
gpu::CommandBufferTaskExecutor* const task_executor_;
scoped_refptr<gl::GLSurface> gl_surface_;
scoped_refptr<gpu::SharedContextState> shared_context_state_;
std::unique_ptr<gpu::CommandBufferTaskExecutor::Sequence> sequence_;
const bool is_using_vulkan_;
const gpu::SurfaceHandle surface_handle_;
SyntheticBeginFrameSource* const synthetic_begin_frame_source_;
OutputSurfaceClient* client_ = nullptr;
unsigned int backing_framebuffer_object_ = 0;
gfx::Size reshape_surface_size_;
float reshape_device_scale_factor_ = 0.f;
gfx::ColorSpace reshape_color_space_;
bool reshape_has_alpha_ = false;
bool reshape_use_stencil_ = false;
std::unique_ptr<base::WaitableEvent> initialize_waitable_event_;
SkSurfaceCharacterization characterization_;
base::Optional<SkDeferredDisplayListRecorder> recorder_;
......
......@@ -33,7 +33,6 @@
#include "gpu/command_buffer/service/texture_base.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "gpu/config/gpu_preferences.h"
#include "gpu/ipc/command_buffer_task_executor.h"
#include "gpu/ipc/common/gpu_client_ids.h"
#include "gpu/ipc/common/gpu_surface_lookup.h"
#include "gpu/ipc/service/image_transport_surface.h"
......@@ -117,14 +116,6 @@ scoped_refptr<gpu::gles2::FeatureInfo> CreateFeatureInfo(
channel_manager->gpu_feature_info());
}
scoped_refptr<gpu::gles2::FeatureInfo> CreateFeatureInfo(
gpu::CommandBufferTaskExecutor* task_executor) {
return base::MakeRefCounted<gpu::gles2::FeatureInfo>(
gpu::GpuDriverBugWorkarounds(
task_executor->gpu_feature_info().enabled_gpu_driver_bug_workarounds),
task_executor->gpu_feature_info());
}
scoped_refptr<gpu::SyncPointClientState> CreateSyncPointClientState(
GpuServiceImpl* gpu_service) {
auto command_buffer_id = gpu::CommandBufferId::FromUnsafeValue(
......@@ -134,16 +125,6 @@ scoped_refptr<gpu::SyncPointClientState> CreateSyncPointClientState(
gpu_service->skia_output_surface_sequence_id());
}
scoped_refptr<gpu::SyncPointClientState> CreateSyncPointClientState(
gpu::CommandBufferTaskExecutor* task_executor,
gpu::SequenceId sequence_id) {
auto command_buffer_id = gpu::CommandBufferId::FromUnsafeValue(
g_next_command_buffer_id.GetNext() + 1);
return task_executor->sync_point_manager()->CreateSyncPointClientState(
gpu::CommandBufferNamespace::VIZ_SKIA_OUTPUT_SURFACE, command_buffer_id,
sequence_id);
}
std::unique_ptr<gpu::SharedImageRepresentationFactory>
CreateSharedImageRepresentationFactory(GpuServiceImpl* gpu_service) {
// TODO(https://crbug.com/899905): Use a real MemoryTracker, not nullptr.
......@@ -151,14 +132,6 @@ CreateSharedImageRepresentationFactory(GpuServiceImpl* gpu_service) {
gpu_service->shared_image_manager(), nullptr);
}
std::unique_ptr<gpu::SharedImageRepresentationFactory>
CreateSharedImageRepresentationFactory(
gpu::CommandBufferTaskExecutor* task_executor) {
// TODO(https://crbug.com/899905): Use a real MemoryTracker, not nullptr.
return std::make_unique<gpu::SharedImageRepresentationFactory>(
task_executor->shared_image_manager(), nullptr);
}
class ScopedSurfaceToTexture {
public:
ScopedSurfaceToTexture(scoped_refptr<DirectContextProvider> context_provider,
......@@ -350,33 +323,6 @@ SkiaOutputSurfaceImplOnGpu::SkiaOutputSurfaceImplOnGpu(
InitializeForGLWithGpuService(gpu_service);
}
SkiaOutputSurfaceImplOnGpu::SkiaOutputSurfaceImplOnGpu(
gpu::CommandBufferTaskExecutor* task_executor,
scoped_refptr<gl::GLSurface> gl_surface,
scoped_refptr<gpu::SharedContextState> shared_context_state,
gpu::SequenceId sequence_id,
const RendererSettings& renderer_settings,
const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback,
const BufferPresentedCallback& buffer_presented_callback,
const ContextLostCallback& context_lost_callback)
: SkiaOutputSurfaceImplOnGpu(
gpu::kNullSurfaceHandle,
CreateFeatureInfo(task_executor),
task_executor->mailbox_manager(),
CreateSyncPointClientState(task_executor, sequence_id),
CreateSharedImageRepresentationFactory(task_executor),
nullptr /* gr_shader_cache */,
nullptr /* vulkan_context_provider */,
renderer_settings,
did_swap_buffer_complete_callback,
buffer_presented_callback,
context_lost_callback) {
DCHECK(!is_using_vulkan());
gl_surface_ = std::move(gl_surface);
context_state_ = std::move(shared_context_state);
InitializeForGL();
}
SkiaOutputSurfaceImplOnGpu::~SkiaOutputSurfaceImplOnGpu() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
......
......@@ -44,7 +44,6 @@ class GLSurface;
}
namespace gpu {
class CommandBufferTaskExecutor;
class SyncPointClientState;
class SharedImageRepresentationSkia;
}
......@@ -98,15 +97,6 @@ class SkiaOutputSurfaceImplOnGpu : public gpu::ImageTransportSurfaceDelegate {
const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback,
const BufferPresentedCallback& buffer_presented_callback,
const ContextLostCallback& context_lost_callback);
SkiaOutputSurfaceImplOnGpu(
gpu::CommandBufferTaskExecutor* task_executor,
scoped_refptr<gl::GLSurface> gl_surface,
scoped_refptr<gpu::SharedContextState> shared_context_state,
gpu::SequenceId sequence_id,
const RendererSettings& renderer_settings_,
const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback,
const BufferPresentedCallback& buffer_presented_callback,
const ContextLostCallback& context_lost_callback);
~SkiaOutputSurfaceImplOnGpu() override;
......
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