hwc: Move resource checks to a common function.

Move resource checks, pipes, stages of mixer, bandwidth to a common
function and use it from all strategies.

Change-Id: I161fc957e2793d543b5943fbd23ae3607a4cfc87
This commit is contained in:
Saurabh Shah
2013-11-20 09:50:12 -08:00
parent b00ab3a987
commit 173f424d32
2 changed files with 30 additions and 37 deletions

View File

@@ -591,18 +591,8 @@ bool MDPComp::fullMDPComp(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
mCurrentFrame.mdpCount = mCurrentFrame.layerCount - mCurrentFrame.fbCount - mCurrentFrame.mdpCount = mCurrentFrame.layerCount - mCurrentFrame.fbCount -
mCurrentFrame.dropCount; mCurrentFrame.dropCount;
if(mCurrentFrame.mdpCount > sMaxPipesPerMixer) { if(!resourceCheck(ctx, list)) {
ALOGD_IF(isDebug(), "%s: Exceeds MAX_PIPES_PER_MIXER",__FUNCTION__); ALOGD_IF(isDebug(), "%s: resource check failed", __FUNCTION__);
return false;
}
if(!arePipesAvailable(ctx, list)) {
return false;
}
uint32_t size = calcMDPBytesRead(ctx, list);
if(!bandwidthCheck(ctx, size)) {
ALOGD_IF(isDebug(), "%s: Exceeds bandwidth",__FUNCTION__);
return false; return false;
} }
@@ -662,18 +652,8 @@ bool MDPComp::cacheBasedComp(hwc_context_t *ctx,
return false; return false;
} }
if(mdpCount > (sMaxPipesPerMixer - 1)) { // -1 since FB is used if(!resourceCheck(ctx, list)) {
ALOGD_IF(isDebug(), "%s: Exceeds MAX_PIPES_PER_MIXER",__FUNCTION__); ALOGD_IF(isDebug(), "%s: resource check failed", __FUNCTION__);
return false;
}
if(!arePipesAvailable(ctx, list)) {
return false;
}
uint32_t size = calcMDPBytesRead(ctx, list);
if(!bandwidthCheck(ctx, size)) {
ALOGD_IF(isDebug(), "%s: Exceeds bandwidth",__FUNCTION__);
return false; return false;
} }
@@ -733,7 +713,8 @@ bool MDPComp::loadBasedComp(hwc_context_t *ctx,
mCurrentFrame.fbCount = batchSize; mCurrentFrame.fbCount = batchSize;
mCurrentFrame.mdpCount = mCurrentFrame.layerCount - batchSize; mCurrentFrame.mdpCount = mCurrentFrame.layerCount - batchSize;
if(!arePipesAvailable(ctx, list)) { if(!resourceCheck(ctx, list)) {
ALOGD_IF(isDebug(), "%s: resource check failed", __FUNCTION__);
return false; return false;
} }
@@ -773,18 +754,8 @@ bool MDPComp::isOnlyVideoDoable(hwc_context_t *ctx,
if(!mdpCount) if(!mdpCount)
return false; return false;
if(mdpCount > (sMaxPipesPerMixer - fbNeeded)) { if(!resourceCheck(ctx, list)) {
ALOGD_IF(isDebug(), "%s: Exceeds MAX_PIPES_PER_MIXER",__FUNCTION__); ALOGD_IF(isDebug(), "%s: resource check failed", __FUNCTION__);
return false;
}
if(!arePipesAvailable(ctx, list)) {
return false;
}
uint32_t size = calcMDPBytesRead(ctx, list);
if(!bandwidthCheck(ctx, size)) {
ALOGD_IF(isDebug(), "%s: Exceeds bandwidth",__FUNCTION__);
return false; return false;
} }
@@ -1108,6 +1079,27 @@ bool MDPComp::programYUV(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
return true; return true;
} }
bool MDPComp::resourceCheck(hwc_context_t *ctx,
hwc_display_contents_1_t *list) {
const bool fbUsed = mCurrentFrame.fbCount;
if(mCurrentFrame.mdpCount > sMaxPipesPerMixer - fbUsed) {
ALOGD_IF(isDebug(), "%s: Exceeds MAX_PIPES_PER_MIXER",__FUNCTION__);
return false;
}
if(!arePipesAvailable(ctx, list)) {
return false;
}
uint32_t size = calcMDPBytesRead(ctx, list);
if(!bandwidthCheck(ctx, size)) {
ALOGD_IF(isDebug(), "%s: Exceeds bandwidth",__FUNCTION__);
return false;
}
return true;
}
uint32_t MDPComp::calcMDPBytesRead(hwc_context_t *ctx, uint32_t MDPComp::calcMDPBytesRead(hwc_context_t *ctx,
hwc_display_contents_1_t* list) { hwc_display_contents_1_t* list) {
uint32_t size = 0; uint32_t size = 0;

View File

@@ -192,6 +192,7 @@ protected:
bool programYUV(hwc_context_t *ctx, hwc_display_contents_1_t* list); bool programYUV(hwc_context_t *ctx, hwc_display_contents_1_t* list);
void reset(const int& numAppLayers, hwc_display_contents_1_t* list); void reset(const int& numAppLayers, hwc_display_contents_1_t* list);
bool isSupportedForMDPComp(hwc_context_t *ctx, hwc_layer_1_t* layer); bool isSupportedForMDPComp(hwc_context_t *ctx, hwc_layer_1_t* layer);
bool resourceCheck(hwc_context_t *ctx, hwc_display_contents_1_t *list);
int mDpy; int mDpy;
static bool sEnabled; static bool sEnabled;