diff options
author | Sean Paul <seanpaul@chromium.org> | 2016-05-16 23:24:49 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-05-16 23:24:49 +0000 |
commit | 179590238252ddd288fff0d79c1a7e41687ca74f (patch) | |
tree | ee126e43a40e2bf845d061b5ca9cd285c79c7e4b | |
parent | beee54f5f094c45d1759b91d811a38191ff2d726 (diff) | |
parent | 8eb85ff7d7704a4783cbb97eec480ae2c93d7f3b (diff) | |
download | drm_hwcomposer-179590238252ddd288fff0d79c1a7e41687ca74f.tar.gz |
DO NOT MERGE: drm_hwcomposer: Don\'t use Plan() in SquashAll
am: 8eb85ff7d7
* commit '8eb85ff7d7704a4783cbb97eec480ae2c93d7f3b':
DO NOT MERGE: drm_hwcomposer: Don't use Plan() in SquashAll
Change-Id: Id0a88d543ed011b95c1a7ae8634e20663dd45611
-rw-r--r-- | drmdisplaycomposition.cpp | 9 | ||||
-rw-r--r-- | drmdisplaycomposition.h | 3 | ||||
-rw-r--r-- | drmdisplaycompositor.cpp | 20 |
3 files changed, 25 insertions, 7 deletions
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp index d2b6211..d5450ff 100644 --- a/drmdisplaycomposition.cpp +++ b/drmdisplaycomposition.cpp @@ -186,6 +186,11 @@ static std::vector<size_t> SetBitsToVector(uint64_t in, size_t *index_map) { return out; } +int DrmDisplayComposition::AddPlaneComposition(DrmCompositionPlane plane) { + composition_planes_.emplace_back(std::move(plane)); + return 0; +} + void DrmDisplayComposition::SeparateLayers(size_t *used_layers, size_t num_used_layers, DrmHwcRect<int> *exclude_rects, @@ -484,6 +489,10 @@ int DrmDisplayComposition::Plan(SquashState *squash, overlay_planes); } + return FinalizeComposition(); +} + +int DrmDisplayComposition::FinalizeComposition() { return CreateAndAssignReleaseFences(); } diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h index 2b24231..6c52664 100644 --- a/drmdisplaycomposition.h +++ b/drmdisplaycomposition.h @@ -109,6 +109,7 @@ class DrmDisplayComposition { uint64_t frame_no); int SetLayers(DrmHwcLayer *layers, size_t num_layers, bool geometry_changed); + int AddPlaneComposition(DrmCompositionPlane plane); int AddPlaneDisable(DrmPlane *plane); int SetDpmsMode(uint32_t dpms_mode); int SetDisplayMode(const DrmMode &display_mode); @@ -116,6 +117,8 @@ class DrmDisplayComposition { int Plan(SquashState *squash, std::vector<DrmPlane *> *primary_planes, std::vector<DrmPlane *> *overlay_planes); + int FinalizeComposition(); + int CreateNextTimelineFence(); int SignalSquashDone() { return IncreaseTimelineToPoint(timeline_squash_done_); diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp index acd5436..10a1ffc 100644 --- a/drmdisplaycompositor.cpp +++ b/drmdisplaycompositor.cpp @@ -1054,8 +1054,8 @@ int DrmDisplayCompositor::SquashFrame(DrmDisplayComposition *src, return ret; } - std::vector<DrmPlane *> primary_planes; - std::vector<DrmPlane *> fake_overlay_planes; + DrmCompositionPlane squashed_comp(DrmCompositionPlane::Type::kPrecomp, NULL, + src->crtc()); std::vector<DrmHwcLayer> dst_layers; for (DrmCompositionPlane &comp_plane : src_planes) { // Composition planes without DRM planes should never happen @@ -1082,11 +1082,12 @@ int DrmDisplayCompositor::SquashFrame(DrmDisplayComposition *src, // filling the OutputFds. layer.release_fence = OutputFd(); dst_layers.emplace_back(std::move(layer)); + squashed_comp.source_layers().push_back( + squashed_comp.source_layers().size()); } - if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY && - primary_planes.size() == 0) - primary_planes.push_back(comp_plane.plane()); + if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY) + squashed_comp.set_plane(comp_plane.plane()); else dst->AddPlaneDisable(comp_plane.plane()); } @@ -1097,8 +1098,13 @@ int DrmDisplayCompositor::SquashFrame(DrmDisplayComposition *src, goto move_layers_back; } - ret = - dst->Plan(NULL /* SquashState */, &primary_planes, &fake_overlay_planes); + ret = dst->AddPlaneComposition(std::move(squashed_comp)); + if (ret) { + ALOGE("Failed to add squashed plane composition %d", ret); + goto move_layers_back; + } + + ret = dst->FinalizeComposition(); if (ret) { ALOGE("Failed to plan for squash all composition %d", ret); goto move_layers_back; |