OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "content/browser/android/in_process/synchronous_compositor_output_surfa
ce.h" | 5 #include "content/browser/android/in_process/synchronous_compositor_output_surfa
ce.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "cc/output/begin_frame_args.h" | 9 #include "cc/output/begin_frame_args.h" |
10 #include "cc/output/compositor_frame.h" | 10 #include "cc/output/compositor_frame.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 void SynchronousCompositorOutputSurface::ReleaseHwDraw() { | 158 void SynchronousCompositorOutputSurface::ReleaseHwDraw() { |
159 DCHECK(CalledOnValidThread()); | 159 DCHECK(CalledOnValidThread()); |
160 cc::OutputSurface::ReleaseGL(); | 160 cc::OutputSurface::ReleaseGL(); |
161 } | 161 } |
162 | 162 |
163 scoped_ptr<cc::CompositorFrame> | 163 scoped_ptr<cc::CompositorFrame> |
164 SynchronousCompositorOutputSurface::DemandDrawHw( | 164 SynchronousCompositorOutputSurface::DemandDrawHw( |
165 gfx::Size surface_size, | 165 gfx::Size surface_size, |
166 const gfx::Transform& transform, | 166 const gfx::Transform& transform, |
167 gfx::Rect viewport, | 167 gfx::Rect viewport, |
168 gfx::Rect clip) { | 168 gfx::Rect clip, |
| 169 gfx::Rect viewport_rect_for_tile_priority, |
| 170 const gfx::Transform& transform_for_tile_priority) { |
169 DCHECK(CalledOnValidThread()); | 171 DCHECK(CalledOnValidThread()); |
170 DCHECK(HasClient()); | 172 DCHECK(HasClient()); |
171 DCHECK(context_provider_); | 173 DCHECK(context_provider_); |
172 | 174 |
173 surface_size_ = surface_size; | 175 surface_size_ = surface_size; |
174 InvokeComposite(transform, viewport, clip, true); | 176 InvokeComposite(transform, |
| 177 viewport, |
| 178 clip, |
| 179 viewport_rect_for_tile_priority, |
| 180 transform_for_tile_priority, |
| 181 true); |
175 | 182 |
176 return frame_holder_.Pass(); | 183 return frame_holder_.Pass(); |
177 } | 184 } |
178 | 185 |
179 scoped_ptr<cc::CompositorFrame> | 186 scoped_ptr<cc::CompositorFrame> |
180 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { | 187 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { |
181 DCHECK(CalledOnValidThread()); | 188 DCHECK(CalledOnValidThread()); |
182 DCHECK(canvas); | 189 DCHECK(canvas); |
183 DCHECK(!current_sw_canvas_); | 190 DCHECK(!current_sw_canvas_); |
184 base::AutoReset<SkCanvas*> canvas_resetter(¤t_sw_canvas_, canvas); | 191 base::AutoReset<SkCanvas*> canvas_resetter(¤t_sw_canvas_, canvas); |
185 | 192 |
186 SkIRect canvas_clip; | 193 SkIRect canvas_clip; |
187 canvas->getClipDeviceBounds(&canvas_clip); | 194 canvas->getClipDeviceBounds(&canvas_clip); |
188 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip); | 195 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip); |
189 | 196 |
190 gfx::Transform transform(gfx::Transform::kSkipInitialization); | 197 gfx::Transform transform(gfx::Transform::kSkipInitialization); |
191 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4. | 198 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4. |
192 | 199 |
193 surface_size_ = gfx::Size(canvas->getDeviceSize().width(), | 200 surface_size_ = gfx::Size(canvas->getDeviceSize().width(), |
194 canvas->getDeviceSize().height()); | 201 canvas->getDeviceSize().height()); |
195 | 202 |
196 InvokeComposite(transform, clip, clip, false); | 203 // Resourceless software draw does not need viewport_for_tiling. |
| 204 gfx::Rect empty; |
| 205 InvokeComposite(transform, clip, clip, empty, gfx::Transform(), false); |
197 | 206 |
198 return frame_holder_.Pass(); | 207 return frame_holder_.Pass(); |
199 } | 208 } |
200 | 209 |
201 void SynchronousCompositorOutputSurface::InvokeComposite( | 210 void SynchronousCompositorOutputSurface::InvokeComposite( |
202 const gfx::Transform& transform, | 211 const gfx::Transform& transform, |
203 gfx::Rect viewport, | 212 gfx::Rect viewport, |
204 gfx::Rect clip, | 213 gfx::Rect clip, |
| 214 gfx::Rect viewport_rect_for_tile_priority, |
| 215 gfx::Transform transform_for_tile_priority, |
205 bool hardware_draw) { | 216 bool hardware_draw) { |
206 DCHECK(!invoking_composite_); | 217 DCHECK(!invoking_composite_); |
207 DCHECK(!frame_holder_.get()); | 218 DCHECK(!frame_holder_.get()); |
208 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true); | 219 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true); |
209 | 220 |
210 gfx::Transform adjusted_transform = transform; | 221 gfx::Transform adjusted_transform = transform; |
211 AdjustTransform(&adjusted_transform, viewport); | 222 AdjustTransform(&adjusted_transform, viewport); |
212 SetExternalDrawConstraints( | 223 SetExternalDrawConstraints(adjusted_transform, |
213 adjusted_transform, viewport, clip, !hardware_draw); | 224 viewport, |
| 225 clip, |
| 226 viewport_rect_for_tile_priority, |
| 227 transform_for_tile_priority, |
| 228 !hardware_draw); |
214 SetNeedsRedrawRect(gfx::Rect(viewport.size())); | 229 SetNeedsRedrawRect(gfx::Rect(viewport.size())); |
215 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor()); | 230 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor()); |
216 | 231 |
217 // After software draws (which might move the viewport arbitrarily), restore | 232 // After software draws (which might move the viewport arbitrarily), restore |
218 // the previous hardware viewport to allow CC's tile manager to prioritize | 233 // the previous hardware viewport to allow CC's tile manager to prioritize |
219 // properly. | 234 // properly. |
220 if (hardware_draw) { | 235 if (hardware_draw) { |
221 cached_hw_transform_ = adjusted_transform; | 236 cached_hw_transform_ = adjusted_transform; |
222 cached_hw_viewport_ = viewport; | 237 cached_hw_viewport_ = viewport; |
223 cached_hw_clip_ = clip; | 238 cached_hw_clip_ = clip; |
| 239 cached_hw_viewport_rect_for_tile_priority_ = |
| 240 viewport_rect_for_tile_priority; |
| 241 cached_hw_transform_for_tile_priority_ = transform_for_tile_priority; |
224 } else { | 242 } else { |
225 bool resourceless_software_draw = false; | 243 bool resourceless_software_draw = false; |
226 SetExternalDrawConstraints(cached_hw_transform_, | 244 SetExternalDrawConstraints(cached_hw_transform_, |
227 cached_hw_viewport_, | 245 cached_hw_viewport_, |
228 cached_hw_clip_, | 246 cached_hw_clip_, |
| 247 cached_hw_viewport_rect_for_tile_priority_, |
| 248 cached_hw_transform_for_tile_priority_, |
229 resourceless_software_draw); | 249 resourceless_software_draw); |
230 } | 250 } |
231 | 251 |
232 if (frame_holder_.get()) | 252 if (frame_holder_.get()) |
233 client_->DidSwapBuffersComplete(); | 253 client_->DidSwapBuffersComplete(); |
234 | 254 |
235 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate(); | 255 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate(); |
236 if (delegate) | 256 if (delegate) |
237 delegate->SetContinuousInvalidate(needs_begin_frame_); | 257 delegate->SetContinuousInvalidate(needs_begin_frame_); |
238 } | 258 } |
(...skipping 27 matching lines...) Expand all Loading... |
266 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { | 286 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { |
267 return BrowserThread::CurrentlyOn(BrowserThread::UI); | 287 return BrowserThread::CurrentlyOn(BrowserThread::UI); |
268 } | 288 } |
269 | 289 |
270 SynchronousCompositorOutputSurfaceDelegate* | 290 SynchronousCompositorOutputSurfaceDelegate* |
271 SynchronousCompositorOutputSurface::GetDelegate() { | 291 SynchronousCompositorOutputSurface::GetDelegate() { |
272 return SynchronousCompositorImpl::FromRoutingID(routing_id_); | 292 return SynchronousCompositorImpl::FromRoutingID(routing_id_); |
273 } | 293 } |
274 | 294 |
275 } // namespace content | 295 } // namespace content |
OLD | NEW |