summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Naseer Ahmed <naseer@codeaurora.org> 2012-06-29 12:02:32 -0700
committer Iliyan Malchev <malchev@google.com> 2012-07-09 22:04:19 -0700
commit0bc64be3f5198f8dda1ced21bbc957a1d76efbb7 (patch)
tree4fa7dd1ad90ea500c918122c63a5d9019aafe9c9
parent07912f50930cf8cea2bc5f8f94e014c31af583b6 (diff)
libs/ui: Add support for triple framebuffers
Change-Id: I90dd38deeeda9a3785b87286cc7d252c6f948750
-rw-r--r--include/ui/FramebufferNativeWindow.h5
-rw-r--r--libs/ui/FramebufferNativeWindow.cpp18
2 files changed, 15 insertions, 8 deletions
diff --git a/include/ui/FramebufferNativeWindow.h b/include/ui/FramebufferNativeWindow.h
index b202b95b1c..8dd21097ad 100644
--- a/include/ui/FramebufferNativeWindow.h
+++ b/include/ui/FramebufferNativeWindow.h
@@ -28,7 +28,8 @@
#include <ui/ANativeObjectBase.h>
#include <ui/Rect.h>
-#define NUM_FRAME_BUFFERS 2
+#define MIN_NUM_FRAME_BUFFERS 2
+#define MAX_NUM_FRAME_BUFFERS 3
extern "C" EGLNativeWindowType android_createDisplaySurface(void);
@@ -74,7 +75,7 @@ private:
framebuffer_device_t* fbDev;
alloc_device_t* grDev;
- sp<NativeBuffer> buffers[NUM_FRAME_BUFFERS];
+ sp<NativeBuffer> buffers[MAX_NUM_FRAME_BUFFERS];
sp<NativeBuffer> front;
mutable Mutex mutex;
diff --git a/libs/ui/FramebufferNativeWindow.cpp b/libs/ui/FramebufferNativeWindow.cpp
index dec99b6c70..a1f204c065 100644
--- a/libs/ui/FramebufferNativeWindow.cpp
+++ b/libs/ui/FramebufferNativeWindow.cpp
@@ -92,8 +92,13 @@ FramebufferNativeWindow::FramebufferNativeWindow()
mUpdateOnDemand = (fbDev->setUpdateRect != 0);
// initialize the buffer FIFO
- mNumBuffers = NUM_FRAME_BUFFERS;
- mNumFreeBuffers = NUM_FRAME_BUFFERS;
+ if(fbDev->numFramebuffers >= MIN_NUM_FRAME_BUFFERS &&
+ fbDev->numFramebuffers <= MAX_NUM_FRAME_BUFFERS){
+ mNumBuffers = fbDev->numFramebuffers;
+ } else {
+ mNumBuffers = MIN_NUM_FRAME_BUFFERS;
+ }
+ mNumFreeBuffers = mNumBuffers;
mBufferHead = mNumBuffers-1;
/*
@@ -154,10 +159,11 @@ FramebufferNativeWindow::FramebufferNativeWindow()
FramebufferNativeWindow::~FramebufferNativeWindow()
{
if (grDev) {
- if (buffers[0] != NULL)
- grDev->free(grDev, buffers[0]->handle);
- if (buffers[1] != NULL)
- grDev->free(grDev, buffers[1]->handle);
+ for(int i = 0; i < mNumBuffers; i++) {
+ if (buffers[i] != NULL) {
+ grDev->free(grDev, buffers[i]->handle);
+ }
+ }
gralloc_close(grDev);
}