am a15e4886: Merge "Framebuffer: Support variable number of framebuffers in the UI"
* commit 'a15e4886de8f75f3cb137f51743d330414c910e8': Framebuffer: Support variable number of framebuffers in the UI
This commit is contained in:
commit
af10976583
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <ui/egl/android_natives.h>
|
||||
|
||||
#define NUM_FRAME_BUFFERS 2
|
||||
|
||||
extern "C" EGLNativeWindowType android_createDisplaySurface(void);
|
||||
|
||||
|
@ -72,7 +73,7 @@ private:
|
|||
framebuffer_device_t* fbDev;
|
||||
alloc_device_t* grDev;
|
||||
|
||||
sp<NativeBuffer> buffers[2];
|
||||
sp<NativeBuffer> buffers[NUM_FRAME_BUFFERS];
|
||||
sp<NativeBuffer> front;
|
||||
|
||||
mutable Mutex mutex;
|
||||
|
|
|
@ -83,6 +83,7 @@ FramebufferNativeWindow::FramebufferNativeWindow()
|
|||
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
|
||||
int stride;
|
||||
int err;
|
||||
int i;
|
||||
err = framebuffer_open(module, &fbDev);
|
||||
LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err));
|
||||
|
||||
|
@ -96,27 +97,33 @@ FramebufferNativeWindow::FramebufferNativeWindow()
|
|||
mUpdateOnDemand = (fbDev->setUpdateRect != 0);
|
||||
|
||||
// initialize the buffer FIFO
|
||||
mNumBuffers = 2;
|
||||
mNumFreeBuffers = 2;
|
||||
mNumBuffers = NUM_FRAME_BUFFERS;
|
||||
mNumFreeBuffers = NUM_FRAME_BUFFERS;
|
||||
mBufferHead = mNumBuffers-1;
|
||||
buffers[0] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
buffers[1] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[0]->handle, &buffers[0]->stride);
|
||||
|
||||
LOGE_IF(err, "fb buffer 0 allocation failed w=%d, h=%d, err=%s",
|
||||
fbDev->width, fbDev->height, strerror(-err));
|
||||
for (i = 0; i < mNumBuffers; i++)
|
||||
{
|
||||
buffers[i] = new NativeBuffer(
|
||||
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
|
||||
}
|
||||
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[1]->handle, &buffers[1]->stride);
|
||||
for (i = 0; i < mNumBuffers; i++)
|
||||
{
|
||||
err = grDev->alloc(grDev,
|
||||
fbDev->width, fbDev->height, fbDev->format,
|
||||
GRALLOC_USAGE_HW_FB, &buffers[i]->handle, &buffers[i]->stride);
|
||||
|
||||
LOGE_IF(err, "fb buffer 1 allocation failed w=%d, h=%d, err=%s",
|
||||
fbDev->width, fbDev->height, strerror(-err));
|
||||
LOGE_IF(err, "fb buffer %d allocation failed w=%d, h=%d, err=%s",
|
||||
i, fbDev->width, fbDev->height, strerror(-err));
|
||||
|
||||
if (err)
|
||||
{
|
||||
mNumBuffers = i;
|
||||
mNumFreeBuffers = i;
|
||||
mBufferHead = mNumBuffers-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const_cast<uint32_t&>(ANativeWindow::flags) = fbDev->flags;
|
||||
const_cast<float&>(ANativeWindow::xdpi) = fbDev->xdpi;
|
||||
|
|
Loading…
Reference in New Issue