am 05813b0e: Merge changes I244b5469,I32044e91 into gingerbread
* commit '05813b0eb92cb1bc79607ee402f14ca1e4b43f6d': [3253328, 3171580] Treat GONE and INVISIBLE views the same when calculating transparent regions [3171580] Fix two typos related to fixed-size buffers
This commit is contained in:
@@ -3304,7 +3304,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
boolean noneOfTheChildrenAreTransparent = true;
|
||||
for (int i = 0; i < count; i++) {
|
||||
final View child = children[i];
|
||||
if ((child.mViewFlags & VISIBILITY_MASK) != GONE || child.getAnimation() != null) {
|
||||
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) {
|
||||
if (!child.gatherTransparentRegion(region)) {
|
||||
noneOfTheChildrenAreTransparent = false;
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ Layer::Layer(SurfaceFlinger* flinger,
|
||||
mSecure(false),
|
||||
mTextureManager(),
|
||||
mBufferManager(mTextureManager),
|
||||
mWidth(0), mHeight(0), mFixedSize(false)
|
||||
mWidth(0), mHeight(0), mNeedsScaling(false), mFixedSize(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -216,13 +216,10 @@ slowpath:
|
||||
|
||||
void Layer::drawForSreenShot() const
|
||||
{
|
||||
bool currentFixedSize = mFixedSize;
|
||||
bool currentBlending = mNeedsBlending;
|
||||
const_cast<Layer*>(this)->mFixedSize = false;
|
||||
const_cast<Layer*>(this)->mFixedSize = true;
|
||||
const bool currentFiltering = mNeedsFiltering;
|
||||
const_cast<Layer*>(this)->mNeedsFiltering = true;
|
||||
LayerBase::drawForSreenShot();
|
||||
const_cast<Layer*>(this)->mFixedSize = currentFixedSize;
|
||||
const_cast<Layer*>(this)->mNeedsBlending = currentBlending;
|
||||
const_cast<Layer*>(this)->mNeedsFiltering = currentFiltering;
|
||||
}
|
||||
|
||||
void Layer::onDraw(const Region& clip) const
|
||||
@@ -260,11 +257,10 @@ void Layer::onDraw(const Region& clip) const
|
||||
bool Layer::needsFiltering() const
|
||||
{
|
||||
if (!(mFlags & DisplayHardware::SLOW_CONFIG)) {
|
||||
// NOTE: there is a race here, because mFixedSize is updated in a
|
||||
// binder transaction. however, it doesn't really matter since it is
|
||||
// evaluated each time we draw. To be perfectly correct, this flag
|
||||
// would have to be associated with a buffer.
|
||||
if (mFixedSize)
|
||||
// if our buffer is not the same size than ourselves,
|
||||
// we need filtering.
|
||||
Mutex::Autolock _l(mLock);
|
||||
if (mNeedsScaling)
|
||||
return true;
|
||||
}
|
||||
return LayerBase::needsFiltering();
|
||||
@@ -321,6 +317,7 @@ sp<GraphicBuffer> Layer::requestBuffer(int index,
|
||||
Mutex::Autolock _l(mLock);
|
||||
|
||||
// zero means default
|
||||
mFixedSize = reqWidth && reqHeight;
|
||||
if (!reqFormat) reqFormat = mFormat;
|
||||
if (!reqWidth) reqWidth = mWidth;
|
||||
if (!reqHeight) reqHeight = mHeight;
|
||||
@@ -334,6 +331,7 @@ sp<GraphicBuffer> Layer::requestBuffer(int index,
|
||||
mReqWidth = reqWidth;
|
||||
mReqHeight = reqHeight;
|
||||
mReqFormat = reqFormat;
|
||||
mNeedsScaling = mWidth != mReqWidth || mHeight != mReqHeight;
|
||||
|
||||
lcblk->reallocateAllExcept(index);
|
||||
}
|
||||
@@ -457,6 +455,7 @@ void Layer::setBufferSize(uint32_t w, uint32_t h) {
|
||||
Mutex::Autolock _l(mLock);
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
mNeedsScaling = mWidth != mReqWidth || mHeight != mReqHeight;
|
||||
}
|
||||
|
||||
bool Layer::isFixedSize() const {
|
||||
|
||||
@@ -230,6 +230,7 @@ private:
|
||||
uint32_t mReqWidth;
|
||||
uint32_t mReqHeight;
|
||||
uint32_t mReqFormat;
|
||||
bool mNeedsScaling;
|
||||
bool mFixedSize;
|
||||
};
|
||||
|
||||
|
||||
@@ -216,14 +216,10 @@ uint32_t LayerBase::doTransaction(uint32_t flags)
|
||||
flags |= eVisibleRegion;
|
||||
this->contentDirty = true;
|
||||
|
||||
mNeedsFiltering = false;
|
||||
if (!(mFlags & DisplayHardware::SLOW_CONFIG)) {
|
||||
// we may use linear filtering, if the matrix scales us
|
||||
const uint8_t type = temp.transform.getType();
|
||||
if (!temp.transform.preserveRects() || (type >= Transform::SCALE)) {
|
||||
mNeedsFiltering = true;
|
||||
}
|
||||
}
|
||||
// we may use linear filtering, if the matrix scales us
|
||||
const uint8_t type = temp.transform.getType();
|
||||
mNeedsFiltering = (!temp.transform.preserveRects() ||
|
||||
(type >= Transform::SCALE));
|
||||
}
|
||||
|
||||
// Commit the transaction
|
||||
|
||||
@@ -185,7 +185,9 @@ public:
|
||||
/**
|
||||
* needsLinearFiltering - true if this surface needs filtering
|
||||
*/
|
||||
virtual bool needsFiltering() const { return mNeedsFiltering; }
|
||||
virtual bool needsFiltering() const {
|
||||
return (!(mFlags & DisplayHardware::SLOW_CONFIG)) && mNeedsFiltering;
|
||||
}
|
||||
|
||||
/**
|
||||
* isSecure - true if this surface is secure, that is if it prevents
|
||||
|
||||
Reference in New Issue
Block a user