1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ANDROID_WEBVIEW_BROWSER_GFX_HARDWARE_RENDERER_VIZ_H_ 6 #define ANDROID_WEBVIEW_BROWSER_GFX_HARDWARE_RENDERER_VIZ_H_ 7 8 #include <memory> 9 10 #include "android_webview/browser/gfx/hardware_renderer.h" 11 #include "android_webview/browser/gfx/output_surface_provider_webview.h" 12 #include "android_webview/browser/gfx/root_frame_sink.h" 13 #include "base/macros.h" 14 #include "base/threading/thread_checker.h" 15 #include "components/viz/common/surfaces/frame_sink_id.h" 16 17 namespace android_webview { 18 19 class AwVulkanContextProvider; 20 21 class HardwareRendererViz : public HardwareRenderer { 22 public: 23 HardwareRendererViz(RenderThreadManager* state, 24 RootFrameSinkGetter root_frame_sink_getter, 25 AwVulkanContextProvider* context_provider); 26 ~HardwareRendererViz() override; 27 28 // HardwareRenderer overrides. 29 void DrawAndSwap(HardwareRendererDrawParams* params) override; 30 31 private: 32 class OnViz; 33 34 void InitializeOnViz(RootFrameSinkGetter root_frame_sink_getter); 35 void DestroyOnViz(); 36 bool IsUsingVulkan() const; 37 38 const bool viz_frame_submission_; 39 viz::SurfaceId surface_id_; 40 41 // Used to create viz::OutputSurface and gl::GLSurface 42 OutputSurfaceProviderWebview output_surface_provider_; 43 44 std::unique_ptr<viz::ParentLocalSurfaceIdAllocator> 45 renderer_root_local_surface_id_allocator_; 46 uint32_t layer_tree_frame_sink_id_ = 0u; 47 viz::LocalSurfaceId renderer_root_local_surface_id_; 48 float device_scale_factor_ = 1.0f; 49 gfx::Size frame_size_; 50 51 // These are accessed on the viz thread. 52 std::unique_ptr<OnViz> on_viz_; 53 54 THREAD_CHECKER(render_thread_checker_); 55 56 DISALLOW_COPY_AND_ASSIGN(HardwareRendererViz); 57 }; 58 59 } // namespace android_webview 60 61 #endif // ANDROID_WEBVIEW_BROWSER_GFX_HARDWARE_RENDERER_VIZ_H_ 62