Loading libs/ui/Android.bp +8 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ cc_library_shared { "libhidlbase", "libhidltransport", "libhwbinder", "libpdx_default_transport", "libsync", "libutils", "libutilscallstack", Loading @@ -99,10 +100,9 @@ cc_library_shared { "libbase_headers", "libnativebase_headers", "libhardware_headers", "libui_headers", ], export_include_dirs: ["include"], export_static_lib_headers: [ "libarect", "libmath", Loading @@ -112,6 +112,7 @@ cc_library_shared { "libbase_headers", "libnativebase_headers", "libhardware_headers", "libui_headers", ], } Loading @@ -119,6 +120,11 @@ cc_library_headers { name: "libui_headers", export_include_dirs: ["include"], vendor_available: true, target: { vendor: { override_export_include_dirs: ["include_vndk"], }, }, } subdirs = [ Loading libs/ui/GraphicBuffer.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <grallocusage/GrallocUsageConversion.h> #include <ui/DetachedBufferHandle.h> #include <ui/Gralloc2.h> #include <ui/GraphicBufferAllocator.h> #include <ui/GraphicBufferMapper.h> Loading Loading @@ -486,6 +487,24 @@ status_t GraphicBuffer::unflatten( return NO_ERROR; } bool GraphicBuffer::isDetachedBuffer() const { return mDetachedBufferHandle && mDetachedBufferHandle->isValid(); } status_t GraphicBuffer::setDetachedBufferHandle(std::unique_ptr<DetachedBufferHandle> channel) { if (isDetachedBuffer()) { ALOGW("setDetachedBuffer: there is already a BufferHub channel associated with this " "GraphicBuffer. Replacing the old one."); } mDetachedBufferHandle = std::move(channel); return NO_ERROR; } std::unique_ptr<DetachedBufferHandle> GraphicBuffer::takeDetachedBufferHandle() { return std::move(mDetachedBufferHandle); } // --------------------------------------------------------------------------- }; // namespace android libs/ui/include/ui/DetachedBufferHandle.h 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_DETACHED_BUFFER_HUB_HANDLE_H #define ANDROID_DETACHED_BUFFER_HUB_HANDLE_H #include <pdx/channel_handle.h> #include <memory> namespace android { // A wrapper that holds a pdx::LocalChannelHandle object. From the handle, a BufferHub buffer can be // created. Current implementation assumes that the underlying transport is using libpdx (thus // holding a pdx::LocalChannelHandle object), but future implementation can change it to a Binder // backend if ever needed. class DetachedBufferHandle { public: static std::unique_ptr<DetachedBufferHandle> Create(pdx::LocalChannelHandle handle) { return std::unique_ptr<DetachedBufferHandle>(new DetachedBufferHandle(std::move(handle))); } // Accessors to get or take the internal pdx::LocalChannelHandle. pdx::LocalChannelHandle& handle() { return mHandle; } const pdx::LocalChannelHandle& handle() const { return mHandle; } // Returns whether the DetachedBufferHandle holds a BufferHub channel. bool isValid() const { return mHandle.valid(); } private: // Constructs a DetachedBufferHandle from a pdx::LocalChannelHandle. explicit DetachedBufferHandle(pdx::LocalChannelHandle handle) : mHandle(std::move(handle)) {} pdx::LocalChannelHandle mHandle; }; } // namespace android #endif // ANDROID_DETACHED_BUFFER_HUB_HANDLE_H libs/ui/include/ui/GraphicBuffer.h +17 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ namespace android { class DetachedBufferHandle; class GraphicBufferMapper; // =========================================================================== Loading Loading @@ -190,6 +191,11 @@ 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); // Sets and takes DetachedBuffer. Should only be called from BufferHub. bool isDetachedBuffer() const; status_t setDetachedBufferHandle(std::unique_ptr<DetachedBufferHandle> detachedBuffer); std::unique_ptr<DetachedBufferHandle> takeDetachedBufferHandle(); private: ~GraphicBuffer(); Loading Loading @@ -240,6 +246,17 @@ private: // match the BufferQueue's internal generation number (set through // IGBP::setGenerationNumber), attempts to attach the buffer will fail. uint32_t mGenerationNumber; // Stores a BufferHub handle that can be used to re-attach this GraphicBuffer back into a // BufferHub producer/consumer set. In terms of GraphicBuffer's relationship with BufferHub, // there are three different modes: // 1. Legacy mode: GraphicBuffer is not backed by BufferHub and mDetachedBufferHandle must be // invalid. // 2. Detached mode: GraphicBuffer is backed by BufferHub, but not part of a producer/consumer // set. In this mode, mDetachedBufferHandle must be valid. // 3. Attached mode: GraphicBuffer is backed by BufferHub and it's part of a producer/consumer // set. In this mode, mDetachedBufferHandle must be invalid. std::unique_ptr<DetachedBufferHandle> mDetachedBufferHandle; }; }; // namespace android Loading libs/ui/include_vndk/ui/ANativeObjectBase.h 0 → 120000 +1 −0 Original line number Diff line number Diff line ../../include/ui/ANativeObjectBase.h No newline at end of file Loading
libs/ui/Android.bp +8 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ cc_library_shared { "libhidlbase", "libhidltransport", "libhwbinder", "libpdx_default_transport", "libsync", "libutils", "libutilscallstack", Loading @@ -99,10 +100,9 @@ cc_library_shared { "libbase_headers", "libnativebase_headers", "libhardware_headers", "libui_headers", ], export_include_dirs: ["include"], export_static_lib_headers: [ "libarect", "libmath", Loading @@ -112,6 +112,7 @@ cc_library_shared { "libbase_headers", "libnativebase_headers", "libhardware_headers", "libui_headers", ], } Loading @@ -119,6 +120,11 @@ cc_library_headers { name: "libui_headers", export_include_dirs: ["include"], vendor_available: true, target: { vendor: { override_export_include_dirs: ["include_vndk"], }, }, } subdirs = [ Loading
libs/ui/GraphicBuffer.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <grallocusage/GrallocUsageConversion.h> #include <ui/DetachedBufferHandle.h> #include <ui/Gralloc2.h> #include <ui/GraphicBufferAllocator.h> #include <ui/GraphicBufferMapper.h> Loading Loading @@ -486,6 +487,24 @@ status_t GraphicBuffer::unflatten( return NO_ERROR; } bool GraphicBuffer::isDetachedBuffer() const { return mDetachedBufferHandle && mDetachedBufferHandle->isValid(); } status_t GraphicBuffer::setDetachedBufferHandle(std::unique_ptr<DetachedBufferHandle> channel) { if (isDetachedBuffer()) { ALOGW("setDetachedBuffer: there is already a BufferHub channel associated with this " "GraphicBuffer. Replacing the old one."); } mDetachedBufferHandle = std::move(channel); return NO_ERROR; } std::unique_ptr<DetachedBufferHandle> GraphicBuffer::takeDetachedBufferHandle() { return std::move(mDetachedBufferHandle); } // --------------------------------------------------------------------------- }; // namespace android
libs/ui/include/ui/DetachedBufferHandle.h 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_DETACHED_BUFFER_HUB_HANDLE_H #define ANDROID_DETACHED_BUFFER_HUB_HANDLE_H #include <pdx/channel_handle.h> #include <memory> namespace android { // A wrapper that holds a pdx::LocalChannelHandle object. From the handle, a BufferHub buffer can be // created. Current implementation assumes that the underlying transport is using libpdx (thus // holding a pdx::LocalChannelHandle object), but future implementation can change it to a Binder // backend if ever needed. class DetachedBufferHandle { public: static std::unique_ptr<DetachedBufferHandle> Create(pdx::LocalChannelHandle handle) { return std::unique_ptr<DetachedBufferHandle>(new DetachedBufferHandle(std::move(handle))); } // Accessors to get or take the internal pdx::LocalChannelHandle. pdx::LocalChannelHandle& handle() { return mHandle; } const pdx::LocalChannelHandle& handle() const { return mHandle; } // Returns whether the DetachedBufferHandle holds a BufferHub channel. bool isValid() const { return mHandle.valid(); } private: // Constructs a DetachedBufferHandle from a pdx::LocalChannelHandle. explicit DetachedBufferHandle(pdx::LocalChannelHandle handle) : mHandle(std::move(handle)) {} pdx::LocalChannelHandle mHandle; }; } // namespace android #endif // ANDROID_DETACHED_BUFFER_HUB_HANDLE_H
libs/ui/include/ui/GraphicBuffer.h +17 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ namespace android { class DetachedBufferHandle; class GraphicBufferMapper; // =========================================================================== Loading Loading @@ -190,6 +191,11 @@ 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); // Sets and takes DetachedBuffer. Should only be called from BufferHub. bool isDetachedBuffer() const; status_t setDetachedBufferHandle(std::unique_ptr<DetachedBufferHandle> detachedBuffer); std::unique_ptr<DetachedBufferHandle> takeDetachedBufferHandle(); private: ~GraphicBuffer(); Loading Loading @@ -240,6 +246,17 @@ private: // match the BufferQueue's internal generation number (set through // IGBP::setGenerationNumber), attempts to attach the buffer will fail. uint32_t mGenerationNumber; // Stores a BufferHub handle that can be used to re-attach this GraphicBuffer back into a // BufferHub producer/consumer set. In terms of GraphicBuffer's relationship with BufferHub, // there are three different modes: // 1. Legacy mode: GraphicBuffer is not backed by BufferHub and mDetachedBufferHandle must be // invalid. // 2. Detached mode: GraphicBuffer is backed by BufferHub, but not part of a producer/consumer // set. In this mode, mDetachedBufferHandle must be valid. // 3. Attached mode: GraphicBuffer is backed by BufferHub and it's part of a producer/consumer // set. In this mode, mDetachedBufferHandle must be invalid. std::unique_ptr<DetachedBufferHandle> mDetachedBufferHandle; }; }; // namespace android Loading
libs/ui/include_vndk/ui/ANativeObjectBase.h 0 → 120000 +1 −0 Original line number Diff line number Diff line ../../include/ui/ANativeObjectBase.h No newline at end of file