Commit 98ebae32 authored by Fady Samuel's avatar Fady Samuel Committed by Commit Bot

Revert "Surface Synchronization: Simplify SurfaceDependencyTracker"

This reverts commit 7dc41be6.

Reason for revert: activation_dependencies() can change while iterating on updating deadlines or activating late surfaces.

Original change's description:
> Surface Synchronization: Simplify SurfaceDependencyTracker
> 
> Prior to this CL, SurfaceDependencyTracker read activation_dependencies
> from the pending CompositorFrame's CompositorFrameMetadata. This meant
> that it had to look up already resolved dependencies. It's more efficient
> to use the remaining dependencies set tracked in Surface directly. The code
> is also more compact and easier to read.
> 
> Bug: 672962
> Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel
> Change-Id: I97acf5637fd92eaa6485f15601582dc75dd69c35
> Reviewed-on: https://chromium-review.googlesource.com/1148226
> Reviewed-by: Saman Sami <samans@chromium.org>
> Commit-Queue: Fady Samuel <fsamuel@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#577544}

TBR=fsamuel@chromium.org,kylechar@chromium.org,samans@chromium.org

Change-Id: I1f3ef525f1de8fab329d86507269ee26b6239675
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 672962
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/1148607Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577668}
parent abf1e9e8
...@@ -19,6 +19,8 @@ SurfaceDependencyTracker::~SurfaceDependencyTracker() = default; ...@@ -19,6 +19,8 @@ SurfaceDependencyTracker::~SurfaceDependencyTracker() = default;
void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) { void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) {
DCHECK(surface->HasPendingFrame()); DCHECK(surface->HasPendingFrame());
const CompositorFrame& pending_frame = surface->GetPendingFrame();
if (IsSurfaceLate(surface)) { if (IsSurfaceLate(surface)) {
ActivateLateSurfaceSubtree(surface); ActivateLateSurfaceSubtree(surface);
return; return;
...@@ -26,7 +28,8 @@ void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) { ...@@ -26,7 +28,8 @@ void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) {
// Activation dependencies that aren't currently known to the surface manager // Activation dependencies that aren't currently known to the surface manager
// or do not have an active CompositorFrame block this frame. // or do not have an active CompositorFrame block this frame.
for (const SurfaceId& surface_id : surface->activation_dependencies()) { for (const SurfaceId& surface_id :
pending_frame.metadata.activation_dependencies) {
Surface* dependency = surface_manager_->GetSurfaceForId(surface_id); Surface* dependency = surface_manager_->GetSurfaceForId(surface_id);
if (!dependency || !dependency->HasActiveFrame()) { if (!dependency || !dependency->HasActiveFrame()) {
blocked_surfaces_from_dependency_[surface_id.frame_sink_id()].insert( blocked_surfaces_from_dependency_[surface_id.frame_sink_id()].insert(
...@@ -72,7 +75,12 @@ void SurfaceDependencyTracker::OnSurfaceDiscarded(Surface* surface) { ...@@ -72,7 +75,12 @@ void SurfaceDependencyTracker::OnSurfaceDiscarded(Surface* surface) {
if (!surface->HasPendingFrame()) if (!surface->HasPendingFrame())
return; return;
for (const SurfaceId& surface_id : surface->activation_dependencies()) { const CompositorFrame& pending_frame = surface->GetPendingFrame();
DCHECK(!pending_frame.metadata.activation_dependencies.empty());
for (const SurfaceId& surface_id :
pending_frame.metadata.activation_dependencies) {
auto it = auto it =
blocked_surfaces_from_dependency_.find(surface_id.frame_sink_id()); blocked_surfaces_from_dependency_.find(surface_id.frame_sink_id());
if (it == blocked_surfaces_from_dependency_.end()) if (it == blocked_surfaces_from_dependency_.end())
...@@ -102,7 +110,10 @@ void SurfaceDependencyTracker::OnFrameSinkInvalidated( ...@@ -102,7 +110,10 @@ void SurfaceDependencyTracker::OnFrameSinkInvalidated(
void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) { void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) {
DCHECK(surface->HasPendingFrame()); DCHECK(surface->HasPendingFrame());
for (const SurfaceId& surface_id : surface->activation_dependencies()) { const CompositorFrame& pending_frame = surface->GetPendingFrame();
for (const SurfaceId& surface_id :
pending_frame.metadata.activation_dependencies) {
Surface* dependency = surface_manager_->GetSurfaceForId(surface_id); Surface* dependency = surface_manager_->GetSurfaceForId(surface_id);
if (dependency && dependency->HasPendingFrame()) if (dependency && dependency->HasPendingFrame())
ActivateLateSurfaceSubtree(dependency); ActivateLateSurfaceSubtree(dependency);
...@@ -114,6 +125,8 @@ void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) { ...@@ -114,6 +125,8 @@ void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) {
void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) { void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) {
DCHECK(surface->HasPendingFrame()); DCHECK(surface->HasPendingFrame());
const CompositorFrame& pending_frame = surface->GetPendingFrame();
// Inherit the deadline from the first parent blocked on this surface. // Inherit the deadline from the first parent blocked on this surface.
auto it = blocked_surfaces_from_dependency_.find( auto it = blocked_surfaces_from_dependency_.find(
surface->surface_id().frame_sink_id()); surface->surface_id().frame_sink_id());
...@@ -133,7 +146,8 @@ void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) { ...@@ -133,7 +146,8 @@ void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) {
surface->has_deadline()); surface->has_deadline());
// Recursively propagate the newly set deadline to children. // Recursively propagate the newly set deadline to children.
for (const SurfaceId& surface_id : surface->activation_dependencies()) { for (const SurfaceId& surface_id :
pending_frame.metadata.activation_dependencies) {
Surface* dependency = surface_manager_->GetSurfaceForId(surface_id); Surface* dependency = surface_manager_->GetSurfaceForId(surface_id);
if (dependency && dependency->HasPendingFrame()) if (dependency && dependency->HasPendingFrame())
UpdateSurfaceDeadline(dependency); UpdateSurfaceDeadline(dependency);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment