Thanks Dale and Jon! Appreciate all the help here!
> We've talked about making `waiting_for_compositor_ack_` a counter instead of a bool, you might see if allowing more pending ACKs fixes the issue.
I've only ever seen it go to up to 1 though so I don't think it's caused by a dropped ack.
> Was this viz::Surface a different embedded client, or an updated viz::Surface from the VideoFrameSubmitter?
Looks like a different client. Typically it's Acking
FrameSinkId(3, 2147483648) but in the bad case it Acks
FrameSinkId(3, 3).
> If it is the Former, then some other client was holding up frame production.
Do you have more details on this? Is there any logs that would show that?
> Were Step 2)/3) to occur after 4) then we could be in a bad state.
I've added logs with traces of the flow you described and collected a random one that dropped a frame below.
In Vsync 4, the VideoFrameSubmitter::DidReceiveCompositorFrameAck call happens after DrawAndSwap. In VSync 3, the Ack only went to FrameSinkId(3, 3) before the call to VideoFrameSubmitter::OnBeginFrame so it skipped out on the PutCurrentFrame call at that time.
// VSync 1
07-12 10:06:24.617 7201 7247 E chromium: [ERROR:external_begin_frame_source_android.cc(280)] ExternalBeginFrameSourceAndroid::OnVSyncImpl
07-12 10:06:24.619 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(389)] VideoFrameSubmitter::OnBeginFrame
07-12 10:06:24.619 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(371)] VideoFrameSubmitter::DidReceiveCompositorFrameAck
07-12 10:06:24.625 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(776)] VideoFrameSubmitter::SubmitFrame calling SubmitCompositorFrame
07-12 10:06:24.625 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(115)] VideoFrameSubmitter::FrameSinkBundleProxy::SubmitCompositorFrame
07-12 10:06:24.625 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(503)] VideoFrameSubmitter::OnBeginFrame SubmitFrame Succeeded - calling PutCurrentFrame
07-12 10:06:24.627 7201 7247 E chromium: [ERROR:display.cc(669)] Display::DrawAndSwap
07-12 10:06:24.627 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(268)] DisplayDamageTracker::RunDrawCallbacks processing surfaces_to_ack_on_next_draw_: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
07-12 10:06:24.628 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(0, 1), LocalSurfaceId(3, 2, 390E607F5C6728B83CE2A2B856C29633))
07-12 10:06:24.628 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.628 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
// innerHTML set here:
07-12 10:06:24.634 7163 7232 V chromium: [VERBOSE2:html_document_parser_fastpath.cc(1195)] innerHTML fast-path parser failed, 4
07-12 10:06:24.634 7163 7232 V chromium: [VERBOSE1:html_tree_builder.cc(2781)] Not implemented.
// VSync 2
07-12 10:06:24.651 7201 7247 E chromium: [ERROR:external_begin_frame_source_android.cc(280)] ExternalBeginFrameSourceAndroid::OnVSyncImpl
07-12 10:06:24.652 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(389)] VideoFrameSubmitter::OnBeginFrame
07-12 10:06:24.652 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(371)] VideoFrameSubmitter::DidReceiveCompositorFrameAck
07-12 10:06:24.657 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(776)] VideoFrameSubmitter::SubmitFrame calling SubmitCompositorFrame
07-12 10:06:24.657 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(115)] VideoFrameSubmitter::FrameSinkBundleProxy::SubmitCompositorFrame
07-12 10:06:24.657 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(503)] VideoFrameSubmitter::OnBeginFrame SubmitFrame Succeeded - calling PutCurrentFrame
07-12 10:06:24.663 7201 7247 E chromium: [ERROR:display.cc(669)] Display::DrawAndSwap
07-12 10:06:24.666 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(268)] DisplayDamageTracker::RunDrawCallbacks processing surfaces_to_ack_on_next_draw_: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
07-12 10:06:24.666 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(0, 1), LocalSurfaceId(3, 2, 390E607F5C6728B83CE2A2B856C29633))
07-12 10:06:24.666 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.666 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
// VSync 3
07-12 10:06:24.684 7201 7247 E chromium: [ERROR:external_begin_frame_source_android.cc(280)] ExternalBeginFrameSourceAndroid::OnVSyncImpl
07-12 10:06:24.686 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(389)] VideoFrameSubmitter::OnBeginFrame
07-12 10:06:24.686 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(371)] VideoFrameSubmitter::DidReceiveCompositorFrameAck
07-12 10:06:24.694 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(776)] VideoFrameSubmitter::SubmitFrame calling SubmitCompositorFrame
07-12 10:06:24.694 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(115)] VideoFrameSubmitter::FrameSinkBundleProxy::SubmitCompositorFrame
07-12 10:06:24.694 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(503)] VideoFrameSubmitter::OnBeginFrame SubmitFrame Succeeded - calling PutCurrentFrame
07-12 10:06:24.695 7201 7247 E chromium: [ERROR:display.cc(669)] Display::DrawAndSwap
07-12 10:06:24.695 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(268)] DisplayDamageTracker::RunDrawCallbacks processing surfaces_to_ack_on_next_draw_: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.695 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(0, 1), LocalSurfaceId(3, 2, 390E607F5C6728B83CE2A2B856C29633))
07-12 10:06:24.695 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.696 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
// VSync 4
07-12 10:06:24.718 7201 7247 E chromium: [ERROR:external_begin_frame_source_android.cc(280)] ExternalBeginFrameSourceAndroid::OnVSyncImpl
07-12 10:06:24.719 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(389)] VideoFrameSubmitter::OnBeginFrame
07-12 10:06:24.719 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(749)] VideoFrameSubmitter::SubmitFrame returning false because waiting_for_compositor_ack_(1) > 0 && !frame_size_changed
07-12 10:06:24.719 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(494)] VideoFrameSubmitter::OnBeginFrame SubmitFrame Failed - not calling PutCurrentFrame
07-12 10:06:24.719 7201 7247 E chromium: [ERROR:display.cc(669)] Display::DrawAndSwap
07-12 10:06:24.720 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(268)] DisplayDamageTracker::RunDrawCallbacks processing surfaces_to_ack_on_next_draw_: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
07-12 10:06:24.720 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(0, 1), LocalSurfaceId(3, 2, 390E607F5C6728B83CE2A2B856C29633))
07-12 10:06:24.720 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.720 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
07-12 10:06:24.721 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(371)] VideoFrameSubmitter::DidReceiveCompositorFrameAck
// VSync 5
07-12 10:06:24.751 7201 7247 E chromium: [ERROR:external_begin_frame_source_android.cc(280)] ExternalBeginFrameSourceAndroid::OnVSyncImpl
07-12 10:06:24.752 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(389)] VideoFrameSubmitter::OnBeginFrame
07-12 10:06:24.752 7163 7285 E chromium: [ERROR:video_renderer_algorithm.cc(293)] VideoRendererAlgorithm::OnLastFrameDropped
07-12 10:06:24.753 7163 7285 V chromium: [VERBOSE2:video_renderer_algorithm.cc(190)] Dropping unrendered (or always dropped) frame 10.9667 s, wall clock: 177288840736 (1, 1)
07-12 10:06:24.753 7163 7285 V chromium: [VERBOSE2:video_renderer_algorithm.cc(209)] Deadline: [177288919044, 177288952377], Interval: 33333, Duration: 33333
07-12 10:06:24.758 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(776)] VideoFrameSubmitter::SubmitFrame calling SubmitCompositorFrame
07-12 10:06:24.758 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(115)] VideoFrameSubmitter::FrameSinkBundleProxy::SubmitCompositorFrame
07-12 10:06:24.758 7163 7285 E chromium: [ERROR:video_frame_submitter.cc(503)] VideoFrameSubmitter::OnBeginFrame SubmitFrame Succeeded - calling PutCurrentFrame
07-12 10:06:24.759 7201 7247 E chromium: [ERROR:display.cc(669)] Display::DrawAndSwap
07-12 10:06:24.760 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(268)] DisplayDamageTracker::RunDrawCallbacks processing surfaces_to_ack_on_next_draw_: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))
07-12 10:06:24.760 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(0, 1), LocalSurfaceId(3, 2, 390E607F5C6728B83CE2A2B856C29633))
07-12 10:06:24.760 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 3), LocalSurfaceId(8, 1, 8429879452800C41C43FD7594DF91109))
07-12 10:06:24.760 7201 7247 E chromium: [ERROR:display_damage_tracker.cc(278)] DisplayDamageTracker::RunDrawCallbacks processing previous_contained_surfaces: SurfaceId(FrameSinkId(3, 2147483648), LocalSurfaceId(1, 1, EC087F01A8EC0E0DA1DCA772E36B623A))