bug#460672 framebuffer surface can't keep triple buffer if define NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
[root cause ] framebuffer surface is in the same process of surface flinger [changes ] call IGraphicBufferProducer::allocateBuffers on producer inside the DisplayDevice constructor to force-allocate all three buffers. [side effects] none [self test ]<tshark, enter and exit mainmenu>: ok [reviewers ] zhongjun.chen [change_type ] AOB --> google_original [tag_product ] common Change-Id: Ideb75d3aa1ed23b2fa4d263a120ea3ca39d01361
This commit is contained in:
parent
21145beae7
commit
d40a35f61d
@ -88,7 +88,8 @@ DisplayDevice::DisplayDevice(
|
|||||||
mPowerMode(HWC_POWER_MODE_OFF),
|
mPowerMode(HWC_POWER_MODE_OFF),
|
||||||
mActiveConfig(0)
|
mActiveConfig(0)
|
||||||
{
|
{
|
||||||
mNativeWindow = new Surface(producer, false);
|
Surface* surface;
|
||||||
|
mNativeWindow = surface = new Surface(producer, false);
|
||||||
ANativeWindow* const window = mNativeWindow.get();
|
ANativeWindow* const window = mNativeWindow.get();
|
||||||
char property[PROPERTY_VALUE_MAX];
|
char property[PROPERTY_VALUE_MAX];
|
||||||
|
|
||||||
@ -96,14 +97,14 @@ DisplayDevice::DisplayDevice(
|
|||||||
* Create our display's surface
|
* Create our display's surface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
EGLSurface surface;
|
EGLSurface eglSurface;
|
||||||
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||||
if (config == EGL_NO_CONFIG) {
|
if (config == EGL_NO_CONFIG) {
|
||||||
config = RenderEngine::chooseEglConfig(display, format);
|
config = RenderEngine::chooseEglConfig(display, format);
|
||||||
}
|
}
|
||||||
surface = eglCreateWindowSurface(display, config, window, NULL);
|
eglSurface = eglCreateWindowSurface(display, config, window, NULL);
|
||||||
eglQuerySurface(display, surface, EGL_WIDTH, &mDisplayWidth);
|
eglQuerySurface(display, eglSurface, EGL_WIDTH, &mDisplayWidth);
|
||||||
eglQuerySurface(display, surface, EGL_HEIGHT, &mDisplayHeight);
|
eglQuerySurface(display, eglSurface, EGL_HEIGHT, &mDisplayHeight);
|
||||||
|
|
||||||
// Make sure that composition can never be stalled by a virtual display
|
// Make sure that composition can never be stalled by a virtual display
|
||||||
// consumer that isn't processing buffers fast enough. We have to do this
|
// consumer that isn't processing buffers fast enough. We have to do this
|
||||||
@ -117,7 +118,7 @@ DisplayDevice::DisplayDevice(
|
|||||||
|
|
||||||
mConfig = config;
|
mConfig = config;
|
||||||
mDisplay = display;
|
mDisplay = display;
|
||||||
mSurface = surface;
|
mSurface = eglSurface;
|
||||||
mFormat = format;
|
mFormat = format;
|
||||||
mPageFlipCount = 0;
|
mPageFlipCount = 0;
|
||||||
mViewport.makeInvalid();
|
mViewport.makeInvalid();
|
||||||
@ -148,6 +149,10 @@ DisplayDevice::DisplayDevice(
|
|||||||
|
|
||||||
// initialize the display orientation transform.
|
// initialize the display orientation transform.
|
||||||
setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
|
setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
|
||||||
|
|
||||||
|
#ifdef NUM_FRAMEBUFFER_SURFACE_BUFFERS
|
||||||
|
surface->allocateBuffers();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayDevice::~DisplayDevice() {
|
DisplayDevice::~DisplayDevice() {
|
||||||
|
Loading…
Reference in New Issue
Block a user