Battery Status API: add UMA logging for Linux.
[chromium-blink-merge.git] / android_webview / browser / shared_renderer_state.h
blob2245f73b21e79fd5fedd8c255d47c3563ed52e44
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"
18 namespace cc {
19 class CompositorFrameAck;
22 namespace gpu {
23 class GLInProcessContext;
26 namespace android_webview {
28 namespace internal {
29 class RequestDrawGLTracker;
32 class BrowserViewRendererClient;
33 class InsideHardwareReleaseReset;
35 // Set by BrowserViewRenderer and read by HardwareRenderer.
36 struct DrawGLInput {
37 gfx::Vector2d scroll_offset;
38 int width;
39 int height;
40 cc::CompositorFrame frame;
42 DrawGLInput();
43 ~DrawGLInput();
46 // This class is used to pass data between UI thread and RenderThread.
47 class SharedRendererState {
48 public:
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;
74 private:
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 {
102 public:
103 explicit InsideHardwareReleaseReset(
104 SharedRendererState* shared_renderer_state);
105 ~InsideHardwareReleaseReset();
107 private:
108 SharedRendererState* shared_renderer_state_;
110 DISALLOW_COPY_AND_ASSIGN(InsideHardwareReleaseReset);
113 } // namespace android_webview
115 #endif // ANDROID_WEBVIEW_BROWSER_SHARED_RENDERER_STATE_H_