blob: f414632d1a527447b230865cc2fd3a23fbe8f265 [file] [log] [blame]
// 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 ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_
#define ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_
#include "components/viz/service/display_embedder/skia_output_surface_dependency.h"
#include "gpu/command_buffer/service/shared_context_state.h"
#include "gpu/config/gpu_driver_bug_workarounds.h"
namespace android_webview {
class TaskQueueWebView;
class GpuServiceWebView;
// Implementation for access to gpu objects and task queue for WebView.
class SkiaOutputSurfaceDependencyWebView
: public viz::SkiaOutputSurfaceDependency {
public:
SkiaOutputSurfaceDependencyWebView(
TaskQueueWebView* task_queue,
GpuServiceWebView* gpu_service,
gpu::SharedContextState* shared_context_state,
gl::GLSurface* gl_surface);
~SkiaOutputSurfaceDependencyWebView() override;
std::unique_ptr<gpu::SingleTaskSequence> CreateSequence() override;
gpu::SharedImageManager* GetSharedImageManager() override;
gpu::SyncPointManager* GetSyncPointManager() override;
const gpu::GpuDriverBugWorkarounds& GetGpuDriverBugWorkarounds() override;
scoped_refptr<gpu::SharedContextState> GetSharedContextState() override;
gpu::raster::GrShaderCache* GetGrShaderCache() override;
viz::VulkanContextProvider* GetVulkanContextProvider() override;
viz::DawnContextProvider* GetDawnContextProvider() override;
const gpu::GpuPreferences& GetGpuPreferences() const override;
const gpu::GpuFeatureInfo& GetGpuFeatureInfo() override;
gpu::MailboxManager* GetMailboxManager() override;
gpu::ImageFactory* GetGpuImageFactory() override;
void ScheduleGrContextCleanup() override;
void ScheduleDelayedGPUTaskFromGPUThread(base::OnceClosure task) override;
void PostTaskToClientThread(base::OnceClosure closure) override;
bool IsOffscreen() override;
gpu::SurfaceHandle GetSurfaceHandle() override;
scoped_refptr<gl::GLSurface> CreateGLSurface(
base::WeakPtr<gpu::ImageTransportSurfaceDelegate> stub,
gl::GLSurfaceFormat format) override;
base::ScopedClosureRunner CacheGLSurface(gl::GLSurface* surface) override;
void RegisterDisplayContext(gpu::DisplayContext* display_context) override;
void UnregisterDisplayContext(gpu::DisplayContext* display_context) override;
void DidLoseContext(bool offscreen,
gpu::error::ContextLostReason reason,
const GURL& active_url) override;
base::TimeDelta GetGpuBlockedTimeSinceLastSwap() override;
bool NeedsSupportForExternalStencil() override;
private:
gl::GLSurface* const gl_surface_;
TaskQueueWebView* task_queue_;
GpuServiceWebView* gpu_service_;
gpu::GpuDriverBugWorkarounds workarounds_;
gpu::SharedContextState* const shared_context_state_;
DISALLOW_COPY_AND_ASSIGN(SkiaOutputSurfaceDependencyWebView);
};
} // namespace android_webview
#endif // ANDROID_WEBVIEW_BROWSER_GFX_SKIA_OUTPUT_SURFACE_DEPENDENCY_WEBVIEW_H_