OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/single_thread_proxy.h" | 5 #include "cc/trees/single_thread_proxy.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "cc/debug/benchmark_instrumentation.h" | 9 #include "cc/debug/benchmark_instrumentation.h" |
10 #include "cc/output/context_provider.h" | 10 #include "cc/output/context_provider.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); | 49 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); |
50 } | 50 } |
51 | 51 |
52 SingleThreadProxy::~SingleThreadProxy() { | 52 SingleThreadProxy::~SingleThreadProxy() { |
53 TRACE_EVENT0("cc", "SingleThreadProxy::~SingleThreadProxy"); | 53 TRACE_EVENT0("cc", "SingleThreadProxy::~SingleThreadProxy"); |
54 DCHECK(Proxy::IsMainThread()); | 54 DCHECK(Proxy::IsMainThread()); |
55 // Make sure Stop() got called or never Started. | 55 // Make sure Stop() got called or never Started. |
56 DCHECK(!layer_tree_host_impl_); | 56 DCHECK(!layer_tree_host_impl_); |
57 } | 57 } |
58 | 58 |
59 bool SingleThreadProxy::CompositeAndReadback(void* pixels, gfx::Rect rect) { | 59 bool SingleThreadProxy::CompositeAndReadback(void* pixels, |
| 60 const gfx::Rect& rect) { |
60 TRACE_EVENT0("cc", "SingleThreadProxy::CompositeAndReadback"); | 61 TRACE_EVENT0("cc", "SingleThreadProxy::CompositeAndReadback"); |
61 DCHECK(Proxy::IsMainThread()); | 62 DCHECK(Proxy::IsMainThread()); |
62 | 63 |
63 gfx::Rect device_viewport_damage_rect = rect; | 64 gfx::Rect device_viewport_damage_rect = rect; |
64 | 65 |
65 LayerTreeHostImpl::FrameData frame; | 66 LayerTreeHostImpl::FrameData frame; |
66 if (!CommitAndComposite(gfx::FrameTime::Now(), | 67 if (!CommitAndComposite(gfx::FrameTime::Now(), |
67 device_viewport_damage_rect, | 68 device_viewport_damage_rect, |
68 true, // for_readback | 69 true, // for_readback |
69 &frame)) | 70 &frame)) |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 } | 236 } |
236 layer_tree_host_->CommitComplete(); | 237 layer_tree_host_->CommitComplete(); |
237 next_frame_is_newly_committed_frame_ = true; | 238 next_frame_is_newly_committed_frame_ = true; |
238 } | 239 } |
239 | 240 |
240 void SingleThreadProxy::SetNeedsCommit() { | 241 void SingleThreadProxy::SetNeedsCommit() { |
241 DCHECK(Proxy::IsMainThread()); | 242 DCHECK(Proxy::IsMainThread()); |
242 client_->ScheduleComposite(); | 243 client_->ScheduleComposite(); |
243 } | 244 } |
244 | 245 |
245 void SingleThreadProxy::SetNeedsRedraw(gfx::Rect damage_rect) { | 246 void SingleThreadProxy::SetNeedsRedraw(const gfx::Rect& damage_rect) { |
246 SetNeedsRedrawRectOnImplThread(damage_rect); | 247 SetNeedsRedrawRectOnImplThread(damage_rect); |
247 client_->ScheduleComposite(); | 248 client_->ScheduleComposite(); |
248 } | 249 } |
249 | 250 |
250 void SingleThreadProxy::SetNextCommitWaitsForActivation() { | 251 void SingleThreadProxy::SetNextCommitWaitsForActivation() { |
251 // There is no activation here other than commit. So do nothing. | 252 // There is no activation here other than commit. So do nothing. |
252 } | 253 } |
253 | 254 |
254 void SingleThreadProxy::SetDeferCommits(bool defer_commits) { | 255 void SingleThreadProxy::SetDeferCommits(bool defer_commits) { |
255 // Thread-only feature. | 256 // Thread-only feature. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 | 291 |
291 void SingleThreadProxy::SetNeedsRedrawOnImplThread() { | 292 void SingleThreadProxy::SetNeedsRedrawOnImplThread() { |
292 client_->ScheduleComposite(); | 293 client_->ScheduleComposite(); |
293 } | 294 } |
294 | 295 |
295 void SingleThreadProxy::SetNeedsManageTilesOnImplThread() { | 296 void SingleThreadProxy::SetNeedsManageTilesOnImplThread() { |
296 // Thread-only/Impl-side-painting-only feature. | 297 // Thread-only/Impl-side-painting-only feature. |
297 NOTREACHED(); | 298 NOTREACHED(); |
298 } | 299 } |
299 | 300 |
300 void SingleThreadProxy::SetNeedsRedrawRectOnImplThread(gfx::Rect damage_rect) { | 301 void SingleThreadProxy::SetNeedsRedrawRectOnImplThread( |
| 302 const gfx::Rect& damage_rect) { |
301 // TODO(brianderson): Once we move render_widget scheduling into this class, | 303 // TODO(brianderson): Once we move render_widget scheduling into this class, |
302 // we can treat redraw requests more efficiently than CommitAndRedraw | 304 // we can treat redraw requests more efficiently than CommitAndRedraw |
303 // requests. | 305 // requests. |
304 layer_tree_host_impl_->SetViewportDamage(damage_rect); | 306 layer_tree_host_impl_->SetViewportDamage(damage_rect); |
305 SetNeedsCommit(); | 307 SetNeedsCommit(); |
306 } | 308 } |
307 | 309 |
308 void SingleThreadProxy::DidInitializeVisibleTileOnImplThread() { | 310 void SingleThreadProxy::DidInitializeVisibleTileOnImplThread() { |
309 // Impl-side painting only. | 311 // Impl-side painting only. |
310 NOTREACHED(); | 312 NOTREACHED(); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 DebugScopedSetImplThread impl(this); | 420 DebugScopedSetImplThread impl(this); |
419 if (layer_tree_host_impl_->renderer()) { | 421 if (layer_tree_host_impl_->renderer()) { |
420 DCHECK(!layer_tree_host_->output_surface_lost()); | 422 DCHECK(!layer_tree_host_->output_surface_lost()); |
421 layer_tree_host_impl_->renderer()->DoNoOp(); | 423 layer_tree_host_impl_->renderer()->DoNoOp(); |
422 } | 424 } |
423 } | 425 } |
424 } | 426 } |
425 | 427 |
426 bool SingleThreadProxy::CommitAndComposite( | 428 bool SingleThreadProxy::CommitAndComposite( |
427 base::TimeTicks frame_begin_time, | 429 base::TimeTicks frame_begin_time, |
428 gfx::Rect device_viewport_damage_rect, | 430 const gfx::Rect& device_viewport_damage_rect, |
429 bool for_readback, | 431 bool for_readback, |
430 LayerTreeHostImpl::FrameData* frame) { | 432 LayerTreeHostImpl::FrameData* frame) { |
431 DCHECK(Proxy::IsMainThread()); | 433 DCHECK(Proxy::IsMainThread()); |
432 | 434 |
433 if (!layer_tree_host_->InitializeOutputSurfaceIfNeeded()) | 435 if (!layer_tree_host_->InitializeOutputSurfaceIfNeeded()) |
434 return false; | 436 return false; |
435 | 437 |
436 layer_tree_host_->AnimateLayers(frame_begin_time); | 438 layer_tree_host_->AnimateLayers(frame_begin_time); |
437 | 439 |
438 if (PrioritizedResourceManager* contents_texture_manager = | 440 if (PrioritizedResourceManager* contents_texture_manager = |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 | 483 |
482 void SingleThreadProxy::UpdateBackgroundAnimateTicking() { | 484 void SingleThreadProxy::UpdateBackgroundAnimateTicking() { |
483 DCHECK(Proxy::IsImplThread()); | 485 DCHECK(Proxy::IsImplThread()); |
484 layer_tree_host_impl_->UpdateBackgroundAnimateTicking( | 486 layer_tree_host_impl_->UpdateBackgroundAnimateTicking( |
485 !ShouldComposite() && layer_tree_host_impl_->active_tree()->root_layer()); | 487 !ShouldComposite() && layer_tree_host_impl_->active_tree()->root_layer()); |
486 } | 488 } |
487 | 489 |
488 bool SingleThreadProxy::DoComposite( | 490 bool SingleThreadProxy::DoComposite( |
489 scoped_refptr<ContextProvider> offscreen_context_provider, | 491 scoped_refptr<ContextProvider> offscreen_context_provider, |
490 base::TimeTicks frame_begin_time, | 492 base::TimeTicks frame_begin_time, |
491 gfx::Rect device_viewport_damage_rect, | 493 const gfx::Rect& device_viewport_damage_rect, |
492 bool for_readback, | 494 bool for_readback, |
493 LayerTreeHostImpl::FrameData* frame) { | 495 LayerTreeHostImpl::FrameData* frame) { |
494 DCHECK(!layer_tree_host_->output_surface_lost()); | 496 DCHECK(!layer_tree_host_->output_surface_lost()); |
495 | 497 |
496 bool lost_output_surface = false; | 498 bool lost_output_surface = false; |
497 { | 499 { |
498 DebugScopedSetImplThread impl(this); | 500 DebugScopedSetImplThread impl(this); |
499 base::AutoReset<bool> mark_inside(&inside_draw_, true); | 501 base::AutoReset<bool> mark_inside(&inside_draw_, true); |
500 | 502 |
501 layer_tree_host_impl_->SetOffscreenContextProvider( | 503 layer_tree_host_impl_->SetOffscreenContextProvider( |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 void SingleThreadProxy::DidSwapFrame() { | 547 void SingleThreadProxy::DidSwapFrame() { |
546 if (next_frame_is_newly_committed_frame_) { | 548 if (next_frame_is_newly_committed_frame_) { |
547 next_frame_is_newly_committed_frame_ = false; | 549 next_frame_is_newly_committed_frame_ = false; |
548 layer_tree_host_->DidCommitAndDrawFrame(); | 550 layer_tree_host_->DidCommitAndDrawFrame(); |
549 } | 551 } |
550 } | 552 } |
551 | 553 |
552 bool SingleThreadProxy::CommitPendingForTesting() { return false; } | 554 bool SingleThreadProxy::CommitPendingForTesting() { return false; } |
553 | 555 |
554 } // namespace cc | 556 } // namespace cc |
OLD | NEW |