libhwcomposer: Enhance mixed mode composition.
While marking layers for cache, neglect the z-order when
possible, to improve the scope of mixed mode usage.
It is safe to neglect the z-order if a static layer
doesn't have any overlapping region with updating layers
in between static layer & contiguous static layers batch.
- if above layer doesn't have any overlapping with updating
layer in middle, push it to the batch.
- If above case fails, but layers below(existing batch) does not
have any overlapping region with the updating layer, bring the
batch to top and modify fb-zorder accordingly.
Change-Id: I4882a750d0a9a2e11272fcbb146202160673d04f
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index d872cdf..e1839cd 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -168,8 +168,17 @@
/* tracks non updating layers*/
void updateLayerCache(hwc_context_t* ctx, hwc_display_contents_1_t* list);
/* optimize layers for mdp comp*/
- bool batchLayers(hwc_context_t *ctx, hwc_display_contents_1_t* list);
- /* updates cache map with YUV info */
+ bool markLayersForCaching(hwc_context_t* ctx,
+ hwc_display_contents_1_t* list);
+ int getBatch(hwc_display_contents_1_t* list,
+ int& maxBatchStart, int& maxBatchEnd,
+ int& maxBatchCount);
+ bool canPushBatchToTop(const hwc_display_contents_1_t* list,
+ int fromIndex, int toIndex);
+ bool intersectingUpdatingLayers(const hwc_display_contents_1_t* list,
+ int fromIndex, int toIndex, int targetLayerIndex);
+
+ /* updates cache map with YUV info */
void updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list,
bool secureOnly);
bool programMDP(hwc_context_t *ctx, hwc_display_contents_1_t* list);