hwc: Add support for bandwidth check
Add support for checking whether the current frame's required
bandwidth can be handled by MDP.
The max limit is configurable via a property and the value is
derived from simulation runs and profiling
Conflicts:
libhwcomposer/hwc_mdpcomp.cpp
Change-Id: I46b46c346973fcb6487a8a656268171470ce69b9
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index 2f1670b..1e374aa 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -53,6 +53,7 @@
/* Initialize MDP comp*/
static bool init(hwc_context_t *ctx);
static void resetIdleFallBack() { sIdleFallBack = false; }
+ static void reset() { sCompBytesClaimed = 0; };
protected:
enum ePipeType {
@@ -142,6 +143,11 @@
bool isOnlyVideoDoable(hwc_context_t *ctx, hwc_display_contents_1_t* list);
/* checks for conditions where YUV layers cannot be bypassed */
bool isYUVDoable(hwc_context_t* ctx, hwc_layer_1_t* layer);
+ /* calcs bytes read by MDP for a given frame */
+ uint32_t calcMDPBytesRead(hwc_context_t *ctx,
+ hwc_display_contents_1_t* list);
+ /* checks if the required bandwidth exceeds a certain max */
+ bool bandwidthCheck(hwc_context_t *ctx, const uint32_t& size);
/* set up Border fill as Base pipe */
static bool setupBasePipe(hwc_context_t*);
@@ -167,6 +173,11 @@
static bool sDebugLogs;
static bool sIdleFallBack;
static int sMaxPipesPerMixer;
+ //Max bandwidth. Value is in GBPS. For ex: 2.3 means 2.3GBPS
+ static float sMaxBw;
+ //Tracks composition bytes claimed. Represented as the total w*h*bpp
+ //going to MDP mixers
+ static uint32_t sCompBytesClaimed;
static IdleInvalidator *idleInvalidator;
struct FrameInfo mCurrentFrame;
struct LayerCache mCachedFrame;