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

Commit dfe0f4c6 authored by Jiwen 'Steve' Cai's avatar Jiwen 'Steve' Cai Committed by Tianyu Jiang
Browse files

Fix BufferHubBuffer black screen

1/ BufferHubService should read back fields of
HardwareBufferDescription of allocated BufferNode and send them back
to the client.
2/ Update some minor naming for better readability.

Bug: 122959735
Test: cts-tradefed run commandAndExit cts -m CtsNativeHardwareTestCases
Change-Id: I10a176810d78c754fe0b69d4128078fc17d50035
parent 1603cc25
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -79,10 +79,10 @@ BufferHubBuffer::BufferHubBuffer(uint32_t width, uint32_t height, uint32_t layer
    sp<IBufferClient> client;
    BufferTraits bufferTraits;
    IBufferHub::allocateBuffer_cb alloc_cb = [&](const auto& status, const auto& outClient,
                                                 const auto& traits) {
                                                 const auto& outTraits) {
        ret = status;
        client = std::move(outClient);
        bufferTraits = std::move(traits);
        bufferTraits = std::move(outTraits);
    };

    if (!bufferhub->allocateBuffer(desc, static_cast<uint32_t>(userMetadataSize), alloc_cb)
@@ -116,10 +116,10 @@ BufferHubBuffer::BufferHubBuffer(const sp<NativeHandle>& token) {
    sp<IBufferClient> client;
    BufferTraits bufferTraits;
    IBufferHub::importBuffer_cb import_cb = [&](const auto& status, const auto& outClient,
                                                const auto& traits) {
                                                const auto& outTraits) {
        ret = status;
        client = std::move(outClient);
        bufferTraits = std::move(traits);
        bufferTraits = std::move(outTraits);
    };

    // hidl_handle(native_handle_t*) simply creates a raw pointer reference withouth ownership
+7 −1
Original line number Diff line number Diff line
@@ -73,7 +73,13 @@ Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& d
            buildBufferInfo(bufferInfoStorage, node->id(), node->addNewActiveClientsBitToMask(),
                            node->userMetadataSize(), node->metadata().ashmemFd(),
                            node->eventFd().get());
    BufferTraits bufferTraits = {/*bufferDesc=*/description,
    // During the gralloc allocation carried out by BufferNode, gralloc allocator will populate the
    // fields of its HardwareBufferDescription (i.e. strides) according to the actual
    // gralloc implementation. We need to read those fields back and send them to the client via
    // BufferTraits.
    HardwareBufferDescription allocatedBufferDesc;
    memcpy(&allocatedBufferDesc, &node->bufferDesc(), sizeof(AHardwareBuffer_Desc));
    BufferTraits bufferTraits = {/*bufferDesc=*/allocatedBufferDesc,
                                 /*bufferHandle=*/hidl_handle(node->bufferHandle()),
                                 /*bufferInfo=*/std::move(bufferInfo)};