| 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/thread_proxy.h" | 5 #include "cc/trees/thread_proxy.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 } | 460 } |
| 461 | 461 |
| 462 void ThreadProxy::SetNeedsCommitOnImplThread() { | 462 void ThreadProxy::SetNeedsCommitOnImplThread() { |
| 463 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread"); | 463 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsCommitOnImplThread"); |
| 464 DCHECK(IsImplThread()); | 464 DCHECK(IsImplThread()); |
| 465 impl().scheduler->SetNeedsCommit(); | 465 impl().scheduler->SetNeedsCommit(); |
| 466 } | 466 } |
| 467 | 467 |
| 468 void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread( | 468 void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread( |
| 469 scoped_ptr<AnimationEventsVector> events, | 469 scoped_ptr<AnimationEventsVector> events, |
| 470 base::Time wall_clock_time) { | 470 base::TimeTicks clock_time) { |
| 471 TRACE_EVENT0("cc", | 471 TRACE_EVENT0("cc", |
| 472 "ThreadProxy::PostAnimationEventsToMainThreadOnImplThread"); | 472 "ThreadProxy::PostAnimationEventsToMainThreadOnImplThread"); |
| 473 DCHECK(IsImplThread()); | 473 DCHECK(IsImplThread()); |
| 474 Proxy::MainThreadTaskRunner()->PostTask( | 474 Proxy::MainThreadTaskRunner()->PostTask( |
| 475 FROM_HERE, | 475 FROM_HERE, |
| 476 base::Bind(&ThreadProxy::SetAnimationEvents, | 476 base::Bind(&ThreadProxy::SetAnimationEvents, |
| 477 main_thread_weak_ptr_, | 477 main_thread_weak_ptr_, |
| 478 base::Passed(&events), | 478 base::Passed(&events), |
| 479 wall_clock_time)); | 479 clock_time)); |
| 480 } | 480 } |
| 481 | 481 |
| 482 bool ThreadProxy::ReduceContentsTextureMemoryOnImplThread(size_t limit_bytes, | 482 bool ThreadProxy::ReduceContentsTextureMemoryOnImplThread(size_t limit_bytes, |
| 483 int priority_cutoff) { | 483 int priority_cutoff) { |
| 484 DCHECK(IsImplThread()); | 484 DCHECK(IsImplThread()); |
| 485 | 485 |
| 486 if (!impl().contents_texture_manager) | 486 if (!impl().contents_texture_manager) |
| 487 return false; | 487 return false; |
| 488 if (!impl().layer_tree_host_impl->resource_provider()) | 488 if (!impl().layer_tree_host_impl->resource_provider()) |
| 489 return false; | 489 return false; |
| (...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1129 base::TimeDelta draw_duration_estimate = DrawDurationEstimate(); | 1129 base::TimeDelta draw_duration_estimate = DrawDurationEstimate(); |
| 1130 base::AutoReset<bool> mark_inside(&impl().inside_draw, true); | 1130 base::AutoReset<bool> mark_inside(&impl().inside_draw, true); |
| 1131 | 1131 |
| 1132 // Advance our animations. | 1132 // Advance our animations. |
| 1133 base::TimeTicks monotonic_time; | 1133 base::TimeTicks monotonic_time; |
| 1134 if (impl().animations_frozen_until_next_draw) | 1134 if (impl().animations_frozen_until_next_draw) |
| 1135 monotonic_time = impl().animation_freeze_time; | 1135 monotonic_time = impl().animation_freeze_time; |
| 1136 else | 1136 else |
| 1137 monotonic_time = impl().layer_tree_host_impl->CurrentFrameTimeTicks(); | 1137 monotonic_time = impl().layer_tree_host_impl->CurrentFrameTimeTicks(); |
| 1138 | 1138 |
| 1139 // TODO(ajuma): Remove wall_clock_time once the legacy implementation of | |
| 1140 // animations in Blink is removed. | |
| 1141 base::Time wall_clock_time = impl().layer_tree_host_impl->CurrentFrameTime(); | |
| 1142 | |
| 1143 // TODO(enne): This should probably happen post-animate. | 1139 // TODO(enne): This should probably happen post-animate. |
| 1144 if (impl().layer_tree_host_impl->pending_tree()) | 1140 if (impl().layer_tree_host_impl->pending_tree()) |
| 1145 impl().layer_tree_host_impl->pending_tree()->UpdateDrawProperties(); | 1141 impl().layer_tree_host_impl->pending_tree()->UpdateDrawProperties(); |
| 1146 impl().layer_tree_host_impl->Animate(monotonic_time, wall_clock_time); | 1142 impl().layer_tree_host_impl->Animate(monotonic_time); |
| 1147 | 1143 |
| 1148 // This method is called on a forced draw, regardless of whether we are able | 1144 // This method is called on a forced draw, regardless of whether we are able |
| 1149 // to produce a frame, as the calling site on main thread is blocked until its | 1145 // to produce a frame, as the calling site on main thread is blocked until its |
| 1150 // request completes, and we signal completion here. If CanDraw() is false, we | 1146 // request completes, and we signal completion here. If CanDraw() is false, we |
| 1151 // will indicate success=false to the caller, but we must still signal | 1147 // will indicate success=false to the caller, but we must still signal |
| 1152 // completion to avoid deadlock. | 1148 // completion to avoid deadlock. |
| 1153 | 1149 |
| 1154 // We guard PrepareToDraw() with CanDraw() because it always returns a valid | 1150 // We guard PrepareToDraw() with CanDraw() because it always returns a valid |
| 1155 // frame, so can only be used when such a frame is possible. Since | 1151 // frame, so can only be used when such a frame is possible. Since |
| 1156 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on | 1152 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1396 } | 1392 } |
| 1397 | 1393 |
| 1398 void ThreadProxy::DidCompleteSwapBuffers() { | 1394 void ThreadProxy::DidCompleteSwapBuffers() { |
| 1399 DCHECK(IsMainThread()); | 1395 DCHECK(IsMainThread()); |
| 1400 if (!layer_tree_host()) | 1396 if (!layer_tree_host()) |
| 1401 return; | 1397 return; |
| 1402 layer_tree_host()->DidCompleteSwapBuffers(); | 1398 layer_tree_host()->DidCompleteSwapBuffers(); |
| 1403 } | 1399 } |
| 1404 | 1400 |
| 1405 void ThreadProxy::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events, | 1401 void ThreadProxy::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events, |
| 1406 base::Time wall_clock_time) { | 1402 base::TimeTicks clock_time) { |
| 1407 TRACE_EVENT0("cc", "ThreadProxy::SetAnimationEvents"); | 1403 TRACE_EVENT0("cc", "ThreadProxy::SetAnimationEvents"); |
| 1408 DCHECK(IsMainThread()); | 1404 DCHECK(IsMainThread()); |
| 1409 if (!layer_tree_host()) | 1405 if (!layer_tree_host()) |
| 1410 return; | 1406 return; |
| 1411 layer_tree_host()->SetAnimationEvents(events.Pass(), wall_clock_time); | 1407 layer_tree_host()->SetAnimationEvents(events.Pass(), clock_time); |
| 1412 } | 1408 } |
| 1413 | 1409 |
| 1414 void ThreadProxy::CreateAndInitializeOutputSurface() { | 1410 void ThreadProxy::CreateAndInitializeOutputSurface() { |
| 1415 TRACE_EVENT0("cc", "ThreadProxy::CreateAndInitializeOutputSurface"); | 1411 TRACE_EVENT0("cc", "ThreadProxy::CreateAndInitializeOutputSurface"); |
| 1416 DCHECK(IsMainThread()); | 1412 DCHECK(IsMainThread()); |
| 1417 | 1413 |
| 1418 // Check that output surface has not been recreated by CompositeAndReadback | 1414 // Check that output surface has not been recreated by CompositeAndReadback |
| 1419 // after this task is posted but before it is run. | 1415 // after this task is posted but before it is run. |
| 1420 bool has_initialized_output_surface = true; | 1416 bool has_initialized_output_surface = true; |
| 1421 { | 1417 { |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1714 | 1710 |
| 1715 impl().timing_history.DidActivatePendingTree(); | 1711 impl().timing_history.DidActivatePendingTree(); |
| 1716 } | 1712 } |
| 1717 | 1713 |
| 1718 void ThreadProxy::DidManageTiles() { | 1714 void ThreadProxy::DidManageTiles() { |
| 1719 DCHECK(IsImplThread()); | 1715 DCHECK(IsImplThread()); |
| 1720 impl().scheduler->DidManageTiles(); | 1716 impl().scheduler->DidManageTiles(); |
| 1721 } | 1717 } |
| 1722 | 1718 |
| 1723 } // namespace cc | 1719 } // namespace cc |
| OLD | NEW |