Skip to content

Commit a15e488

Browse files
Jean-Baptiste QueruAndroid Code Review
authored andcommitted
Merge "Framebuffer: Support variable number of framebuffers in the UI"
2 parents 09e50cd + 8404343 commit a15e488

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

include/ui/FramebufferNativeWindow.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include <ui/egl/android_natives.h>
3131

32+
#define NUM_FRAME_BUFFERS 2
3233

3334
extern "C" EGLNativeWindowType android_createDisplaySurface(void);
3435

@@ -69,7 +70,7 @@ class FramebufferNativeWindow
6970
framebuffer_device_t* fbDev;
7071
alloc_device_t* grDev;
7172

72-
sp<NativeBuffer> buffers[2];
73+
sp<NativeBuffer> buffers[NUM_FRAME_BUFFERS];
7374
sp<NativeBuffer> front;
7475

7576
mutable Mutex mutex;

libs/ui/FramebufferNativeWindow.cpp

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ FramebufferNativeWindow::FramebufferNativeWindow()
8282
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
8383
int stride;
8484
int err;
85+
int i;
8586
err = framebuffer_open(module, &fbDev);
8687
LOGE_IF(err, "couldn't open framebuffer HAL (%s)", strerror(-err));
8788

@@ -95,27 +96,33 @@ FramebufferNativeWindow::FramebufferNativeWindow()
9596
mUpdateOnDemand = (fbDev->setUpdateRect != 0);
9697

9798
// initialize the buffer FIFO
98-
mNumBuffers = 2;
99-
mNumFreeBuffers = 2;
99+
mNumBuffers = NUM_FRAME_BUFFERS;
100+
mNumFreeBuffers = NUM_FRAME_BUFFERS;
100101
mBufferHead = mNumBuffers-1;
101-
buffers[0] = new NativeBuffer(
102-
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
103-
buffers[1] = new NativeBuffer(
104-
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
105-
106-
err = grDev->alloc(grDev,
107-
fbDev->width, fbDev->height, fbDev->format,
108-
GRALLOC_USAGE_HW_FB, &buffers[0]->handle, &buffers[0]->stride);
109-
110-
LOGE_IF(err, "fb buffer 0 allocation failed w=%d, h=%d, err=%s",
111-
fbDev->width, fbDev->height, strerror(-err));
112-
113-
err = grDev->alloc(grDev,
114-
fbDev->width, fbDev->height, fbDev->format,
115-
GRALLOC_USAGE_HW_FB, &buffers[1]->handle, &buffers[1]->stride);
116102

117-
LOGE_IF(err, "fb buffer 1 allocation failed w=%d, h=%d, err=%s",
118-
fbDev->width, fbDev->height, strerror(-err));
103+
for (i = 0; i < mNumBuffers; i++)
104+
{
105+
buffers[i] = new NativeBuffer(
106+
fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB);
107+
}
108+
109+
for (i = 0; i < mNumBuffers; i++)
110+
{
111+
err = grDev->alloc(grDev,
112+
fbDev->width, fbDev->height, fbDev->format,
113+
GRALLOC_USAGE_HW_FB, &buffers[i]->handle, &buffers[i]->stride);
114+
115+
LOGE_IF(err, "fb buffer %d allocation failed w=%d, h=%d, err=%s",
116+
i, fbDev->width, fbDev->height, strerror(-err));
117+
118+
if (err)
119+
{
120+
mNumBuffers = i;
121+
mNumFreeBuffers = i;
122+
mBufferHead = mNumBuffers-1;
123+
break;
124+
}
125+
}
119126

120127
const_cast<uint32_t&>(android_native_window_t::flags) = fbDev->flags;
121128
const_cast<float&>(android_native_window_t::xdpi) = fbDev->xdpi;

0 commit comments

Comments
 (0)