cc: Record frame timing composite events in the tracker.
This patch adds composite event recording for requested rects into the
frame timing tracker.
The current approach is to record all rects that intersect the visible
rect for that layer.
R=danakj, [email protected]
BUG=441555
Review URL: https://codereview.chromium.org/884243004
Cr-Commit-Position: refs/heads/master@{#314398}
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 398ef81..c8ee69c 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -229,7 +229,8 @@
gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
id_(id),
requires_high_res_to_draw_(false),
- is_likely_to_require_a_draw_(false) {
+ is_likely_to_require_a_draw_(false),
+ frame_timing_tracker_(FrameTimingTracker::Create()) {
DCHECK(proxy_->IsImplThread());
DidVisibilityChange(this, visible_);
animation_registrar_->set_supports_scroll_animations(
@@ -813,6 +814,18 @@
*it,
occlusion_tracker,
&append_quads_data);
+
+ // For layers that represent themselves, add composite frame timing
+ // requests if the visible rect intersects the requested rect.
+ for (const auto& request : it->frame_timing_requests()) {
+ const gfx::Rect& request_content_rect =
+ it->LayerRectToContentRect(request.rect());
+ if (request_content_rect.Intersects(it->visible_content_rect())) {
+ frame->composite_events.push_back(
+ FrameTimingTracker::FrameAndRectIds(
+ active_tree_->source_frame_number(), request.id()));
+ }
+ }
}
++layers_drawn;
@@ -1438,6 +1451,11 @@
TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers");
DCHECK(CanDraw());
+ if (!frame->composite_events.empty()) {
+ frame_timing_tracker_->SaveTimeStamps(frame_begin_time,
+ frame->composite_events);
+ }
+
if (frame->has_no_damage) {
TRACE_EVENT_INSTANT0("cc", "EarlyOut_NoDamage", TRACE_EVENT_SCOPE_THREAD);
DCHECK(!output_surface_->capabilities()