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 <string> | 7 #include <string> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 DCHECK(IsImplThread()); | 682 DCHECK(IsImplThread()); |
683 layer_tree_host_impl_->FinishAllRendering(); | 683 layer_tree_host_impl_->FinishAllRendering(); |
684 completion->Signal(); | 684 completion->Signal(); |
685 } | 685 } |
686 | 686 |
687 void ThreadProxy::ScheduledActionSendBeginMainFrame() { | 687 void ThreadProxy::ScheduledActionSendBeginMainFrame() { |
688 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionSendBeginMainFrame"); | 688 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionSendBeginMainFrame"); |
689 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state( | 689 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state( |
690 new BeginMainFrameAndCommitState); | 690 new BeginMainFrameAndCommitState); |
691 begin_main_frame_state->monotonic_frame_begin_time = | 691 begin_main_frame_state->monotonic_frame_begin_time = |
692 layer_tree_host_impl_->CurrentPhysicalTimeTicks(); | 692 layer_tree_host_impl_->CurrentFrameTimeTicks(); |
693 begin_main_frame_state->scroll_info = | 693 begin_main_frame_state->scroll_info = |
694 layer_tree_host_impl_->ProcessScrollDeltas(); | 694 layer_tree_host_impl_->ProcessScrollDeltas(); |
695 | 695 |
696 if (!layer_tree_host_impl_->settings().impl_side_painting) { | 696 if (!layer_tree_host_impl_->settings().impl_side_painting) { |
697 DCHECK_GT(layer_tree_host_impl_->memory_allocation_limit_bytes(), 0u); | 697 DCHECK_GT(layer_tree_host_impl_->memory_allocation_limit_bytes(), 0u); |
698 } | 698 } |
699 begin_main_frame_state->memory_allocation_limit_bytes = | 699 begin_main_frame_state->memory_allocation_limit_bytes = |
700 layer_tree_host_impl_->memory_allocation_limit_bytes(); | 700 layer_tree_host_impl_->memory_allocation_limit_bytes(); |
701 begin_main_frame_state->memory_allocation_priority_cutoff = | 701 begin_main_frame_state->memory_allocation_priority_cutoff = |
702 layer_tree_host_impl_->memory_allocation_priority_cutoff(); | 702 layer_tree_host_impl_->memory_allocation_priority_cutoff(); |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 | 1037 |
1038 DCHECK(layer_tree_host_impl_->renderer()); | 1038 DCHECK(layer_tree_host_impl_->renderer()); |
1039 if (!layer_tree_host_impl_->renderer()) | 1039 if (!layer_tree_host_impl_->renderer()) |
1040 return result; | 1040 return result; |
1041 | 1041 |
1042 base::TimeTicks start_time = base::TimeTicks::HighResNow(); | 1042 base::TimeTicks start_time = base::TimeTicks::HighResNow(); |
1043 base::TimeDelta draw_duration_estimate = DrawDurationEstimate(); | 1043 base::TimeDelta draw_duration_estimate = DrawDurationEstimate(); |
1044 base::AutoReset<bool> mark_inside(&inside_draw_, true); | 1044 base::AutoReset<bool> mark_inside(&inside_draw_, true); |
1045 | 1045 |
1046 // Advance our animations. | 1046 // Advance our animations. |
1047 base::TimeTicks monotonic_time = | 1047 gfx::FrameTime monotonic_time = |
1048 layer_tree_host_impl_->CurrentFrameTimeTicks(); | 1048 layer_tree_host_impl_->CurrentFrameTimeTicks(); |
1049 base::Time wall_clock_time = layer_tree_host_impl_->CurrentFrameTime(); | 1049 base::Time wall_clock_time = layer_tree_host_impl_->CurrentFrameTime(); |
1050 | 1050 |
1051 // TODO(enne): This should probably happen post-animate. | 1051 // TODO(enne): This should probably happen post-animate. |
1052 if (layer_tree_host_impl_->pending_tree()) | 1052 if (layer_tree_host_impl_->pending_tree()) |
1053 layer_tree_host_impl_->pending_tree()->UpdateDrawProperties(); | 1053 layer_tree_host_impl_->pending_tree()->UpdateDrawProperties(); |
1054 layer_tree_host_impl_->Animate(monotonic_time, wall_clock_time); | 1054 layer_tree_host_impl_->Animate(monotonic_time, wall_clock_time); |
1055 | 1055 |
1056 // This method is called on a forced draw, regardless of whether we are able | 1056 // This method is called on a forced draw, regardless of whether we are able |
1057 // to produce a frame, as the calling site on main thread is blocked until its | 1057 // to produce a frame, as the calling site on main thread is blocked until its |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1223 | 1223 |
1224 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndReadback() { | 1224 DrawSwapReadbackResult ThreadProxy::ScheduledActionDrawAndReadback() { |
1225 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndReadback"); | 1225 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionDrawAndReadback"); |
1226 bool forced_draw = true; | 1226 bool forced_draw = true; |
1227 bool swap_requested = false; | 1227 bool swap_requested = false; |
1228 bool readback_requested = true; | 1228 bool readback_requested = true; |
1229 return DrawSwapReadbackInternal( | 1229 return DrawSwapReadbackInternal( |
1230 forced_draw, swap_requested, readback_requested); | 1230 forced_draw, swap_requested, readback_requested); |
1231 } | 1231 } |
1232 | 1232 |
1233 void ThreadProxy::DidAnticipatedDrawTimeChange(base::TimeTicks time) { | 1233 void ThreadProxy::DidAnticipatedDrawTimeChange(gfx::FrameTime time) { |
1234 if (current_resource_update_controller_on_impl_thread_) | 1234 if (current_resource_update_controller_on_impl_thread_) |
1235 current_resource_update_controller_on_impl_thread_->PerformMoreUpdates( | 1235 current_resource_update_controller_on_impl_thread_->PerformMoreUpdates( |
1236 time); | 1236 time); |
1237 } | 1237 } |
1238 | 1238 |
1239 base::TimeDelta ThreadProxy::DrawDurationEstimate() { | 1239 base::TimeDelta ThreadProxy::DrawDurationEstimate() { |
1240 base::TimeDelta historical_estimate = | 1240 base::TimeDelta historical_estimate = |
1241 draw_duration_history_.Percentile(kDrawDurationEstimationPercentile); | 1241 draw_duration_history_.Percentile(kDrawDurationEstimationPercentile); |
1242 base::TimeDelta padding = base::TimeDelta::FromMicroseconds( | 1242 base::TimeDelta padding = base::TimeDelta::FromMicroseconds( |
1243 kDrawDurationEstimatePaddingInMicroseconds); | 1243 kDrawDurationEstimatePaddingInMicroseconds); |
1244 return historical_estimate + padding; | 1244 return historical_estimate + padding; |
1245 } | 1245 } |
1246 | 1246 |
1247 base::TimeDelta ThreadProxy::BeginMainFrameToCommitDurationEstimate() { | 1247 base::TimeDelta ThreadProxy::BeginMainFrameToCommitDurationEstimate() { |
1248 return begin_main_frame_to_commit_duration_history_.Percentile( | 1248 return begin_main_frame_to_commit_duration_history_.Percentile( |
1249 kCommitAndActivationDurationEstimationPercentile); | 1249 kCommitAndActivationDurationEstimationPercentile); |
1250 } | 1250 } |
1251 | 1251 |
1252 base::TimeDelta ThreadProxy::CommitToActivateDurationEstimate() { | 1252 base::TimeDelta ThreadProxy::CommitToActivateDurationEstimate() { |
1253 return commit_to_activate_duration_history_.Percentile( | 1253 return commit_to_activate_duration_history_.Percentile( |
1254 kCommitAndActivationDurationEstimationPercentile); | 1254 kCommitAndActivationDurationEstimationPercentile); |
1255 } | 1255 } |
1256 | 1256 |
1257 void ThreadProxy::PostBeginImplFrameDeadline(const base::Closure& closure, | 1257 void ThreadProxy::PostBeginImplFrameDeadline( |
1258 base::TimeTicks deadline) { | 1258 const base::Closure& closure, |
| 1259 gfx::FrameTime deadline) { |
1259 base::TimeDelta delta = deadline - gfx::FrameTime::Now(); | 1260 base::TimeDelta delta = deadline - gfx::FrameTime::Now(); |
1260 if (delta <= base::TimeDelta()) | 1261 if (delta <= base::TimeDelta()) |
1261 delta = base::TimeDelta(); | 1262 delta = base::TimeDelta(); |
1262 Proxy::ImplThreadTaskRunner()->PostDelayedTask(FROM_HERE, closure, delta); | 1263 Proxy::ImplThreadTaskRunner()->PostDelayedTask(FROM_HERE, closure, delta); |
1263 } | 1264 } |
1264 | 1265 |
1265 void ThreadProxy::DidBeginImplFrameDeadline() { | 1266 void ThreadProxy::DidBeginImplFrameDeadline() { |
1266 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); | 1267 layer_tree_host_impl_->ResetCurrentFrameTimeForNextFrame(); |
1267 } | 1268 } |
1268 | 1269 |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 request->completion.Signal(); | 1493 request->completion.Signal(); |
1493 } | 1494 } |
1494 | 1495 |
1495 void ThreadProxy::RenewTreePriority() { | 1496 void ThreadProxy::RenewTreePriority() { |
1496 DCHECK(IsImplThread()); | 1497 DCHECK(IsImplThread()); |
1497 bool smoothness_takes_priority = | 1498 bool smoothness_takes_priority = |
1498 layer_tree_host_impl_->pinch_gesture_active() || | 1499 layer_tree_host_impl_->pinch_gesture_active() || |
1499 layer_tree_host_impl_->IsCurrentlyScrolling() || | 1500 layer_tree_host_impl_->IsCurrentlyScrolling() || |
1500 layer_tree_host_impl_->page_scale_animation_active(); | 1501 layer_tree_host_impl_->page_scale_animation_active(); |
1501 | 1502 |
1502 base::TimeTicks now = layer_tree_host_impl_->CurrentPhysicalTimeTicks(); | 1503 base::TimeTicks now = base::TimeTicks::Now(); |
1503 | 1504 |
1504 // Update expiration time if smoothness currently takes priority. | 1505 // Update expiration time if smoothness currently takes priority. |
1505 if (smoothness_takes_priority) { | 1506 if (smoothness_takes_priority) { |
1506 smoothness_takes_priority_expiration_time_ = | 1507 smoothness_takes_priority_expiration_time_ = |
1507 now + base::TimeDelta::FromMilliseconds( | 1508 now + base::TimeDelta::FromMilliseconds( |
1508 kSmoothnessTakesPriorityExpirationDelay * 1000); | 1509 kSmoothnessTakesPriorityExpirationDelay * 1000); |
1509 } | 1510 } |
1510 | 1511 |
1511 // We use the same priority for both trees by default. | 1512 // We use the same priority for both trees by default. |
1512 TreePriority priority = SAME_PRIORITY_FOR_BOTH_TREES; | 1513 TreePriority priority = SAME_PRIORITY_FOR_BOTH_TREES; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1585 completion_event_for_commit_held_on_tree_activation_ = NULL; | 1586 completion_event_for_commit_held_on_tree_activation_ = NULL; |
1586 } | 1587 } |
1587 | 1588 |
1588 UpdateBackgroundAnimateTicking(); | 1589 UpdateBackgroundAnimateTicking(); |
1589 | 1590 |
1590 commit_to_activate_duration_history_.InsertSample( | 1591 commit_to_activate_duration_history_.InsertSample( |
1591 base::TimeTicks::HighResNow() - commit_complete_time_); | 1592 base::TimeTicks::HighResNow() - commit_complete_time_); |
1592 } | 1593 } |
1593 | 1594 |
1594 } // namespace cc | 1595 } // namespace cc |
OLD | NEW |