diff options
author | Dan Stoza <stoza@google.com> | 2015-04-15 21:42:43 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-04-15 21:42:43 +0000 |
commit | 2992fcd0b2da1b98b0dfd9c80459e8648e72447e (patch) | |
tree | f50e8e35695861d154ec7b2a1fd88efe8e92216a /include/gui | |
parent | 45e51aedac922a02c02247daa70572c45854997c (diff) | |
parent | 057a561afbf30ede99b5ec627deec7ee11701f6d (diff) | |
download | frameworks_native-2992fcd0b2da1b98b0dfd9c80459e8648e72447e.zip frameworks_native-2992fcd0b2da1b98b0dfd9c80459e8648e72447e.tar.gz frameworks_native-2992fcd0b2da1b98b0dfd9c80459e8648e72447e.tar.bz2 |
am 057a561a: am 57a9f5a0: am fd5f41be: Merge "libgui: Pass surface damage through BufferQueue"
* commit '057a561afbf30ede99b5ec627deec7ee11701f6d':
libgui: Pass surface damage through BufferQueue
Diffstat (limited to 'include/gui')
-rw-r--r-- | include/gui/BufferItem.h | 5 | ||||
-rw-r--r-- | include/gui/IGraphicBufferProducer.h | 7 | ||||
-rw-r--r-- | include/gui/Surface.h | 9 |
3 files changed, 19 insertions, 2 deletions
diff --git a/include/gui/BufferItem.h b/include/gui/BufferItem.h index cc41bae..000ef0e 100644 --- a/include/gui/BufferItem.h +++ b/include/gui/BufferItem.h @@ -21,6 +21,7 @@ #include <EGL/eglext.h> #include <ui/Rect.h> +#include <ui/Region.h> #include <system/graphics.h> @@ -106,6 +107,10 @@ class BufferItem : public Flattenable<BufferItem> { // Indicates this buffer must be transformed by the inverse transform of the screen // it is displayed onto. This is applied after mTransform. bool mTransformToDisplayInverse; + + // Describes the portion of the surface that has been modified since the + // previous frame + Region mSurfaceDamage; }; } // namespace android diff --git a/include/gui/IGraphicBufferProducer.h b/include/gui/IGraphicBufferProducer.h index 374245a..2d99f24 100644 --- a/include/gui/IGraphicBufferProducer.h +++ b/include/gui/IGraphicBufferProducer.h @@ -28,6 +28,7 @@ #include <ui/Fence.h> #include <ui/GraphicBuffer.h> #include <ui/Rect.h> +#include <ui/Region.h> namespace android { // ---------------------------------------------------------------------------- @@ -281,7 +282,7 @@ public: : timestamp(timestamp), isAutoTimestamp(isAutoTimestamp), dataSpace(dataSpace), crop(crop), scalingMode(scalingMode), transform(transform), stickyTransform(sticky), - async(async), fence(fence) { } + async(async), fence(fence), surfaceDamage() { } inline void deflate(int64_t* outTimestamp, bool* outIsAutoTimestamp, android_dataspace* outDataSpace, Rect* outCrop, int* outScalingMode, @@ -306,6 +307,9 @@ public: status_t flatten(void*& buffer, size_t& size, int*& fds, size_t& count) const; status_t unflatten(void const*& buffer, size_t& size, int const*& fds, size_t& count); + const Region& getSurfaceDamage() const { return surfaceDamage; } + void setSurfaceDamage(const Region& damage) { surfaceDamage = damage; } + private: int64_t timestamp; int isAutoTimestamp; @@ -316,6 +320,7 @@ public: uint32_t stickyTransform; int async; sp<Fence> fence; + Region surfaceDamage; }; // QueueBufferOutput must be a POD structure diff --git a/include/gui/Surface.h b/include/gui/Surface.h index e973483..8217652 100644 --- a/include/gui/Surface.h +++ b/include/gui/Surface.h @@ -147,6 +147,7 @@ private: int dispatchUnlockAndPost(va_list args); int dispatchSetSidebandStream(va_list args); int dispatchSetBuffersDataSpace(va_list args); + int dispatchSetSurfaceDamage(va_list args); protected: virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd); @@ -171,6 +172,7 @@ protected: virtual int setBuffersDataSpace(android_dataspace dataSpace); virtual int setCrop(Rect const* rect); virtual int setUsage(uint32_t reqUsage); + virtual void setSurfaceDamage(android_native_rect_t* rects, size_t numRects); public: virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds); @@ -296,7 +298,12 @@ private: sp<GraphicBuffer> mPostedBuffer; bool mConnectedToCpu; - // must be accessed from lock/unlock thread only + // In the lock/unlock context, this reflects the region that the producer + // wished to update and whether the Surface was able to copy the previous + // buffer back to allow a partial update. + // + // In the dequeue/queue context, this reflects the surface damage (the + // damage since the last frame) passed in by the producer. Region mDirtyRegion; }; |