Chromium Code Reviews| Index: cc/trees/layer_tree_host_impl.cc |
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
| index d89bad30481ac47b8f9aaf27ccbaa723e278c452..c9241a3d271256a6b33eeab0de844b582510d5ae 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -229,7 +229,8 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
| gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| id_(id), |
| requires_high_res_to_draw_(false), |
| - required_for_draw_tile_is_top_of_raster_queue_(false) { |
| + required_for_draw_tile_is_top_of_raster_queue_(false), |
| + frame_timing_tracker_(FrameTimingTracker::Create()) { |
| DCHECK(proxy_->IsImplThread()); |
| DidVisibilityChange(this, visible_); |
| animation_registrar_->set_supports_scroll_animations( |
| @@ -801,6 +802,18 @@ DrawResult LayerTreeHostImpl::CalculateRenderPasses( |
| *it, |
| occlusion_tracker, |
| &append_quads_data); |
| + |
| + // For layers that represent themselves, add composite frame timing |
| + // requests if the visible rect intersects the requested rect. |
| + const std::vector<FrameTimingRequest>& frame_timing_requests = |
| + it->frame_timing_requests(); |
| + for (const auto& request : frame_timing_requests) { |
|
danakj
2015/02/02 21:19:06
you could just : it->frame_timing_requests()) ? a
vmpstr
2015/02/02 22:32:05
Done.
|
| + if (request.rect().Intersects(it->visible_content_rect())) { |
|
danakj
2015/02/02 21:19:06
you need to map this VCR to layer space
vmpstr
2015/02/02 22:32:05
Done.
|
| + current_composite_events_.push_back( |
| + FrameTimingTracker::FrameAndRectIds( |
| + active_tree_->source_frame_number(), request.id())); |
| + } |
| + } |
| } |
| ++layers_drawn; |
| @@ -1049,6 +1062,7 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { |
| if (draw_result != DRAW_SUCCESS) { |
| DCHECK(!output_surface_->capabilities() |
| .draw_and_swap_full_viewport_every_frame); |
| + current_composite_events_.clear(); |
|
danakj
2015/02/02 21:19:06
if you make this a member of the |frame| then you
vmpstr
2015/02/02 22:32:05
Done.
|
| return draw_result; |
| } |
| @@ -1437,6 +1451,12 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame, |
| TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers"); |
| DCHECK(CanDraw()); |
| + if (!current_composite_events_.empty()) { |
| + frame_timing_tracker_->SaveTimeStamps(base::TimeTicks::Now(), |
|
danakj
2015/02/02 21:19:06
should we use the frame time instead of now?
vmpstr
2015/02/02 22:32:05
Done. I think that works. According to the spec, w
|
| + current_composite_events_); |
| + current_composite_events_.clear(); |
| + } |
| + |
| if (frame->has_no_damage) { |
| TRACE_EVENT_INSTANT0("cc", "EarlyOut_NoDamage", TRACE_EVENT_SCOPE_THREAD); |
| DCHECK(!output_surface_->capabilities() |