SurfaceFlinger: Change to support client target flip
- Add support to flip framebuffer target if
HWC2 implementation requests for it.
b/38114488
b/68271386
CRs-Fixed: 2057401
Change-Id: I91422ef60a139cbaf491db219b216cd1252e7e63
Signed-off-by: Madhuri Athota <mathota@codeaurora.org>
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 2753f11..66ad0f1 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -217,7 +217,7 @@
}
void DisplayDevice::swapBuffers(HWComposer& hwc) const {
- if (hwc.hasClientComposition(mHwcDisplayId)) {
+ if (hwc.hasClientComposition(mHwcDisplayId) || hwc.hasFlipClientTargetRequest(mHwcDisplayId)) {
mSurface.swapBuffers();
}
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index c0f8f96..7850243 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -565,6 +565,20 @@
return mDisplayData[displayId].hasDeviceComposition;
}
+bool HWComposer::hasFlipClientTargetRequest(int32_t displayId) const {
+ if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+ // Displays without a corresponding HWC display are never composed by
+ // the device
+ return false;
+ }
+ if (!isValidDisplay(displayId)) {
+ ALOGE("hasFlipClientTargetRequest: Invalid display %d", displayId);
+ return false;
+ }
+ return ((static_cast<uint32_t>(mDisplayData[displayId].displayRequests) &
+ static_cast<uint32_t>(HWC2::DisplayRequest::FlipClientTarget)) != 0);
+}
+
bool HWComposer::hasClientComposition(int32_t displayId) const {
if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
// Displays without a corresponding HWC display are always composed by
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index 74b3a38..c9e530d 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -108,6 +108,9 @@
// does this display have layers handled by HWC
bool hasDeviceComposition(int32_t displayId) const;
+ // does this display have pending request to flip client target
+ bool hasFlipClientTargetRequest(int32_t displayId) const;
+
// does this display have layers handled by GLES
bool hasClientComposition(int32_t displayId) const;