update surfaceflinger, libui and libagl to the new gralloc api
- Currently the lock/unlock path is naive and is done for each drawing operation (glDrawElements and glDrawArrays). this should be improved eventually.
- factor all the lock/unlock code in SurfaceBuffer.
- fixed "showupdate" so it works even when we don't have preserving eglSwapBuffers().
- improved the situation with the dirty-region and fixed a problem that caused GL apps to not update.
- make use of LightRefBase() where needed, instead of duplicating its implementation
- add LightRefBase::getStrongCount()
- renamed EGLNativeWindowSurface.cpp to FramebufferNativeWindow.cpp
- disabled copybits test, since it clashes with the new gralloc api
- Camera/Video will be fixed later when we rework the overlay apis
diff --git a/libs/surfaceflinger/LayerBitmap.cpp b/libs/surfaceflinger/LayerBitmap.cpp
index d633a2d..38d4bcf 100644
--- a/libs/surfaceflinger/LayerBitmap.cpp
+++ b/libs/surfaceflinger/LayerBitmap.cpp
@@ -52,10 +52,7 @@
Buffer::~Buffer()
{
if (handle) {
- BufferAllocator& allocator = BufferAllocator::get();
- if (usage & BufferAllocator::USAGE_SW_READ_MASK) {
- allocator.unmap(handle);
- }
+ BufferAllocator& allocator(BufferAllocator::get());
allocator.free(handle);
}
}
@@ -107,9 +104,6 @@
err = allocator.alloc(w, h, format, usage, &handle, &stride);
if (err == NO_ERROR) {
- if (usage & BufferAllocator::USAGE_SW_READ_MASK) {
- err = allocator.map(handle, &bits);
- }
if (err == NO_ERROR) {
width = w;
height = h;
@@ -120,31 +114,22 @@
return err;
}
-status_t Buffer::getBitmapSurface(copybit_image_t* img) const
+status_t Buffer::lock(GGLSurface* sur, uint32_t usage)
{
- img->w = stride ?: width;
- img->h = mVStride ?: height;
- img->format = format;
-
- // FIXME: this should use a native_handle
- img->offset = 0;
- img->base = bits;
- img->fd = getHandle()->data[0];
-
- return NO_ERROR;
+ status_t res = SurfaceBuffer::lock(usage);
+ if (res == NO_ERROR && sur) {
+ sur->version = sizeof(GGLSurface);
+ sur->width = width;
+ sur->height = height;
+ sur->stride = stride;
+ sur->format = format;
+ sur->vstride = mVStride;
+ sur->data = static_cast<GGLubyte*>(bits);
+ }
+ return res;
}
-status_t Buffer::getBitmapSurface(GGLSurface* sur) const
-{
- sur->version = sizeof(GGLSurface);
- sur->width = width;
- sur->height = height;
- sur->stride = stride;
- sur->format = format;
- sur->vstride = mVStride;
- sur->data = static_cast<GGLubyte*>(bits);
- return NO_ERROR;
-}
+
// ===========================================================================
// LayerBitmap