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