Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(508)

Side by Side Diff: android_webview/browser/render_thread_manager.h

Issue 1911433002: Refactor BrowserViewRenderer-RenderThreadManager relationship. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test comments; delete hardware renderer immediately when we change compositor_frame_consumer_ Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_ 5 #ifndef ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_
6 #define ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_ 6 #define ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "android_webview/browser/compositor_frame_consumer.h"
10 #include "android_webview/browser/gl_view_renderer_manager.h" 11 #include "android_webview/browser/gl_view_renderer_manager.h"
11 #include "android_webview/browser/parent_compositor_draw_constraints.h" 12 #include "android_webview/browser/parent_compositor_draw_constraints.h"
12 #include "base/cancelable_callback.h" 13 #include "base/cancelable_callback.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
15 #include "base/single_thread_task_runner.h" 16 #include "base/single_thread_task_runner.h"
16 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
17 #include "cc/output/compositor_frame_ack.h" 18 #include "cc/output/compositor_frame_ack.h"
18 #include "ui/gfx/geometry/rect.h" 19 #include "ui/gfx/geometry/rect.h"
19 #include "ui/gfx/geometry/vector2d.h" 20 #include "ui/gfx/geometry/vector2d.h"
20 21
21 struct AwDrawGLInfo; 22 struct AwDrawGLInfo;
22 namespace android_webview { 23 namespace android_webview {
23 24
24 namespace internal { 25 namespace internal {
25 class RequestInvokeGLTracker; 26 class RequestInvokeGLTracker;
26 } 27 }
27 28
28 class RenderThreadManagerClient; 29 class RenderThreadManagerClient;
30 class CompositorFrameProducer;
29 class ChildFrame; 31 class ChildFrame;
30 class HardwareRenderer; 32 class HardwareRenderer;
31 class InsideHardwareReleaseReset; 33 class InsideHardwareReleaseReset;
32 34
33 // This class is used to pass data between UI thread and RenderThread. 35 // This class is used to pass data between UI thread and RenderThread.
34 class RenderThreadManager { 36 class RenderThreadManager : public CompositorFrameConsumer {
35 public: 37 public:
36 struct ReturnedResources {
37 ReturnedResources();
38 ~ReturnedResources();
39
40 uint32_t output_surface_id;
41 cc::ReturnedResourceArray resources;
42 };
43 using ReturnedResourcesMap = std::map<uint32_t, ReturnedResources>;
44
45 RenderThreadManager( 38 RenderThreadManager(
46 RenderThreadManagerClient* client, 39 RenderThreadManagerClient* client,
47 const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop); 40 const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop);
48 ~RenderThreadManager(); 41 ~RenderThreadManager();
49 42
50 // This function can be called from any thread. 43 // This function can be called from any thread.
51 void ClientRequestInvokeGL(bool for_idle); 44 void ClientRequestInvokeGL(bool for_idle);
52 45
53 // UI thread methods. 46 // CompositorFrameConsumer methods.
54 void SetScrollOffsetOnUI(gfx::Vector2d scroll_offset); 47 void SetCompositorFrameProducer(
55 void SetFrameOnUI(std::unique_ptr<ChildFrame> frame); 48 CompositorFrameProducer* compositor_frame_producer) override;
56 void InitializeHardwareDrawIfNeededOnUI(); 49 void SetScrollOffsetOnUI(gfx::Vector2d scroll_offset) override;
57 ParentCompositorDrawConstraints GetParentDrawConstraintsOnUI() const; 50 void SetFrameOnUI(std::unique_ptr<ChildFrame> frame) override;
58 void SwapReturnedResourcesOnUI(ReturnedResourcesMap* returned_resource_map); 51 void InitializeHardwareDrawIfNeededOnUI() override;
59 bool ReturnedResourcesEmptyOnUI() const; 52 ParentCompositorDrawConstraints GetParentDrawConstraintsOnUI() const override;
60 std::unique_ptr<ChildFrame> PassUncommittedFrameOnUI(); 53 void SwapReturnedResourcesOnUI(
61 bool HasFrameOnUI() const; 54 ReturnedResourcesMap* returned_resource_map) override;
62 void DeleteHardwareRendererOnUI(); 55 bool ReturnedResourcesEmptyOnUI() const override;
56 std::unique_ptr<ChildFrame> PassUncommittedFrameOnUI() override;
57 bool HasFrameOnUI() const override;
58 void DeleteHardwareRendererOnUI() override;
63 59
64 // RT thread methods. 60 // RT thread methods.
65 gfx::Vector2d GetScrollOffsetOnRT(); 61 gfx::Vector2d GetScrollOffsetOnRT();
66 std::unique_ptr<ChildFrame> PassFrameOnRT(); 62 std::unique_ptr<ChildFrame> PassFrameOnRT();
67 void DrawGL(AwDrawGLInfo* draw_info); 63 void DrawGL(AwDrawGLInfo* draw_info);
68 void PostExternalDrawConstraintsToChildCompositorOnRT( 64 void PostExternalDrawConstraintsToChildCompositorOnRT(
69 const ParentCompositorDrawConstraints& parent_draw_constraints); 65 const ParentCompositorDrawConstraints& parent_draw_constraints);
70 void InsertReturnedResourcesOnRT(const cc::ReturnedResourceArray& resources, 66 void InsertReturnedResourcesOnRT(const cc::ReturnedResourceArray& resources,
71 uint32_t compositor_id, 67 uint32_t compositor_id,
72 uint32_t output_surface_id); 68 uint32_t output_surface_id);
(...skipping 17 matching lines...) Expand all
90 // UI thread methods. 86 // UI thread methods.
91 void ResetRequestInvokeGLCallback(); 87 void ResetRequestInvokeGLCallback();
92 void ClientRequestInvokeGLOnUI(); 88 void ClientRequestInvokeGLOnUI();
93 void UpdateParentDrawConstraintsOnUI(); 89 void UpdateParentDrawConstraintsOnUI();
94 bool IsInsideHardwareRelease() const; 90 bool IsInsideHardwareRelease() const;
95 void SetInsideHardwareRelease(bool inside); 91 void SetInsideHardwareRelease(bool inside);
96 92
97 // Accessed by UI thread. 93 // Accessed by UI thread.
98 scoped_refptr<base::SingleThreadTaskRunner> ui_loop_; 94 scoped_refptr<base::SingleThreadTaskRunner> ui_loop_;
99 RenderThreadManagerClient* const client_; 95 RenderThreadManagerClient* const client_;
96 CompositorFrameProducer* compositor_frame_producer_;
100 base::WeakPtr<RenderThreadManager> ui_thread_weak_ptr_; 97 base::WeakPtr<RenderThreadManager> ui_thread_weak_ptr_;
101 base::CancelableClosure request_draw_gl_cancelable_closure_; 98 base::CancelableClosure request_draw_gl_cancelable_closure_;
102 99
103 // Accessed by RT thread. 100 // Accessed by RT thread.
104 std::unique_ptr<HardwareRenderer> hardware_renderer_; 101 std::unique_ptr<HardwareRenderer> hardware_renderer_;
105 102
106 // This is accessed by both UI and RT now. TODO(hush): move to RT only. 103 // This is accessed by both UI and RT now. TODO(hush): move to RT only.
107 GLViewRendererManager::Key renderer_manager_key_; 104 GLViewRendererManager::Key renderer_manager_key_;
108 105
109 // Accessed by both UI and RT thread. 106 // Accessed by both UI and RT thread.
110 mutable base::Lock lock_; 107 mutable base::Lock lock_;
111 bool hardware_renderer_has_frame_; 108 bool hardware_renderer_has_frame_;
112 gfx::Vector2d scroll_offset_; 109 gfx::Vector2d scroll_offset_;
113 std::unique_ptr<ChildFrame> child_frame_; 110 std::unique_ptr<ChildFrame> child_frame_;
114 bool inside_hardware_release_; 111 bool inside_hardware_release_;
115 ParentCompositorDrawConstraints parent_draw_constraints_; 112 ParentCompositorDrawConstraints parent_draw_constraints_;
116 ReturnedResourcesMap returned_resources_map_; 113 ReturnedResourcesMap returned_resources_map_;
117 base::Closure request_draw_gl_closure_; 114 base::Closure request_draw_gl_closure_;
118 115
119 base::WeakPtrFactory<RenderThreadManager> weak_factory_on_ui_thread_; 116 base::WeakPtrFactory<RenderThreadManager> weak_factory_on_ui_thread_;
120 117
121 DISALLOW_COPY_AND_ASSIGN(RenderThreadManager); 118 DISALLOW_COPY_AND_ASSIGN(RenderThreadManager);
122 }; 119 };
123 120
124 } // namespace android_webview 121 } // namespace android_webview
125 122
126 #endif // ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_ 123 #endif // ANDROID_WEBVIEW_BROWSER_RENDER_THREAD_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698