diff options
Diffstat (limited to 'services/surfaceflinger/DisplayHardware/ComposerHal.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayHardware/ComposerHal.cpp | 168 |
1 files changed, 26 insertions, 142 deletions
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp index a3f1b52378..caf0294a56 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp @@ -20,18 +20,18 @@ #undef LOG_TAG #define LOG_TAG "HwcComposer" - -#include <log/log.h> - -#include <algorithm> -#include <cinttypes> +#define ATRACE_TAG ATRACE_TAG_GRAPHICS #include "ComposerHal.h" #include <composer-command-buffer/2.2/ComposerCommandBuffer.h> -#include <gui/BufferQueue.h> #include <hidl/HidlTransportSupport.h> #include <hidl/HidlTransportUtils.h> +#include <log/log.h> +#include <utils/Trace.h> + +#include <algorithm> +#include <cinttypes> namespace android { @@ -117,63 +117,7 @@ Error unwrapRet(Return<Error>& ret) namespace impl { -#if defined(USE_VR_COMPOSER) && USE_VR_COMPOSER -Composer::CommandWriter::CommandWriter(uint32_t initialMaxSize) - : CommandWriterBase(initialMaxSize) {} - -Composer::CommandWriter::~CommandWriter() -{ -} - -void Composer::CommandWriter::setLayerInfo(uint32_t type, uint32_t appId) -{ - constexpr uint16_t kSetLayerInfoLength = 2; - beginCommand(static_cast<V2_1::IComposerClient::Command>( - IVrComposerClient::VrCommand::SET_LAYER_INFO), - kSetLayerInfoLength); - write(type); - write(appId); - endCommand(); -} - -void Composer::CommandWriter::setClientTargetMetadata( - const IVrComposerClient::BufferMetadata& metadata) -{ - constexpr uint16_t kSetClientTargetMetadataLength = 7; - beginCommand(static_cast<V2_1::IComposerClient::Command>( - IVrComposerClient::VrCommand::SET_CLIENT_TARGET_METADATA), - kSetClientTargetMetadataLength); - writeBufferMetadata(metadata); - endCommand(); -} - -void Composer::CommandWriter::setLayerBufferMetadata( - const IVrComposerClient::BufferMetadata& metadata) -{ - constexpr uint16_t kSetLayerBufferMetadataLength = 7; - beginCommand(static_cast<V2_1::IComposerClient::Command>( - IVrComposerClient::VrCommand::SET_LAYER_BUFFER_METADATA), - kSetLayerBufferMetadataLength); - writeBufferMetadata(metadata); - endCommand(); -} - -void Composer::CommandWriter::writeBufferMetadata( - const IVrComposerClient::BufferMetadata& metadata) -{ - write(metadata.width); - write(metadata.height); - write(metadata.stride); - write(metadata.layerCount); - writeSigned(static_cast<int32_t>(metadata.format)); - write64(metadata.usage); -} -#endif // defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - -Composer::Composer(const std::string& serviceName) - : mWriter(kWriterInitialSize), - mIsUsingVrComposer(serviceName == std::string("vr")) -{ +Composer::Composer(const std::string& serviceName) : mWriter(kWriterInitialSize) { mComposer = V2_1::IComposer::getService(serviceName); if (mComposer == nullptr) { @@ -215,15 +159,6 @@ Composer::Composer(const std::string& serviceName) if (mClient == nullptr) { LOG_ALWAYS_FATAL("failed to create composer client"); } - -#if defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - if (mIsUsingVrComposer) { - sp<IVrComposerClient> vrClient = IVrComposerClient::castFrom(mClient); - if (vrClient == nullptr) { - LOG_ALWAYS_FATAL("failed to create vr composer client"); - } - } -#endif // defined(USE_VR_COMPOSER) && USE_VR_COMPOSER } Composer::~Composer() = default; @@ -262,10 +197,6 @@ void Composer::registerCallback(const sp<IComposerCallback>& callback) } } -bool Composer::isRemote() { - return mClient->isRemote(); -} - void Composer::resetCommands() { mWriter.reset(); } @@ -280,9 +211,8 @@ uint32_t Composer::getMaxVirtualDisplayCount() return unwrapRet(ret, 0); } -Error Composer::createVirtualDisplay(uint32_t width, uint32_t height, - PixelFormat* format, Display* outDisplay) -{ +Error Composer::createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat* format, + std::optional<Display>, Display* outDisplay) { const uint32_t bufferSlotCount = 1; Error error = kDefaultError; if (mClient_2_2) { @@ -334,15 +264,15 @@ Error Composer::acceptDisplayChanges(Display display) Error Composer::createLayer(Display display, Layer* outLayer) { Error error = kDefaultError; - mClient->createLayer(display, BufferQueue::NUM_BUFFER_SLOTS, - [&](const auto& tmpError, const auto& tmpLayer) { - error = tmpError; - if (error != Error::NONE) { - return; - } + mClient->createLayer(display, kMaxLayerBufferCount, + [&](const auto& tmpError, const auto& tmpLayer) { + error = tmpError; + if (error != Error::NONE) { + return; + } - *outLayer = tmpLayer; - }); + *outLayer = tmpLayer; + }); return error; } @@ -561,6 +491,7 @@ Error Composer::getReleaseFences(Display display, Error Composer::presentDisplay(Display display, int* outPresentFence) { + ATRACE_NAME("HwcPresentDisplay"); mWriter.selectDisplay(display); mWriter.presentDisplay(); @@ -587,20 +518,6 @@ Error Composer::setClientTarget(Display display, uint32_t slot, { mWriter.selectDisplay(display); -#if defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - if (mIsUsingVrComposer && target.get()) { - IVrComposerClient::BufferMetadata metadata = { - .width = target->getWidth(), - .height = target->getHeight(), - .stride = target->getStride(), - .layerCount = target->getLayerCount(), - .format = static_cast<types::V1_2::PixelFormat>(target->getPixelFormat()), - .usage = target->getUsage(), - }; - mWriter.setClientTargetMetadata(metadata); - } -#endif // defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - const native_handle_t* handle = nullptr; if (target.get()) { handle = target->getNativeBuffer()->handle; @@ -669,6 +586,7 @@ Error Composer::setClientTargetSlotCount(Display display) Error Composer::validateDisplay(Display display, uint32_t* outNumTypes, uint32_t* outNumRequests) { + ATRACE_NAME("HwcValidateDisplay"); mWriter.selectDisplay(display); mWriter.validateDisplay(); @@ -684,13 +602,14 @@ Error Composer::validateDisplay(Display display, uint32_t* outNumTypes, Error Composer::presentOrValidateDisplay(Display display, uint32_t* outNumTypes, uint32_t* outNumRequests, int* outPresentFence, uint32_t* state) { - mWriter.selectDisplay(display); - mWriter.presentOrvalidateDisplay(); + ATRACE_NAME("HwcPresentOrValidateDisplay"); + mWriter.selectDisplay(display); + mWriter.presentOrvalidateDisplay(); - Error error = execute(); - if (error != Error::NONE) { - return error; - } + Error error = execute(); + if (error != Error::NONE) { + return error; + } mReader.takePresentOrValidateStage(display, state); @@ -720,20 +639,6 @@ Error Composer::setLayerBuffer(Display display, Layer layer, mWriter.selectDisplay(display); mWriter.selectLayer(layer); -#if defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - if (mIsUsingVrComposer && buffer.get()) { - IVrComposerClient::BufferMetadata metadata = { - .width = buffer->getWidth(), - .height = buffer->getHeight(), - .stride = buffer->getStride(), - .layerCount = buffer->getLayerCount(), - .format = static_cast<types::V1_2::PixelFormat>(buffer->getPixelFormat()), - .usage = buffer->getUsage(), - }; - mWriter.setLayerBufferMetadata(metadata); - } -#endif // defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - const native_handle_t* handle = nullptr; if (buffer.get()) { handle = buffer->getNativeBuffer()->handle; @@ -850,27 +755,6 @@ Error Composer::setLayerZOrder(Display display, Layer layer, uint32_t z) return Error::NONE; } -#if defined(USE_VR_COMPOSER) && USE_VR_COMPOSER -Error Composer::setLayerInfo(Display display, Layer layer, uint32_t type, - uint32_t appId) -{ - if (mIsUsingVrComposer) { - mWriter.selectDisplay(display); - mWriter.selectLayer(layer); - mWriter.setLayerInfo(type, appId); - } - return Error::NONE; -} -#else -Error Composer::setLayerInfo(Display display, Layer layer, uint32_t, uint32_t) { - if (mIsUsingVrComposer) { - mWriter.selectDisplay(display); - mWriter.selectLayer(layer); - } - return Error::NONE; -} -#endif // defined(USE_VR_COMPOSER) && USE_VR_COMPOSER - Error Composer::execute() { // prepare input command queue |