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/ui/BufferMapper.cpp b/libs/ui/BufferMapper.cpp
index 85a029b..1a75c5d 100644
--- a/libs/ui/BufferMapper.cpp
+++ b/libs/ui/BufferMapper.cpp
@@ -17,14 +17,9 @@
#define LOG_TAG "BufferMapper"
#include <stdint.h>
-#include <unistd.h>
-#include <fcntl.h>
#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <utils/Errors.h>
-#include <utils/threads.h>
#include <utils/Log.h>
#include <ui/BufferMapper.h>
@@ -34,12 +29,6 @@
#include <hardware/gralloc.h>
-// ---------------------------------------------------------------------------
-// enable mapping debugging
-#define DEBUG_MAPPINGS 0
-// never remove mappings from the list
-#define DEBUG_MAPPINGS_KEEP_ALL 0
-// ---------------------------------------------------------------------------
namespace android {
// ---------------------------------------------------------------------------
@@ -57,34 +46,27 @@
}
}
-status_t BufferMapper::map(buffer_handle_t handle, void** addr, const void* id)
+status_t BufferMapper::registerBuffer(buffer_handle_t handle)
{
- Mutex::Autolock _l(mLock);
- status_t err = mAllocMod->map(mAllocMod, handle, addr);
- LOGW_IF(err, "map(...) failed %d (%s)", err, strerror(-err));
-#if DEBUG_MAPPINGS
- if (err == NO_ERROR)
- logMapLocked(handle, id);
-#endif
+ status_t err = mAllocMod->registerBuffer(mAllocMod, handle);
+ LOGW_IF(err, "registerBuffer(%p) failed %d (%s)",
+ handle, err, strerror(-err));
return err;
}
-status_t BufferMapper::unmap(buffer_handle_t handle, const void* id)
+status_t BufferMapper::unregisterBuffer(buffer_handle_t handle)
{
- Mutex::Autolock _l(mLock);
- status_t err = mAllocMod->unmap(mAllocMod, handle);
- LOGW_IF(err, "unmap(...) failed %d (%s)", err, strerror(-err));
-#if DEBUG_MAPPINGS
- if (err == NO_ERROR)
- logUnmapLocked(handle, id);
-#endif
+ status_t err = mAllocMod->unregisterBuffer(mAllocMod, handle);
+ LOGW_IF(err, "unregisterBuffer(%p) failed %d (%s)",
+ handle, err, strerror(-err));
return err;
}
-status_t BufferMapper::lock(buffer_handle_t handle, int usage, const Rect& bounds)
+status_t BufferMapper::lock(buffer_handle_t handle,
+ int usage, const Rect& bounds, void** vaddr)
{
status_t err = mAllocMod->lock(mAllocMod, handle, usage,
- bounds.left, bounds.top, bounds.width(), bounds.height());
+ bounds.left, bounds.top, bounds.width(), bounds.height(), vaddr);
LOGW_IF(err, "unlock(...) failed %d (%s)", err, strerror(-err));
return err;
}
@@ -96,65 +78,5 @@
return err;
}
-void BufferMapper::logMapLocked(buffer_handle_t handle, const void* id)
-{
- CallStack stack;
- stack.update(2);
-
- map_info_t info;
- info.id = id;
- info.stack = stack;
-
- ssize_t index = mMapInfo.indexOfKey(handle);
- if (index >= 0) {
- Vector<map_info_t>& infos = mMapInfo.editValueAt(index);
- infos.add(info);
- } else {
- Vector<map_info_t> infos;
- infos.add(info);
- mMapInfo.add(handle, infos);
- }
-}
-
-void BufferMapper::logUnmapLocked(buffer_handle_t handle, const void* id)
-{
- ssize_t index = mMapInfo.indexOfKey(handle);
- if (index < 0) {
- LOGE("unmapping %p which doesn't exist in our map!", handle);
- return;
- }
-
- Vector<map_info_t>& infos = mMapInfo.editValueAt(index);
- ssize_t count = infos.size();
- for (int i=0 ; i<count ; ) {
- if (infos[i].id == id) {
- infos.removeAt(i);
- --count;
- } else {
- ++i;
- }
- }
- if (count == 0) {
- mMapInfo.removeItemsAt(index, 1);
- }
-}
-
-void BufferMapper::dump(buffer_handle_t handle)
-{
- Mutex::Autolock _l(mLock);
- ssize_t index = mMapInfo.indexOfKey(handle);
- if (index < 0) {
- LOGD("handle %p is not mapped through BufferMapper", handle);
- return;
- }
-
- const Vector<map_info_t>& infos = mMapInfo.valueAt(index);
- ssize_t count = infos.size();
- for (int i=0 ; i<count ; i++) {
- LOGD("#%d", i);
- infos[i].stack.dump();
- }
-}
-
// ---------------------------------------------------------------------------
}; // namespace android