OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 CC_OUTPUT_OUTPUT_SURFACE_H_ | 5 #ifndef CC_OUTPUT_OUTPUT_SURFACE_H_ |
6 #define CC_OUTPUT_OUTPUT_SURFACE_H_ | 6 #define CC_OUTPUT_OUTPUT_SURFACE_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
62 : delegated_rendering(false), | 62 : delegated_rendering(false), |
63 max_frames_pending(0), | 63 max_frames_pending(0), |
64 deferred_gl_initialization(false), | 64 deferred_gl_initialization(false), |
65 draw_and_swap_full_viewport_every_frame(false), | 65 draw_and_swap_full_viewport_every_frame(false), |
66 adjust_deadline_for_parent(true), | 66 adjust_deadline_for_parent(true), |
67 uses_default_gl_framebuffer(true) {} | 67 uses_default_gl_framebuffer(true) {} |
68 bool delegated_rendering; | 68 bool delegated_rendering; |
69 int max_frames_pending; | 69 int max_frames_pending; |
70 bool deferred_gl_initialization; | 70 bool deferred_gl_initialization; |
71 bool draw_and_swap_full_viewport_every_frame; | 71 bool draw_and_swap_full_viewport_every_frame; |
72 // This doesn't handle the <webview> case, but once BeginImplFrame is | 72 // This doesn't handle the <webview> case, but once BeginFrame is |
73 // supported natively, we shouldn't need adjust_deadline_for_parent. | 73 // supported natively, we shouldn't need adjust_deadline_for_parent. |
74 bool adjust_deadline_for_parent; | 74 bool adjust_deadline_for_parent; |
75 // Whether this output surface renders to the default OpenGL zero | 75 // Whether this output surface renders to the default OpenGL zero |
76 // framebuffer or to an offscreen framebuffer. | 76 // framebuffer or to an offscreen framebuffer. |
77 bool uses_default_gl_framebuffer; | 77 bool uses_default_gl_framebuffer; |
78 }; | 78 }; |
79 | 79 |
80 const Capabilities& capabilities() const { | 80 const Capabilities& capabilities() const { |
81 return capabilities_; | 81 return capabilities_; |
82 } | 82 } |
(...skipping 15 matching lines...) Expand all Loading... | |
98 // (namely Android WebView), this is called to determine whether the software | 98 // (namely Android WebView), this is called to determine whether the software |
99 // device should be used on the current frame. | 99 // device should be used on the current frame. |
100 virtual bool ForcedDrawToSoftwareDevice() const; | 100 virtual bool ForcedDrawToSoftwareDevice() const; |
101 | 101 |
102 // Called by the compositor on the compositor thread. This is a place where | 102 // Called by the compositor on the compositor thread. This is a place where |
103 // thread-specific data for the output surface can be initialized, since from | 103 // thread-specific data for the output surface can be initialized, since from |
104 // this point on the output surface will only be used on the compositor | 104 // this point on the output surface will only be used on the compositor |
105 // thread. | 105 // thread. |
106 virtual bool BindToClient(OutputSurfaceClient* client); | 106 virtual bool BindToClient(OutputSurfaceClient* client); |
107 | 107 |
108 void InitializeBeginImplFrameEmulation( | 108 void InitializeBeginFrameEmulation(base::SingleThreadTaskRunner* task_runner, |
109 base::SingleThreadTaskRunner* task_runner, | 109 bool throttle_frame_production, |
110 bool throttle_frame_production, | 110 base::TimeDelta interval); |
111 base::TimeDelta interval); | |
112 | 111 |
113 void SetMaxFramesPending(int max_frames_pending); | 112 void SetMaxFramesPending(int max_frames_pending); |
114 | 113 |
115 virtual void EnsureBackbuffer(); | 114 virtual void EnsureBackbuffer(); |
116 virtual void DiscardBackbuffer(); | 115 virtual void DiscardBackbuffer(); |
117 | 116 |
118 virtual void Reshape(const gfx::Size& size, float scale_factor); | 117 virtual void Reshape(const gfx::Size& size, float scale_factor); |
119 virtual gfx::Size SurfaceSize() const; | 118 virtual gfx::Size SurfaceSize() const; |
120 | 119 |
121 virtual void BindFramebuffer(); | 120 virtual void BindFramebuffer(); |
122 | 121 |
123 // The implementation may destroy or steal the contents of the CompositorFrame | 122 // The implementation may destroy or steal the contents of the CompositorFrame |
124 // passed in (though it will not take ownership of the CompositorFrame | 123 // passed in (though it will not take ownership of the CompositorFrame |
125 // itself). | 124 // itself). |
126 virtual void SwapBuffers(CompositorFrame* frame); | 125 virtual void SwapBuffers(CompositorFrame* frame); |
127 | 126 |
128 // Notifies frame-rate smoothness preference. If true, all non-critical | 127 // Notifies frame-rate smoothness preference. If true, all non-critical |
129 // processing should be stopped, or lowered in priority. | 128 // processing should be stopped, or lowered in priority. |
130 virtual void UpdateSmoothnessTakesPriority(bool prefer_smoothness) {} | 129 virtual void UpdateSmoothnessTakesPriority(bool prefer_smoothness) {} |
131 | 130 |
132 // Requests a BeginImplFrame notification from the output surface. The | 131 // Requests a BeginFrame notification from the output surface. The |
133 // notification will be delivered by calling | 132 // notification will be delivered by calling |
134 // OutputSurfaceClient::BeginImplFrame until the callback is disabled. | 133 // OutputSurfaceClient::BeginFrame until the callback is disabled. |
135 virtual void SetNeedsBeginImplFrame(bool enable); | 134 virtual void SetNeedsBeginFrame(bool enable); |
136 | 135 |
137 bool HasClient() { return !!client_; } | 136 bool HasClient() { return !!client_; } |
138 | 137 |
139 // Returns an estimate of the current GPU latency. When only a software | 138 // Returns an estimate of the current GPU latency. When only a software |
140 // device is present, returns 0. | 139 // device is present, returns 0. |
141 base::TimeDelta GpuLatencyEstimate(); | 140 base::TimeDelta GpuLatencyEstimate(); |
142 | 141 |
143 // Get the class capable of informing cc of hardware overlay capability. | 142 // Get the class capable of informing cc of hardware overlay capability. |
144 OverlayCandidateValidator* overlay_candidate_validator() const { | 143 OverlayCandidateValidator* overlay_candidate_validator() const { |
145 return overlay_candidate_validator_.get(); | 144 return overlay_candidate_validator_.get(); |
(...skipping 12 matching lines...) Expand all Loading... | |
158 void PostSwapBuffersComplete(); | 157 void PostSwapBuffersComplete(); |
159 | 158 |
160 struct OutputSurface::Capabilities capabilities_; | 159 struct OutputSurface::Capabilities capabilities_; |
161 scoped_refptr<ContextProvider> context_provider_; | 160 scoped_refptr<ContextProvider> context_provider_; |
162 scoped_ptr<SoftwareOutputDevice> software_device_; | 161 scoped_ptr<SoftwareOutputDevice> software_device_; |
163 scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_; | 162 scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_; |
164 gfx::Size surface_size_; | 163 gfx::Size surface_size_; |
165 float device_scale_factor_; | 164 float device_scale_factor_; |
166 | 165 |
167 // The FrameRateController is deprecated. | 166 // The FrameRateController is deprecated. |
168 // Platforms should move to native BeginImplFrames instead. | 167 // Platforms should move to native BeginFrames instead. |
169 void CommitVSyncParameters(base::TimeTicks timebase, | 168 void CommitVSyncParameters(base::TimeTicks timebase, |
170 base::TimeDelta interval); | 169 base::TimeDelta interval); |
171 virtual void FrameRateControllerTick(bool throttled, | 170 virtual void FrameRateControllerTick(bool throttled, |
172 const BeginFrameArgs& args) OVERRIDE; | 171 const BeginFrameArgs& args) OVERRIDE; |
173 scoped_ptr<FrameRateController> frame_rate_controller_; | 172 scoped_ptr<FrameRateController> frame_rate_controller_; |
174 int max_frames_pending_; | 173 int max_frames_pending_; |
175 int pending_swap_buffers_; | 174 int pending_swap_buffers_; |
176 bool needs_begin_impl_frame_; | 175 bool needs_begin_impl_frame_; |
177 bool client_ready_for_begin_impl_frame_; | |
178 | 176 |
179 // This stores a BeginImplFrame that we couldn't process immediately, | 177 // This stores a BeginFrame that we couldn't process immediately, |
180 // but might process retroactively in the near future. | 178 // but might process retroactively in the near future. |
181 BeginFrameArgs skipped_begin_impl_frame_args_; | 179 BeginFrameArgs skipped_begin_impl_frame_args_; |
Sami
2014/04/01 13:09:10
skipped_begin_frame_args_?
| |
182 | 180 |
183 // Forwarded to OutputSurfaceClient but threaded through OutputSurface | 181 // Forwarded to OutputSurfaceClient but threaded through OutputSurface |
184 // first so OutputSurface has a chance to update the FrameRateController | 182 // first so OutputSurface has a chance to update the FrameRateController |
185 void SetNeedsRedrawRect(const gfx::Rect& damage_rect); | 183 void SetNeedsRedrawRect(const gfx::Rect& damage_rect); |
186 void BeginImplFrame(const BeginFrameArgs& args); | 184 void BeginFrame(const BeginFrameArgs& args); |
187 void DidSwapBuffers(); | 185 void DidSwapBuffers(); |
188 void OnSwapBuffersComplete(); | 186 void OnSwapBuffersComplete(); |
189 void ReclaimResources(const CompositorFrameAck* ack); | 187 void ReclaimResources(const CompositorFrameAck* ack); |
190 void DidLoseOutputSurface(); | 188 void DidLoseOutputSurface(); |
191 void SetExternalStencilTest(bool enabled); | 189 void SetExternalStencilTest(bool enabled); |
192 void SetExternalDrawConstraints(const gfx::Transform& transform, | 190 void SetExternalDrawConstraints(const gfx::Transform& transform, |
193 const gfx::Rect& viewport, | 191 const gfx::Rect& viewport, |
194 const gfx::Rect& clip, | 192 const gfx::Rect& clip, |
195 bool valid_for_tile_management); | 193 bool valid_for_tile_management); |
196 | 194 |
197 // virtual for testing. | 195 // virtual for testing. |
198 virtual base::TimeTicks RetroactiveBeginImplFrameDeadline(); | 196 virtual base::TimeTicks RetroactiveBeginFrameDeadline(); |
199 virtual void PostCheckForRetroactiveBeginImplFrame(); | 197 virtual void PostCheckForRetroactiveBeginFrame(); |
200 void CheckForRetroactiveBeginImplFrame(); | 198 void CheckForRetroactiveBeginFrame(); |
201 | 199 |
202 private: | 200 private: |
203 OutputSurfaceClient* client_; | 201 OutputSurfaceClient* client_; |
204 | 202 |
205 void SetUpContext3d(); | 203 void SetUpContext3d(); |
206 void ResetContext3d(); | 204 void ResetContext3d(); |
207 void SetMemoryPolicy(const ManagedMemoryPolicy& policy); | 205 void SetMemoryPolicy(const ManagedMemoryPolicy& policy); |
208 void UpdateAndMeasureGpuLatency(); | 206 void UpdateAndMeasureGpuLatency(); |
209 | 207 |
210 // check_for_retroactive_begin_impl_frame_pending_ is used to avoid posting | 208 // check_for_retroactive_begin_impl_frame_pending_ is used to avoid posting |
211 // redundant checks for a retroactive BeginImplFrame. | 209 // redundant checks for a retroactive BeginFrame. |
212 bool check_for_retroactive_begin_impl_frame_pending_; | 210 bool check_for_retroactive_begin_impl_frame_pending_; |
213 | 211 |
214 bool external_stencil_test_enabled_; | 212 bool external_stencil_test_enabled_; |
215 | 213 |
216 base::WeakPtrFactory<OutputSurface> weak_ptr_factory_; | 214 base::WeakPtrFactory<OutputSurface> weak_ptr_factory_; |
217 | 215 |
218 std::deque<unsigned> available_gpu_latency_query_ids_; | 216 std::deque<unsigned> available_gpu_latency_query_ids_; |
219 std::deque<unsigned> pending_gpu_latency_query_ids_; | 217 std::deque<unsigned> pending_gpu_latency_query_ids_; |
220 RollingTimeDeltaHistory gpu_latency_history_; | 218 RollingTimeDeltaHistory gpu_latency_history_; |
221 | 219 |
222 DISALLOW_COPY_AND_ASSIGN(OutputSurface); | 220 DISALLOW_COPY_AND_ASSIGN(OutputSurface); |
223 }; | 221 }; |
224 | 222 |
225 } // namespace cc | 223 } // namespace cc |
226 | 224 |
227 #endif // CC_OUTPUT_OUTPUT_SURFACE_H_ | 225 #endif // CC_OUTPUT_OUTPUT_SURFACE_H_ |
OLD | NEW |