Commit 7dc41be6 authored by Fady Samuel's avatar Fady Samuel Committed by Commit Bot

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/1148226Reviewed-by: default avatarSaman Sami <samans@chromium.org>
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577544}
parent 3b4d46e3
...@@ -19,8 +19,6 @@ SurfaceDependencyTracker::~SurfaceDependencyTracker() = default; ...@@ -19,8 +19,6 @@ 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;
...@@ -28,8 +26,7 @@ void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) { ...@@ -28,8 +26,7 @@ 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 : for (const SurfaceId& surface_id : surface->activation_dependencies()) {
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(
...@@ -75,12 +72,7 @@ void SurfaceDependencyTracker::OnSurfaceDiscarded(Surface* surface) { ...@@ -75,12 +72,7 @@ void SurfaceDependencyTracker::OnSurfaceDiscarded(Surface* surface) {
if (!surface->HasPendingFrame()) if (!surface->HasPendingFrame())
return; return;
const CompositorFrame& pending_frame = surface->GetPendingFrame(); for (const SurfaceId& surface_id : surface->activation_dependencies()) {
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())
...@@ -110,10 +102,7 @@ void SurfaceDependencyTracker::OnFrameSinkInvalidated( ...@@ -110,10 +102,7 @@ void SurfaceDependencyTracker::OnFrameSinkInvalidated(
void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) { void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) {
DCHECK(surface->HasPendingFrame()); DCHECK(surface->HasPendingFrame());
const CompositorFrame& pending_frame = surface->GetPendingFrame(); 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())
ActivateLateSurfaceSubtree(dependency); ActivateLateSurfaceSubtree(dependency);
...@@ -125,8 +114,6 @@ void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) { ...@@ -125,8 +114,6 @@ 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());
...@@ -146,8 +133,7 @@ void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) { ...@@ -146,8 +133,7 @@ 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 : for (const SurfaceId& surface_id : surface->activation_dependencies()) {
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