diff options
Diffstat (limited to 'cc/layers/layer_impl.cc')
-rw-r--r-- | cc/layers/layer_impl.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index 5bef67d..d099a63 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc @@ -70,7 +70,8 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id) needs_push_properties_(false), num_dependents_need_push_properties_(0), sorting_context_id_(0), - current_draw_mode_(DRAW_MODE_NONE) { + current_draw_mode_(DRAW_MODE_NONE), + frame_timing_requests_dirty_(false) { DCHECK_GT(layer_id_, 0); DCHECK(layer_tree_impl_); layer_tree_impl_->RegisterLayer(this); @@ -607,6 +608,11 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { layer->SetStackingOrderChanged(stacking_order_changed_); layer->SetDebugInfo(debug_info_); + if (frame_timing_requests_dirty_) { + layer->PassFrameTimingRequests(&frame_timing_requests_); + frame_timing_requests_dirty_ = false; + } + // Reset any state that should be cleared for the next update. stacking_order_changed_ = false; update_rect_ = gfx::Rect(); @@ -1024,6 +1030,13 @@ void LayerImpl::Set3dSortingContextId(int id) { NoteLayerPropertyChangedForSubtree(); } +void LayerImpl::PassFrameTimingRequests( + std::vector<FrameTimingRequest>* requests) { + frame_timing_requests_.swap(*requests); + frame_timing_requests_dirty_ = true; + SetNeedsPushProperties(); +} + void LayerImpl::SetTransform(const gfx::Transform& transform) { if (transform_ == transform) return; @@ -1552,6 +1565,17 @@ void LayerImpl::AsValueInto(base::debug::TracedValue* state) const { NOTREACHED(); } } + + if (!frame_timing_requests_.empty()) { + state->BeginArray("frame_timing_requests"); + for (const auto& request : frame_timing_requests_) { + state->BeginDictionary(); + state->SetInteger("request_id", request.id()); + MathUtil::AddToTracedValue("request_rect", request.rect(), state); + state->EndDictionary(); + } + state->EndArray(); + } } bool LayerImpl::IsDrawnRenderSurfaceLayerListMember() const { |