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

Commit 17368c3f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I4c3a967c,I3fd5732f into pi-dev

* changes:
  GraphicBuffer: add optional DetachedBufferHandle
  Limit libui header exports for vendors
parents 0cab4a53 44addfe5
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ cc_library_shared {
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "libpdx_default_transport",
        "libsync",
        "libutils",
        "libutilscallstack",
@@ -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",
@@ -112,6 +112,7 @@ cc_library_shared {
        "libbase_headers",
        "libnativebase_headers",
        "libhardware_headers",
        "libui_headers",
    ],
}

@@ -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 = [
+19 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@

#include <grallocusage/GrallocUsageConversion.h>

#include <ui/DetachedBufferHandle.h>
#include <ui/Gralloc2.h>
#include <ui/GraphicBufferAllocator.h>
#include <ui/GraphicBufferMapper.h>
@@ -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
+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
+17 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@

namespace android {

class DetachedBufferHandle;
class GraphicBufferMapper;

// ===========================================================================
@@ -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();

@@ -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
+1 −0
Original line number Diff line number Diff line
../../include/ui/ANativeObjectBase.h
 No newline at end of file
Loading