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/parent_compositor_draw_constraints.h"
9 #include "base/cancelable_callback.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/message_loop/message_loop_proxy.h"
12 #include "base/synchronization/lock.h"
13 #include "cc/output/compositor_frame.h"
14 #include "cc/output/compositor_frame_ack.h"
15 #include "ui/gfx/geometry/rect.h"
16 #include "ui/gfx/geometry/vector2d.h"
19 class CompositorFrameAck
;
23 class GLInProcessContext
;
26 namespace android_webview
{
29 class RequestDrawGLTracker
;
32 class BrowserViewRendererClient
;
33 class InsideHardwareReleaseReset
;
35 // Set by BrowserViewRenderer and read by HardwareRenderer.
37 gfx::Vector2d scroll_offset
;
40 cc::CompositorFrame frame
;
46 // This class is used to pass data between UI thread and RenderThread.
47 class SharedRendererState
{
49 SharedRendererState(scoped_refptr
<base::MessageLoopProxy
> ui_loop
,
50 BrowserViewRendererClient
* client
);
51 ~SharedRendererState();
53 void ClientRequestDrawGL();
54 void DidDrawGLProcess();
56 void SetDrawGLInput(scoped_ptr
<DrawGLInput
> input
);
57 scoped_ptr
<DrawGLInput
> PassDrawGLInput();
59 bool IsInsideHardwareRelease() const;
60 void UpdateDrawConstraints(
61 const ParentCompositorDrawConstraints
& parent_draw_constraints
);
62 void PostExternalDrawConstraintsToChildCompositor(
63 const ParentCompositorDrawConstraints
& parent_draw_constraints
);
65 const ParentCompositorDrawConstraints
ParentDrawConstraints() const;
67 void SetSharedContext(gpu::GLInProcessContext
* context
);
68 gpu::GLInProcessContext
* GetSharedContext() const;
70 void InsertReturnedResources(const cc::ReturnedResourceArray
& resources
);
71 void SwapReturnedResources(cc::ReturnedResourceArray
* resources
);
72 bool ReturnedResourcesEmpty() const;
75 friend class InsideHardwareReleaseReset
;
76 friend class internal::RequestDrawGLTracker
;
78 void ResetRequestDrawGLCallback();
79 void ClientRequestDrawGLOnUIThread();
80 void UpdateParentDrawConstraintsOnUIThread();
81 void SetInsideHardwareRelease(bool inside
);
83 scoped_refptr
<base::MessageLoopProxy
> ui_loop_
;
84 BrowserViewRendererClient
* client_on_ui_
;
85 base::WeakPtrFactory
<SharedRendererState
> weak_factory_on_ui_thread_
;
86 base::WeakPtr
<SharedRendererState
> ui_thread_weak_ptr_
;
87 base::CancelableClosure request_draw_gl_cancelable_closure_
;
89 // Accessed by both UI and RT thread.
90 mutable base::Lock lock_
;
91 scoped_ptr
<DrawGLInput
> draw_gl_input_
;
92 bool inside_hardware_release_
;
93 ParentCompositorDrawConstraints parent_draw_constraints_
;
94 gpu::GLInProcessContext
* share_context_
;
95 cc::ReturnedResourceArray returned_resources_
;
96 base::Closure request_draw_gl_closure_
;
98 DISALLOW_COPY_AND_ASSIGN(SharedRendererState
);
101 class InsideHardwareReleaseReset
{
103 explicit InsideHardwareReleaseReset(
104 SharedRendererState
* shared_renderer_state
);
105 ~InsideHardwareReleaseReset();
108 SharedRendererState
* shared_renderer_state_
;
110 DISALLOW_COPY_AND_ASSIGN(InsideHardwareReleaseReset
);
113 } // namespace android_webview
115 #endif // ANDROID_WEBVIEW_BROWSER_SHARED_RENDERER_STATE_H_