summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-03-17 00:10:10 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-03-17 00:10:10 -0700
commit25594e1984125081878d2ea057700366a34a8ccf (patch)
tree7427040e8e7fe0018d9a264811016d08ce41200a
parent7a0949c60df2085fc38eea71d78f9c17eb26cd65 (diff)
parentf40e638ec62cd9e1a1851809b7c8bf5e4187fad2 (diff)
downloadframeworks_base-25594e1984125081878d2ea057700366a34a8ccf.zip
frameworks_base-25594e1984125081878d2ea057700366a34a8ccf.tar.gz
frameworks_base-25594e1984125081878d2ea057700366a34a8ccf.tar.bz2
am f40e638e: fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out
* commit 'f40e638ec62cd9e1a1851809b7c8bf5e4187fad2': fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out
-rw-r--r--include/utils/Vector.h3
-rw-r--r--libs/ui/Region.cpp12
-rw-r--r--services/surfaceflinger/Layer.cpp12
3 files changed, 21 insertions, 6 deletions
diff --git a/include/utils/Vector.h b/include/utils/Vector.h
index ec851bd..6fd307f 100644
--- a/include/utils/Vector.h
+++ b/include/utils/Vector.h
@@ -162,6 +162,9 @@ public:
inline status_t sort(compar_t cmp);
inline status_t sort(compar_r_t cmp, void* state);
+ // for debugging only
+ inline size_t getItemSize() const { return itemSize(); }
+
protected:
virtual void do_construct(void* storage, size_t num) const;
virtual void do_destroy(void* storage, size_t num) const;
diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp
index 1994f6a..a060a5f 100644
--- a/libs/ui/Region.cpp
+++ b/libs/ui/Region.cpp
@@ -56,6 +56,9 @@ Region::Region()
Region::Region(const Region& rhs)
: mBounds(rhs.mBounds), mStorage(rhs.mStorage)
{
+#if VALIDATE_REGIONS
+ validate(rhs, "rhs copy-ctor");
+#endif
}
Region::Region(const Rect& rhs)
@@ -76,7 +79,8 @@ Region::~Region()
Region& Region::operator = (const Region& rhs)
{
#if VALIDATE_REGIONS
- validate(rhs, "operator=");
+ validate(*this, "this->operator=");
+ validate(rhs, "rhs.operator=");
#endif
mBounds = rhs.mBounds;
mStorage = rhs.mStorage;
@@ -366,6 +370,12 @@ void Region::boolean_operation(int op, Region& dst,
const Region& lhs,
const Region& rhs, int dx, int dy)
{
+#if VALIDATE_REGIONS
+ validate(lhs, "boolean_operation (before): lhs");
+ validate(rhs, "boolean_operation (before): rhs");
+ validate(dst, "boolean_operation (before): dst");
+#endif
+
size_t lhs_count;
Rect const * const lhs_rects = lhs.getArray(&lhs_count);
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 1297363..cd24478 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -858,11 +858,13 @@ status_t Layer::BufferManager::resize(size_t size,
Mutex::Autolock _l(mLock);
if (size < mNumBuffers) {
- // Move the active texture into slot 0
- BufferData activeBufferData = mBufferData[mActiveBufferIndex];
- mBufferData[mActiveBufferIndex] = mBufferData[0];
- mBufferData[0] = activeBufferData;
- mActiveBufferIndex = 0;
+ // If there is an active texture, move it into slot 0 if needed
+ if (mActiveBufferIndex > 0) {
+ BufferData activeBufferData = mBufferData[mActiveBufferIndex];
+ mBufferData[mActiveBufferIndex] = mBufferData[0];
+ mBufferData[0] = activeBufferData;
+ mActiveBufferIndex = 0;
+ }
// Free the buffers that are no longer needed.
for (size_t i = size; i < mNumBuffers; i++) {