exclude PluginsFieldTrialTest.NoPrefLeftBehind from valgrind bot
[chromium-blink-merge.git] / android_webview / browser / shared_renderer_state.h
blob8969cef49de9201e82cde010b1283a8fb20689b8
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.
5 #ifndef ANDROID_WEBVIEW_BROWSER_SHARED_RENDERER_STATE_H_
6 #define ANDROID_WEBVIEW_BROWSER_SHARED_RENDERER_STATE_H_
8 #include "android_webview/browser/gl_view_renderer_manager.h"
9 #include "android_webview/browser/parent_compositor_draw_constraints.h"
10 #include "base/cancelable_callback.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/single_thread_task_runner.h"
13 #include "base/synchronization/lock.h"
14 #include "cc/output/compositor_frame_ack.h"
15 #include "ui/gfx/geometry/rect.h"
16 #include "ui/gfx/geometry/vector2d.h"
18 struct AwDrawGLInfo;
20 namespace android_webview {
22 namespace internal {
23 class RequestDrawGLTracker;
26 class BrowserViewRenderer;
27 class ChildFrame;
28 class HardwareRenderer;
29 class InsideHardwareReleaseReset;
31 // This class is used to pass data between UI thread and RenderThread.
32 class SharedRendererState {
33 public:
34 SharedRendererState(
35 const scoped_refptr<base::SingleThreadTaskRunner>& ui_loop,
36 BrowserViewRenderer* browser_view_renderer);
37 ~SharedRendererState();
39 // This function can be called from any thread.
40 void ClientRequestDrawGL(bool for_idle);
42 // UI thread methods.
43 void SetScrollOffsetOnUI(gfx::Vector2d scroll_offset);
44 void SetCompositorFrameOnUI(scoped_ptr<ChildFrame> frame);
45 void InitializeHardwareDrawIfNeededOnUI();
46 void ReleaseHardwareDrawIfNeededOnUI();
47 ParentCompositorDrawConstraints GetParentDrawConstraintsOnUI() const;
48 void SwapReturnedResourcesOnUI(cc::ReturnedResourceArray* resources);
49 bool ReturnedResourcesEmptyOnUI() const;
50 scoped_ptr<ChildFrame> PassUncommittedFrameOnUI();
51 void DeleteHardwareRendererOnUI();
53 // RT thread methods.
54 gfx::Vector2d GetScrollOffsetOnRT();
55 scoped_ptr<ChildFrame> PassCompositorFrameOnRT();
56 void DrawGL(AwDrawGLInfo* draw_info);
57 void PostExternalDrawConstraintsToChildCompositorOnRT(
58 const ParentCompositorDrawConstraints& parent_draw_constraints);
59 void InsertReturnedResourcesOnRT(const cc::ReturnedResourceArray& resources);
61 private:
62 friend class internal::RequestDrawGLTracker;
63 class InsideHardwareReleaseReset {
64 public:
65 explicit InsideHardwareReleaseReset(
66 SharedRendererState* shared_renderer_state);
67 ~InsideHardwareReleaseReset();
69 private:
70 SharedRendererState* shared_renderer_state_;
73 // RT thread method.
74 void DidDrawGLProcess();
76 // UI thread methods.
77 void ResetRequestDrawGLCallback();
78 void ClientRequestDrawGLOnUI();
79 void UpdateParentDrawConstraintsOnUI();
80 bool IsInsideHardwareRelease() const;
81 void SetInsideHardwareRelease(bool inside);
82 void ReleaseCompositorResourcesIfNeededOnUI(bool release_hardware_draw);
84 // Accessed by UI thread.
85 scoped_refptr<base::SingleThreadTaskRunner> ui_loop_;
86 BrowserViewRenderer* browser_view_renderer_;
87 base::WeakPtr<SharedRendererState> ui_thread_weak_ptr_;
88 base::CancelableClosure request_draw_gl_cancelable_closure_;
90 // Accessed by RT thread.
91 scoped_ptr<HardwareRenderer> hardware_renderer_;
93 // This is accessed by both UI and RT now. TODO(hush): move to RT only.
94 GLViewRendererManager::Key renderer_manager_key_;
96 // Accessed by both UI and RT thread.
97 mutable base::Lock lock_;
98 gfx::Vector2d scroll_offset_;
99 scoped_ptr<ChildFrame> child_frame_;
100 bool inside_hardware_release_;
101 ParentCompositorDrawConstraints parent_draw_constraints_;
102 cc::ReturnedResourceArray returned_resources_;
103 base::Closure request_draw_gl_closure_;
105 base::WeakPtrFactory<SharedRendererState> weak_factory_on_ui_thread_;
107 DISALLOW_COPY_AND_ASSIGN(SharedRendererState);
110 } // namespace android_webview
112 #endif // ANDROID_WEBVIEW_BROWSER_SHARED_RENDERER_STATE_H_