diff options
-rw-r--r-- | docs/Makefile | 11 | ||||
-rw-r--r-- | docs/footer.html | 2 | ||||
-rw-r--r-- | docs/footer.jd | 0 | ||||
-rw-r--r-- | docs/header.html | 10 | ||||
-rw-r--r-- | docs/header.jd | 3 | ||||
-rw-r--r-- | include/gui/BufferQueueCore.h | 2 | ||||
-rw-r--r-- | include/gui/BufferQueueProducer.h | 3 | ||||
-rw-r--r-- | include/gui/IGraphicBufferProducer.h | 3 | ||||
-rw-r--r-- | include/gui/Surface.h | 2 | ||||
-rw-r--r-- | libs/gui/BufferQueueCore.cpp | 9 | ||||
-rw-r--r-- | libs/gui/BufferQueueProducer.cpp | 7 | ||||
-rw-r--r-- | libs/gui/IGraphicBufferProducer.cpp | 34 | ||||
-rw-r--r-- | libs/gui/Surface.cpp | 5 | ||||
-rw-r--r-- | libs/ui/Region.cpp | 5 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp | 5 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h | 1 | ||||
-rw-r--r-- | services/surfaceflinger/MonitoredProducer.cpp | 4 | ||||
-rw-r--r-- | services/surfaceflinger/MonitoredProducer.h | 1 |
18 files changed, 97 insertions, 10 deletions
diff --git a/docs/Makefile b/docs/Makefile index 5104d81c20..c655e0c09b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,13 +1,12 @@ HEADERS := $(wildcard ../include/android/*.h) -all: html jd +all: html website html: $(HEADERS) Doxyfile mkdir -p html doxygen -jd: $(HEADERS) Doxyfile header.jd - mkdir -p jd - HTML_HEADER=header.jd HTML_FOOTER=footer.jd HTML_OUTPUT=jd doxygen - for file in jd/*.html; do mv "$${file}" "$${file/.html/.jd}"; done - rm -f jd/index.jd +website: $(HEADERS) Doxyfile header.html + mkdir -p website + HTML_HEADER=header.html HTML_FOOTER=footer.html HTML_OUTPUT=website doxygen + rm -f website/index.html diff --git a/docs/footer.html b/docs/footer.html new file mode 100644 index 0000000000..308b1d01b6 --- /dev/null +++ b/docs/footer.html @@ -0,0 +1,2 @@ +</body> +</html> diff --git a/docs/footer.jd b/docs/footer.jd deleted file mode 100644 index e69de29bb2..0000000000 --- a/docs/footer.jd +++ /dev/null diff --git a/docs/header.html b/docs/header.html new file mode 100644 index 0000000000..04727b3dab --- /dev/null +++ b/docs/header.html @@ -0,0 +1,10 @@ +<html devsite> +<head> + <meta name="top_category" value="ndk" /> + <meta name="subcategory" value="reference" /> + <meta name="book_path" value="/ndk/reference/_book.yaml" /> + <title>$title</title> + <link rel="stylesheet" type="text/css" href="doxygen-dac.css"> +</head> +<body> +<div id="top"><!-- we must have this tag, it's closed by doxygen. ¯\_(ツ)_/¯ --> diff --git a/docs/header.jd b/docs/header.jd deleted file mode 100644 index e50f41b03b..0000000000 --- a/docs/header.jd +++ /dev/null @@ -1,3 +0,0 @@ -page.title=$title -page.customHeadTag=<link rel="stylesheet" type="text/css" href="doxygen-dac.css"> -@jd:body diff --git a/include/gui/BufferQueueCore.h b/include/gui/BufferQueueCore.h index 4ab5db12f2..92ff355a07 100644 --- a/include/gui/BufferQueueCore.h +++ b/include/gui/BufferQueueCore.h @@ -322,6 +322,8 @@ private: // The slot of the last queued buffer int mLastQueuedSlot; + const uint64_t mUniqueId; + }; // class BufferQueueCore } // namespace android diff --git a/include/gui/BufferQueueProducer.h b/include/gui/BufferQueueProducer.h index a75ed98b57..48c3396ce4 100644 --- a/include/gui/BufferQueueProducer.h +++ b/include/gui/BufferQueueProducer.h @@ -186,6 +186,9 @@ public: virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence, float outTransformMatrix[16]) override; + // See IGraphicBufferProducer::getUniqueId + virtual status_t getUniqueId(uint64_t* outId) const override; + private: // This is required by the IBinder::DeathRecipient interface virtual void binderDied(const wp<IBinder>& who); diff --git a/include/gui/IGraphicBufferProducer.h b/include/gui/IGraphicBufferProducer.h index 00ed239b2b..a7cf25eb7a 100644 --- a/include/gui/IGraphicBufferProducer.h +++ b/include/gui/IGraphicBufferProducer.h @@ -569,6 +569,9 @@ public: // Returns NO_ERROR or the status of the Binder transaction virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence, float outTransformMatrix[16]) = 0; + + // Returns a unique id for this BufferQueue + virtual status_t getUniqueId(uint64_t* outId) const = 0; }; // ---------------------------------------------------------------------------- diff --git a/include/gui/Surface.h b/include/gui/Surface.h index 592391f7fb..17945dc297 100644 --- a/include/gui/Surface.h +++ b/include/gui/Surface.h @@ -134,6 +134,8 @@ public: status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence, float outTransformMatrix[16]); + status_t getUniqueId(uint64_t* outId) const; + protected: virtual ~Surface(); diff --git a/libs/gui/BufferQueueCore.cpp b/libs/gui/BufferQueueCore.cpp index f48e58aa2a..b574f9d754 100644 --- a/libs/gui/BufferQueueCore.cpp +++ b/libs/gui/BufferQueueCore.cpp @@ -47,6 +47,12 @@ static String8 getUniqueName() { android_atomic_inc(&counter)); } +static uint64_t getUniqueId() { + static std::atomic<uint32_t> counter{0}; + static uint64_t id = static_cast<uint64_t>(getpid()) << 32; + return id | counter++; +} + BufferQueueCore::BufferQueueCore(const sp<IGraphicBufferAlloc>& allocator) : mAllocator(allocator), mMutex(), @@ -85,7 +91,8 @@ BufferQueueCore::BufferQueueCore(const sp<IGraphicBufferAlloc>& allocator) : mAutoRefresh(false), mSharedBufferSlot(INVALID_BUFFER_SLOT), mSharedBufferCache(Rect::INVALID_RECT, 0, NATIVE_WINDOW_SCALING_MODE_FREEZE, - HAL_DATASPACE_UNKNOWN) + HAL_DATASPACE_UNKNOWN), + mUniqueId(getUniqueId()) { if (allocator == NULL) { diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index 88df6d27d3..05ae4abbfa 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -1424,4 +1424,11 @@ void BufferQueueProducer::binderDied(const wp<android::IBinder>& /* who */) { disconnect(api); } +status_t BufferQueueProducer::getUniqueId(uint64_t* outId) const { + BQ_LOGV("getUniqueId"); + + *outId = mCore->mUniqueId; + return NO_ERROR; +} + } // namespace android diff --git a/libs/gui/IGraphicBufferProducer.cpp b/libs/gui/IGraphicBufferProducer.cpp index 81e9407f11..531bb53e2f 100644 --- a/libs/gui/IGraphicBufferProducer.cpp +++ b/libs/gui/IGraphicBufferProducer.cpp @@ -55,6 +55,7 @@ enum { SET_AUTO_REFRESH, SET_DEQUEUE_TIMEOUT, GET_LAST_QUEUED_BUFFER, + GET_UNIQUE_ID, }; class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer> @@ -418,6 +419,25 @@ public: *outFence = fence; return result; } + + virtual status_t getUniqueId(uint64_t* outId) const { + Parcel data, reply; + data.writeInterfaceToken(IGraphicBufferProducer::getInterfaceDescriptor()); + status_t result = remote()->transact(GET_UNIQUE_ID, data, &reply); + if (result != NO_ERROR) { + ALOGE("getUniqueId failed to transact: %d", result); + } + status_t actualResult = NO_ERROR; + result = reply.readInt32(&actualResult); + if (result != NO_ERROR) { + return result; + } + result = reply.readUint64(outId); + if (result != NO_ERROR) { + return result; + } + return actualResult; + } }; // Out-of-line virtual method definition to trigger vtable emission in this @@ -659,6 +679,20 @@ status_t BnGraphicBufferProducer::onTransact( } return NO_ERROR; } + case GET_UNIQUE_ID: { + CHECK_INTERFACE(IGraphicBufferProducer, data, reply); + uint64_t outId = 0; + status_t actualResult = getUniqueId(&outId); + status_t result = reply->writeInt32(actualResult); + if (result != NO_ERROR) { + return result; + } + result = reply->writeUint64(outId); + if (result != NO_ERROR) { + return result; + } + return NO_ERROR; + } } return BBinder::onTransact(code, data, reply, flags); } diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index 9d130cd974..bcfe714bc9 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -1279,6 +1279,11 @@ bool Surface::waitForNextFrame(uint64_t lastFrame, nsecs_t timeout) { return mQueueBufferCondition.waitRelative(mMutex, timeout) == OK; } +status_t Surface::getUniqueId(uint64_t* outId) const { + Mutex::Autolock lock(mMutex); + return mGraphicBufferProducer->getUniqueId(outId); +} + namespace view { status_t Surface::writeToParcel(Parcel* parcel) const { diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp index a430a31058..b53c563624 100644 --- a/libs/ui/Region.cpp +++ b/libs/ui/Region.cpp @@ -796,6 +796,11 @@ status_t Region::unflatten(void const* buffer, size_t size) { return NO_MEMORY; } + if (numRects > (UINT32_MAX / sizeof(Rect))) { + android_errorWriteWithInfoLog(0x534e4554, "29983260", -1, NULL, 0); + return NO_MEMORY; + } + Region result; result.mStorage.clear(); for (size_t r = 0; r < numRects; ++r) { diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp index bc8dfbb5b6..c0baa49f85 100644 --- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp @@ -612,6 +612,11 @@ status_t VirtualDisplaySurface::getLastQueuedBuffer( return INVALID_OPERATION; } +status_t VirtualDisplaySurface::getUniqueId(uint64_t* /*outId*/) const { + ALOGE("getUniqueId not supported on VirtualDisplaySurface"); + return INVALID_OPERATION; +} + void VirtualDisplaySurface::updateQueueBufferOutput( const QueueBufferOutput& qbo) { uint32_t w, h, transformHint, numPendingBuffers; diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h index 29563b6a06..5b82355dcd 100644 --- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h +++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h @@ -128,6 +128,7 @@ private: virtual status_t setDequeueTimeout(nsecs_t timeout) override; virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence, float outTransformMatrix[16]) override; + virtual status_t getUniqueId(uint64_t* outId) const override; // // Utility methods diff --git a/services/surfaceflinger/MonitoredProducer.cpp b/services/surfaceflinger/MonitoredProducer.cpp index faab62cb4e..fd33d5cd3e 100644 --- a/services/surfaceflinger/MonitoredProducer.cpp +++ b/services/surfaceflinger/MonitoredProducer.cpp @@ -149,6 +149,10 @@ status_t MonitoredProducer::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer, outTransformMatrix); } +status_t MonitoredProducer::getUniqueId(uint64_t* outId) const { + return mProducer->getUniqueId(outId); +} + IBinder* MonitoredProducer::onAsBinder() { return IInterface::asBinder(mProducer).get(); } diff --git a/services/surfaceflinger/MonitoredProducer.h b/services/surfaceflinger/MonitoredProducer.h index ce756dc822..71b6b5915d 100644 --- a/services/surfaceflinger/MonitoredProducer.h +++ b/services/surfaceflinger/MonitoredProducer.h @@ -64,6 +64,7 @@ public: virtual IBinder* onAsBinder(); virtual status_t setSharedBufferMode(bool sharedBufferMode) override; virtual status_t setAutoRefresh(bool autoRefresh) override; + virtual status_t getUniqueId(uint64_t* outId) const override; private: sp<IGraphicBufferProducer> mProducer; |