summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/surfaceflinger/DisplayDevice.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index 72f73f7..2708a90 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -179,7 +179,7 @@ void DisplayDevice::flip(const Region& dirty) const
b.left, b.top, b.width(), b.height());
}
#endif
-
+
mPageFlipCount++;
}
@@ -188,14 +188,21 @@ void DisplayDevice::swapBuffers(HWComposer& hwc) const {
// no HWC, we call eglSwapBuffers()
eglSwapBuffers(mDisplay, mSurface);
} else {
- if (hwc.hasGlesComposition(mType)) {
- if (hwc.supportsFramebufferTarget() ||
- mType >= DisplayDevice::DISPLAY_VIRTUAL) {
- // as of hwc 1.1 we always call eglSwapBuffers, however,
- // on older versions of HWC, we need to call it only on
- // virtual displays
+ // We have a valid HWC, but not all displays can use it, in particular
+ // the virtual displays are on their own.
+ // TODO: HWC 1.2 will allow virtual displays
+ if (mType >= DisplayDevice::DISPLAY_VIRTUAL) {
+ // always call eglSwapBuffers() for virtual displays
+ eglSwapBuffers(mDisplay, mSurface);
+ } else if (hwc.supportsFramebufferTarget()) {
+ // as of hwc 1.1 we always call eglSwapBuffers if we have some
+ // GLES layers
+ if (hwc.hasGlesComposition(mType)) {
eglSwapBuffers(mDisplay, mSurface);
}
+ } else {
+ // HWC doesn't have the framebuffer target, we don't call
+ // eglSwapBuffers(), since this is handled by HWComposer::commit().
}
}
}