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