diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-01-09 17:51:23 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-01-09 17:51:23 -0800 |
commit | 276293246ea9cbc0a578a7697cc48930376ec0e9 (patch) | |
tree | 03804488c60dda65699333d2311c8d1842ec4b65 /libs/surfaceflinger/LayerBase.cpp | |
parent | e09fd9e819c23dc90bca68375645e15544861330 (diff) | |
download | frameworks_native-276293246ea9cbc0a578a7697cc48930376ec0e9.zip frameworks_native-276293246ea9cbc0a578a7697cc48930376ec0e9.tar.gz frameworks_native-276293246ea9cbc0a578a7697cc48930376ec0e9.tar.bz2 |
auto import from //branches/cupcake/...@125939
Diffstat (limited to 'libs/surfaceflinger/LayerBase.cpp')
-rw-r--r-- | libs/surfaceflinger/LayerBase.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index af353e2..bdefba3 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -53,14 +53,15 @@ Vector<GLuint> LayerBase::deletedTextures; int32_t LayerBase::sIdentity = 0; LayerBase::LayerBase(SurfaceFlinger* flinger, DisplayID display) - : dpy(display), invalidate(false), + : dpy(display), contentDirty(false), mFlinger(flinger), mTransformed(false), mOrientation(0), mCanUseCopyBit(false), mTransactionFlags(0), mPremultipliedAlpha(true), - mIdentity(uint32_t(android_atomic_inc(&sIdentity))) + mIdentity(uint32_t(android_atomic_inc(&sIdentity))), + mInvalidate(0) { const DisplayHardware& hw(flinger->graphicPlane(0).displayHardware()); mFlags = hw.getFlags(); @@ -205,7 +206,7 @@ uint32_t LayerBase::doTransaction(uint32_t flags) if (temp.sequence != front.sequence) { // invalidate and recompute the visible regions if needed flags |= eVisibleRegion; - this->invalidate = true; + this->contentDirty = true; } // Commit the transaction @@ -299,12 +300,22 @@ void LayerBase::lockPageFlip(bool& recomputeVisibleRegions) void LayerBase::unlockPageFlip( const Transform& planeTransform, Region& outDirtyRegion) { + if ((android_atomic_and(~1, &mInvalidate)&1) == 1) { + outDirtyRegion.orSelf(visibleRegionScreen); + } } void LayerBase::finishPageFlip() { } +void LayerBase::invalidate() +{ + if ((android_atomic_or(1, &mInvalidate)&1) == 0) { + mFlinger->signalEvent(); + } +} + void LayerBase::drawRegion(const Region& reg) const { Region::iterator iterator(reg); |