Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29ac8d5c authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "MediaBuffer: Only use shared memory for processes that export MediaBuffers"

parents 5b8fc784 4c3d1ee7
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -108,6 +108,14 @@ public:
        return reinterpret_cast<SharedControl *>(memory->pointer())->isDeadObject();
    }

    // Sticky on enabling of shared memory MediaBuffers. By default we don't use
    // shared memory for MediaBuffers, but we enable this for those processes
    // that export MediaBuffers.
    static void useSharedMemory() {
        std::atomic_store_explicit(
                &mUseSharedMemory, (int_least32_t)1, std::memory_order_seq_cst);
    }

protected:
    // MediaBuffer remote releases are handled through a
    // pending release count variable stored in a SharedControl block
@@ -161,6 +169,8 @@ private:

    MediaBuffer *mOriginal;

    static std::atomic_int_least32_t mUseSharedMemory;

    MediaBuffer(const MediaBuffer &);
    MediaBuffer &operator=(const MediaBuffer &);

+3 −0
Original line number Diff line number Diff line
@@ -71,6 +71,9 @@ status_t BnMediaExtractorService::onTransact(
                ALOGE("Error reading source from parcel");
                return ret;
            }
            // If we make an extractor through Binder, enabled shared memory
            // for MediaBuffers for this process.
            MediaBuffer::useSharedMemory();
            sp<IDataSource> source = interface_cast<IDataSource>(b);
            const char *mime = data.readCString();
            sp<IMediaExtractor> ex = makeExtractor(source, mime);
+5 −1
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@

namespace android {

/* static */
std::atomic_int_least32_t MediaBuffer::mUseSharedMemory(0);

MediaBuffer::MediaBuffer(void *data, size_t size)
    : mObserver(NULL),
      mRefCount(0),
@@ -52,7 +55,8 @@ MediaBuffer::MediaBuffer(size_t size)
      mOwnsData(true),
      mMetaData(new MetaData),
      mOriginal(NULL) {
    if (size < kSharedMemThreshold) {
    if (size < kSharedMemThreshold
            || std::atomic_load_explicit(&mUseSharedMemory, std::memory_order_seq_cst) == 0) {
        mData = malloc(size);
    } else {
        ALOGV("creating memoryDealer");