Merge change 25192 into eclair
* changes:
Some improvements for wallpaper configuration.
diff --git a/include/ui/Surface.h b/include/ui/Surface.h
index 2cedeb6..118fb83 100644
--- a/include/ui/Surface.h
+++ b/include/ui/Surface.h
@@ -212,7 +212,7 @@
void setUsage(uint32_t reqUsage);
- uint32_t getUsage() const;
+ bool getUsage(uint32_t* usage);
// constants
sp<SurfaceComposerClient> mClient;
@@ -227,6 +227,7 @@
// protected by mSurfaceLock
Rect mSwapRectangle;
uint32_t mUsage;
+ int32_t mUsageChanged;
// protected by mSurfaceLock. These are also used from lock/unlock
// but in that case, they must be called form the same thread.
diff --git a/libs/ui/Surface.cpp b/libs/ui/Surface.cpp
index 4dab3a2..c3fbea2 100644
--- a/libs/ui/Surface.cpp
+++ b/libs/ui/Surface.cpp
@@ -361,6 +361,7 @@
const_cast<uint32_t&>(android_native_window_t::flags) = 0;
// be default we request a hardware surface
mUsage = GRALLOC_USAGE_HW_RENDER;
+ mUsageChanged = true;
mNeedFullUpdate = false;
}
@@ -498,12 +499,13 @@
return bufIdx;
}
- const uint32_t usage(getUsage());
+ // FIXME: in case of failure below, we need to undo the dequeue
+
+ uint32_t usage;
+ const bool usageChanged = getUsage(&usage);
const sp<SurfaceBuffer>& backBuffer(mBuffers[bufIdx]);
- if (backBuffer == 0 ||
- uint32_t(backBuffer->usage) != usage ||
- mSharedBufferClient->needNewBuffer(bufIdx))
- {
+ if ((backBuffer == 0) || usageChanged ||
+ mSharedBufferClient->needNewBuffer(bufIdx)) {
err = getBufferLocked(bufIdx, usage);
LOGE_IF(err, "getBufferLocked(%ld, %08x) failed (%s)",
bufIdx, usage, strerror(-err));
@@ -598,13 +600,21 @@
void Surface::setUsage(uint32_t reqUsage)
{
Mutex::Autolock _l(mSurfaceLock);
- mUsage = reqUsage;
+ if (mUsage != reqUsage) {
+ mUsageChanged = true;
+ mUsage = reqUsage;
+ }
}
-uint32_t Surface::getUsage() const
+bool Surface::getUsage(uint32_t* usage)
{
Mutex::Autolock _l(mSurfaceLock);
- return mUsage;
+ *usage = mUsage;
+ if (mUsageChanged) {
+ mUsageChanged = false;
+ return true;
+ }
+ return false;
}
// ----------------------------------------------------------------------------
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index d680b8a..83552dd 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -1490,10 +1490,13 @@
/// ---------- Expanded View --------------
pixelFormat = PixelFormat.TRANSLUCENT;
- if (false) {
- bg = mExpandedView.getBackground();
- if (bg != null) {
- pixelFormat = bg.getOpacity();
+ bg = mExpandedView.getBackground();
+ if (bg != null) {
+ pixelFormat = bg.getOpacity();
+ if (pixelFormat != PixelFormat.TRANSLUCENT) {
+ // we want good-looking gradients, so we force a 8-bits per
+ // pixel format.
+ pixelFormat = PixelFormat.RGBX_8888;
}
}