libs/ui: Add support for triple framebuffers
Change-Id: I90dd38deeeda9a3785b87286cc7d252c6f948750
This commit is contained in:
parent
07912f5093
commit
0bc64be3f5
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue