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

Unverified Commit 416b0c30 authored by Aaron Kling's avatar Aaron Kling Committed by Michael Bestas
Browse files

Partial revert "Remove mapper from composer2.1 VTS"

This reverts commit 6d0abbb4.

The original change causes some graphics composers to trigger overflow
exceptions when adding displays.

Change-Id: I143f7361bdf5f3e7e1e788a47b1ee1158a06fe04
parent 1daae3e2
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -30,15 +30,20 @@ cc_library {
    vendor_available: true,
    shared_libs: [
        "android.hardware.graphics.composer@2.1",
        "android.hardware.graphics.mapper@2.0",
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@4.0",
        "libcutils",
        "libhardware", // TODO remove hwcomposer2.h dependency
        "libhidlbase",
        "liblog",
        "libui",
        "libutils",
    ],
    export_shared_lib_headers: [
        "android.hardware.graphics.composer@2.1",
        "android.hardware.graphics.mapper@2.0",
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@4.0",
        "libhardware",
        "libhidlbase",
        "liblog",
+56 −11
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@

#include "composer-resources/2.1/ComposerResources.h"

#include <ui/GraphicBufferMapper.h>

namespace android {
namespace hardware {
namespace graphics {
@@ -27,11 +25,24 @@ namespace composer {
namespace V2_1 {
namespace hal {

ComposerHandleImporter::ComposerHandleImporter() : mMapper{GraphicBufferMapper::get()} {}

bool ComposerHandleImporter::init() {
    mMapper4 = mapper::V4_0::IMapper::getService();
    if (mMapper4) {
        return true;
    }
    ALOGI_IF(!mMapper4, "failed to get mapper 4.0 service, falling back to mapper 3.0");

    mMapper3 = mapper::V3_0::IMapper::getService();
    if (mMapper3) {
        return true;
    }
    ALOGI_IF(!mMapper3, "failed to get mapper 3.0 service, falling back to mapper 2.0");

    mMapper2 = mapper::V2_0::IMapper::getService();
    ALOGE_IF(!mMapper2, "failed to get mapper 2.0 service");

    return mMapper2 != nullptr;
}

Error ComposerHandleImporter::importBuffer(const native_handle_t* rawHandle,
                                           const native_handle_t** outBufferHandle) {
@@ -40,17 +51,51 @@ Error ComposerHandleImporter::importBuffer(const native_handle_t* rawHandle,
        return Error::NONE;
    }

    status_t status = mMapper.importBufferNoValidate(rawHandle, outBufferHandle);
    if (status == STATUS_OK) {
        return Error::NONE;
    } else {
    const native_handle_t* bufferHandle;
    if (mMapper2) {
        mapper::V2_0::Error error;
        mMapper2->importBuffer(rawHandle, [&](const auto& tmpError, const auto& tmpBufferHandle) {
            error = tmpError;
            bufferHandle = static_cast<const native_handle_t*>(tmpBufferHandle);
        });
        if (error != mapper::V2_0::Error::NONE) {
            return Error::NO_RESOURCES;
        }
    }
    if (mMapper3) {
        mapper::V3_0::Error error;
        mMapper3->importBuffer(rawHandle, [&](const auto& tmpError, const auto& tmpBufferHandle) {
            error = tmpError;
            bufferHandle = static_cast<const native_handle_t*>(tmpBufferHandle);
        });
        if (error != mapper::V3_0::Error::NONE) {
            return Error::NO_RESOURCES;
        }
    }
    if (mMapper4) {
        mapper::V4_0::Error error;
        mMapper4->importBuffer(rawHandle, [&](const auto& tmpError, const auto& tmpBufferHandle) {
            error = tmpError;
            bufferHandle = static_cast<const native_handle_t*>(tmpBufferHandle);
        });
        if (error != mapper::V4_0::Error::NONE) {
            return Error::NO_RESOURCES;
        }
    }

    *outBufferHandle = bufferHandle;
    return Error::NONE;
}

void ComposerHandleImporter::freeBuffer(const native_handle_t* bufferHandle) {
    if (bufferHandle) {
        mMapper.freeBuffer(bufferHandle);
        if (mMapper2) {
            mMapper2->freeBuffer(static_cast<void*>(const_cast<native_handle_t*>(bufferHandle)));
        } else if (mMapper3) {
            mMapper3->freeBuffer(static_cast<void*>(const_cast<native_handle_t*>(bufferHandle)));
        } else if (mMapper4) {
            mMapper4->freeBuffer(static_cast<void*>(const_cast<native_handle_t*>(bufferHandle)));
        }
    }
}

+6 −3
Original line number Diff line number Diff line
@@ -27,10 +27,12 @@

#include <android/hardware/graphics/composer/2.1/types.h>

#include <android/hardware/graphics/mapper/2.0/IMapper.h>
#include <android/hardware/graphics/mapper/3.0/IMapper.h>
#include <android/hardware/graphics/mapper/4.0/IMapper.h>
#include <log/log.h>

namespace android {
class GraphicBufferMapper;
namespace hardware {
namespace graphics {
namespace composer {
@@ -40,7 +42,6 @@ namespace hal {
// wrapper for IMapper to import buffers and sideband streams
class ComposerHandleImporter {
  public:
    ComposerHandleImporter();
    bool init();

    Error importBuffer(const native_handle_t* rawHandle, const native_handle_t** outBufferHandle);
@@ -49,7 +50,9 @@ class ComposerHandleImporter {
    void freeStream(const native_handle_t* streamHandle);

  private:
    GraphicBufferMapper& mMapper;
    sp<mapper::V2_0::IMapper> mMapper2;
    sp<mapper::V3_0::IMapper> mMapper3;
    sp<mapper::V4_0::IMapper> mMapper4;
};

class ComposerHandleCache {