The gralloc API assumes system-wide reference counting of gralloc buffers. The host-GL accelerated gralloc maps buffers to host-side ColorBuffer objects, but was destroying them unconditionally in gralloc_free(), ignoring any additional references from gralloc_register_buffer(). This affected the SurfaceTexture gralloc buffers used by the Browser/WebView. For some reason these buffers are actually allocated by SurfaceFlinger and passed back to the WebView through Binder. But since SurfaceFlinger doesn't actually need the buffer for anything, sometime after the WebView has called gralloc_register_buffer() SurfaceFlinger calls gralloc_free() on it. This caused the host ColorBuffer to be destroyed long before the WebView is done using it. Change-Id: I33dbee887a48a6907041cf19e9f38a1f6c983eff
26 lines
1.8 KiB
Plaintext
26 lines
1.8 KiB
Plaintext
GL_ENRTY(GLint, rcGetRendererVersion)
|
|
GL_ENTRY(EGLint, rcGetEGLVersion, EGLint *major, EGLint *minor)
|
|
GL_ENTRY(EGLint, rcQueryEGLString, EGLenum name, void *buffer, EGLint bufferSize)
|
|
GL_ENTRY(EGLint, rcGetGLString, EGLenum name, void *buffer, EGLint bufferSize)
|
|
GL_ENTRY(EGLint, rcGetNumConfigs, uint32_t *numAttribs)
|
|
GL_ENTRY(EGLint, rcGetConfigs, uint32_t bufSize, GLuint *buffer)
|
|
GL_ENTRY(EGLint, rcChooseConfig, EGLint *attribs, uint32_t attribs_size, uint32_t *configs, uint32_t configs_size)
|
|
GL_ENTRY(EGLint, rcGetFBParam, EGLint param)
|
|
GL_ENTRY(uint32_t, rcCreateContext, uint32_t config, uint32_t share, uint32_t glVersion)
|
|
GL_ENTRY(void, rcDestroyContext, uint32_t context)
|
|
GL_ENTRY(uint32_t, rcCreateWindowSurface, uint32_t config, uint32_t width, uint32_t height)
|
|
GL_ENTRY(void, rcDestroyWindowSurface, uint32_t windowSurface)
|
|
GL_ENTRY(uint32_t, rcCreateColorBuffer, uint32_t width, uint32_t height, GLenum internalFormat)
|
|
GL_ENTRY(void, rcOpenColorBuffer, uint32_t colorbuffer)
|
|
GL_ENTRY(void, rcCloseColorBuffer, uint32_t colorbuffer)
|
|
GL_ENTRY(void, rcSetWindowColorBuffer, uint32_t windowSurface, uint32_t colorBuffer)
|
|
GL_ENTRY(int, rcFlushWindowColorBuffer, uint32_t windowSurface)
|
|
GL_ENTRY(EGLint, rcMakeCurrent, uint32_t context, uint32_t drawSurf, uint32_t readSurf)
|
|
GL_ENTRY(void, rcFBPost, uint32_t colorBuffer)
|
|
GL_ENTRY(void, rcFBSetSwapInterval, EGLint interval)
|
|
GL_ENTRY(void, rcBindTexture, uint32_t colorBuffer)
|
|
GL_ENTRY(void, rcBindRenderbuffer, uint32_t colorBuffer)
|
|
GL_ENTRY(EGLint, rcColorBufferCacheFlush, uint32_t colorbuffer, EGLint postCount,int forRead)
|
|
GL_ENTRY(void, rcReadColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels)
|
|
GL_ENTRY(int, rcUpdateColorBuffer, uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void *pixels)
|