hwc/qservice: Add support for toggling bwc over binder
Remove support for toggling BWC via property and add support to
toggle BWC over binder. This will take effect only on targets where
the driver enables BWC.
Example to disable BWC:
adb shell service call display.qservice 17 i32 0
Where 17 is the code to toggle BWC, 0 to disable.
Change-Id: Ie534ab4643a72d47f5a985fe0b32e134bf0e7af3
diff --git a/libhwcomposer/hwc_qclient.cpp b/libhwcomposer/hwc_qclient.cpp
index 8e8066e..249affc 100644
--- a/libhwcomposer/hwc_qclient.cpp
+++ b/libhwcomposer/hwc_qclient.cpp
@@ -41,6 +41,7 @@
using namespace qService;
using namespace qhwc;
using namespace overlay;
+using namespace qdutils;
namespace qClient {
@@ -251,6 +252,17 @@
MDPComp::setMaxPipesPerMixer(value);
}
+static void toggleBWC(hwc_context_t* ctx, const Parcel* inParcel) {
+ uint32_t enable = (uint32_t)inParcel->readInt32();
+ if(MDPVersion::getInstance().supportsBWC()) {
+ Locker::Autolock _sl(ctx->mDrawLock);
+ ctx->mBWCEnabled = (bool) enable;
+ ALOGI("%s: Set BWC to %d", __FUNCTION__, enable);
+ } else {
+ ALOGI("%s: Target doesn't support BWC", __FUNCTION__);
+ }
+}
+
status_t QClient::notifyCallback(uint32_t command, const Parcel* inParcel,
Parcel* outParcel) {
status_t ret = NO_ERROR;
@@ -299,6 +311,9 @@
case IQService::SET_MAX_PIPES_PER_MIXER:
setMaxPipesPerMixer(mHwcContext, inParcel);
break;
+ case IQService::TOGGLE_BWC:
+ toggleBWC(mHwcContext, inParcel);
+ break;
default:
ret = NO_ERROR;
}