HWC/Copybit :: Add swap rect feature in HAL for MDP3
We brings all swap rect level checks in HAL from surfaceflinger
for MDP3.
swap rect kicks in case of
1 Only one layer is updating.
2 No overlaypping layers.
3.Both src and dst has same value.(no scaling)
4.No video layer
Change-Id: I881958994e80b53d4969beaaf51518b727a8de78
diff --git a/libhwcomposer/hwc_copybit.h b/libhwcomposer/hwc_copybit.h
index f7be644..14f8cfc 100644
--- a/libhwcomposer/hwc_copybit.h
+++ b/libhwcomposer/hwc_copybit.h
@@ -50,6 +50,27 @@
void setReleaseFd(int fd);
private:
+ /* cached data */
+ struct LayerCache {
+ int layerCount;
+ buffer_handle_t hnd[MAX_NUM_APP_LAYERS];
+ /* c'tor */
+ LayerCache();
+ /* clear caching info*/
+ void reset();
+ void updateCounts(hwc_context_t *ctx, hwc_display_contents_1_t *list,
+ int dpy);
+ };
+ /* framebuffer cache*/
+ struct FbCache {
+ hwc_rect_t FbdirtyRect[NUM_RENDER_BUFFERS];
+ int FbIndex;
+ FbCache();
+ void reset();
+ void insertAndUpdateFbCache(hwc_rect_t dirtyRect);
+ int getUnchangedFbDRCount(hwc_rect_t dirtyRect);
+ };
+
// holds the copybit device
struct copybit_device_t *mEngine;
// Helper functions for copybit composition
@@ -89,8 +110,16 @@
//Dynamic composition threshold for deciding copybit usage.
double mDynThreshold;
+ bool mSwapRectEnable;
int mAlignedFBWidth;
int mAlignedFBHeight;
+ int mDirtyLayerIndex;
+ LayerCache mLayerCache;
+ FbCache mFbCache;
+ int getLayersChanging(hwc_context_t *ctx, hwc_display_contents_1_t *list,
+ int dpy);
+ int checkDirtyRect(hwc_context_t *ctx, hwc_display_contents_1_t *list,
+ int dpy);
};
}; //namespace qhwc