Loading services/surfaceflinger/DisplayHardware/ComposerHal.cpp +16 −25 Original line number Diff line number Diff line Loading @@ -32,11 +32,6 @@ namespace android { using hardware::Return; using hardware::hidl_vec; using hardware::hidl_handle; using namespace hardware::graphics::common; using namespace hardware::graphics::composer; using PerFrameMetadata = hardware::graphics::composer::V2_2::IComposerClient::PerFrameMetadata; using PerFrameMetadataKey = hardware::graphics::composer::V2_2::IComposerClient::PerFrameMetadataKey; namespace Hwc2 { Loading Loading @@ -126,7 +121,7 @@ Composer::CommandWriter::~CommandWriter() void Composer::CommandWriter::setLayerInfo(uint32_t type, uint32_t appId) { constexpr uint16_t kSetLayerInfoLength = 2; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_LAYER_INFO), kSetLayerInfoLength); write(type); Loading @@ -138,7 +133,7 @@ void Composer::CommandWriter::setClientTargetMetadata( const IVrComposerClient::BufferMetadata& metadata) { constexpr uint16_t kSetClientTargetMetadataLength = 7; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_CLIENT_TARGET_METADATA), kSetClientTargetMetadataLength); writeBufferMetadata(metadata); Loading @@ -149,7 +144,7 @@ void Composer::CommandWriter::setLayerBufferMetadata( const IVrComposerClient::BufferMetadata& metadata) { constexpr uint16_t kSetLayerBufferMetadataLength = 7; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_LAYER_BUFFER_METADATA), kSetLayerBufferMetadataLength); writeBufferMetadata(metadata); Loading @@ -171,7 +166,7 @@ Composer::Composer(const std::string& serviceName) : mWriter(kWriterInitialSize), mIsUsingVrComposer(serviceName == std::string("vr")) { mComposer = IComposer::getService(serviceName); mComposer = V2_1::IComposer::getService(serviceName); if (mComposer == nullptr) { LOG_ALWAYS_FATAL("failed to get hwcomposer service"); Loading @@ -189,7 +184,7 @@ Composer::Composer(const std::string& serviceName) } // 2.2 support is optional sp<V2_2::IComposer> composer_2_2 = V2_2::IComposer::castFrom(mComposer); sp<IComposer> composer_2_2 = IComposer::castFrom(mComposer); if (composer_2_2 != nullptr) { mClient_2_2 = IComposerClient::castFrom(mClient); LOG_ALWAYS_FATAL_IF(mClient_2_2 == nullptr, "IComposer 2.2 did not return IComposerClient 2.2"); Loading Loading @@ -271,7 +266,7 @@ Error Composer::createVirtualDisplay(uint32_t width, uint32_t height, }); } else { mClient->createVirtualDisplay(width, height, static_cast<V1_0::PixelFormat>(*format), bufferSlotCount, static_cast<types::V1_0::PixelFormat>(*format), bufferSlotCount, [&](const auto& tmpError, const auto& tmpDisplay, const auto& tmpFormat) { error = tmpError; Loading Loading @@ -368,7 +363,7 @@ Error Composer::getColorModes(Display display, if (error != Error::NONE) { return; } for (V1_0::ColorMode colorMode : tmpModes) { for (types::V1_0::ColorMode colorMode : tmpModes) { outModes->push_back(static_cast<ColorMode>(colorMode)); } }); Loading Loading @@ -533,7 +528,7 @@ Error Composer::setClientTarget(Display display, uint32_t slot, .height = target->getHeight(), .stride = target->getStride(), .layerCount = target->getLayerCount(), .format = static_cast<V1_0::PixelFormat>(target->getPixelFormat()), .format = static_cast<types::V1_0::PixelFormat>(target->getPixelFormat()), .usage = target->getUsage(), }; mWriter.setClientTargetMetadata(metadata); Loading @@ -556,7 +551,7 @@ Error Composer::setColorMode(Display display, ColorMode mode, ret = mClient_2_2->setColorMode_2_2(display, mode, renderIntent); } else { ret = mClient->setColorMode(display, static_cast<V1_0::ColorMode>(mode)); static_cast<types::V1_0::ColorMode>(mode)); } return unwrapRet(ret); } Loading @@ -577,15 +572,12 @@ Error Composer::setOutputBuffer(Display display, const native_handle_t* buffer, return Error::NONE; } Error Composer::setPowerMode(Display display, IComposerClient::PowerMode mode) { hardware::Return<Error> ret(Error::UNSUPPORTED); Error Composer::setPowerMode(Display display, IComposerClient::PowerMode mode) { Return<Error> ret(Error::UNSUPPORTED); if (mClient_2_2) { ret = mClient_2_2->setPowerMode_2_2(display, mode); } else if (mode != IComposerClient::PowerMode::ON_SUSPEND) { ret = mClient->setPowerMode(display, static_cast<hardware::graphics::composer::V2_1:: IComposerClient::PowerMode>(mode)); ret = mClient->setPowerMode(display, static_cast<V2_1::IComposerClient::PowerMode>(mode)); } return unwrapRet(ret); Loading Loading @@ -663,7 +655,7 @@ Error Composer::setLayerBuffer(Display display, Layer layer, .height = buffer->getHeight(), .stride = buffer->getStride(), .layerCount = buffer->getLayerCount(), .format = static_cast<V1_0::PixelFormat>(buffer->getPixelFormat()), .format = static_cast<types::V1_0::PixelFormat>(buffer->getPixelFormat()), .usage = buffer->getUsage(), }; mWriter.setLayerBufferMetadata(metadata); Loading Loading @@ -731,7 +723,8 @@ Error Composer::setLayerHdrMetadata(Display display, Layer layer, const HdrMetad mWriter.selectDisplay(display); mWriter.selectLayer(layer); std::vector<PerFrameMetadata> composerMetadata; std::vector<IComposerClient::PerFrameMetadata> composerMetadata; using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey; if (metadata.validTypes & HdrMetadata::SMPTE2086) { composerMetadata .insert(composerMetadata.end(), Loading Loading @@ -1007,9 +1000,7 @@ Error CommandReader::parse() uint16_t length = 0; while (!isEmpty()) { auto command_2_1 = reinterpret_cast<hardware::graphics::composer::V2_1::IComposerClient::Command*>( &command); auto command_2_1 = reinterpret_cast<V2_1::IComposerClient::Command*>(&command); if (!beginCommand(command_2_1, &length)) { break; } Loading services/surfaceflinger/DisplayHardware/ComposerHal.h +29 −28 Original line number Diff line number Diff line Loading @@ -37,32 +37,32 @@ namespace android { namespace Hwc2 { using android::frameworks::vr::composer::V1_0::IVrComposerClient; using android::hardware::graphics::common::V1_0::ColorTransform; using android::hardware::graphics::common::V1_0::Hdr; using android::hardware::graphics::common::V1_0::Transform; using android::hardware::graphics::common::V1_1::ColorMode; using android::hardware::graphics::common::V1_1::Dataspace; using android::hardware::graphics::common::V1_1::PixelFormat; using android::hardware::graphics::common::V1_1::RenderIntent; using android::hardware::graphics::composer::V2_1::Config; using android::hardware::graphics::composer::V2_1::Display; using android::hardware::graphics::composer::V2_1::Error; using android::hardware::graphics::composer::V2_1::IComposer; using android::hardware::graphics::composer::V2_1::IComposerCallback; using android::hardware::graphics::composer::V2_1::Layer; using android::hardware::graphics::composer::V2_2::IComposerClient; using android::hardware::graphics::composer::V2_2::CommandReaderBase; using android::hardware::graphics::composer::V2_2::CommandWriterBase; using android::hardware::kSynchronizedReadWrite; using android::hardware::MessageQueue; using android::hardware::MQDescriptorSync; using android::hardware::hidl_vec; using android::hardware::hidl_handle; using frameworks::vr::composer::V1_0::IVrComposerClient; namespace types = hardware::graphics::common; namespace V2_1 = hardware::graphics::composer::V2_1; namespace V2_2 = hardware::graphics::composer::V2_2; using types::V1_0::ColorTransform; using types::V1_0::Hdr; using types::V1_0::Transform; using types::V1_1::ColorMode; using types::V1_1::Dataspace; using types::V1_1::PixelFormat; using types::V1_1::RenderIntent; using V2_1::Config; using V2_1::Display; using V2_1::Error; using V2_1::IComposerCallback; using V2_1::Layer; using V2_2::CommandReaderBase; using V2_2::CommandWriterBase; using V2_2::IComposer; using V2_2::IComposerClient; class Composer { public: Loading Loading @@ -396,8 +396,9 @@ private: // this function to execute the command queue. Error execute(); sp<IComposer> mComposer; sp<hardware::graphics::composer::V2_1::IComposerClient> mClient; sp<V2_1::IComposer> mComposer; sp<V2_1::IComposerClient> mClient; sp<IComposerClient> mClient_2_2; // 64KiB minus a small space for metadata such as read/write pointers Loading Loading
services/surfaceflinger/DisplayHardware/ComposerHal.cpp +16 −25 Original line number Diff line number Diff line Loading @@ -32,11 +32,6 @@ namespace android { using hardware::Return; using hardware::hidl_vec; using hardware::hidl_handle; using namespace hardware::graphics::common; using namespace hardware::graphics::composer; using PerFrameMetadata = hardware::graphics::composer::V2_2::IComposerClient::PerFrameMetadata; using PerFrameMetadataKey = hardware::graphics::composer::V2_2::IComposerClient::PerFrameMetadataKey; namespace Hwc2 { Loading Loading @@ -126,7 +121,7 @@ Composer::CommandWriter::~CommandWriter() void Composer::CommandWriter::setLayerInfo(uint32_t type, uint32_t appId) { constexpr uint16_t kSetLayerInfoLength = 2; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_LAYER_INFO), kSetLayerInfoLength); write(type); Loading @@ -138,7 +133,7 @@ void Composer::CommandWriter::setClientTargetMetadata( const IVrComposerClient::BufferMetadata& metadata) { constexpr uint16_t kSetClientTargetMetadataLength = 7; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_CLIENT_TARGET_METADATA), kSetClientTargetMetadataLength); writeBufferMetadata(metadata); Loading @@ -149,7 +144,7 @@ void Composer::CommandWriter::setLayerBufferMetadata( const IVrComposerClient::BufferMetadata& metadata) { constexpr uint16_t kSetLayerBufferMetadataLength = 7; beginCommand(static_cast<hardware::graphics::composer::V2_1::IComposerClient::Command>( beginCommand(static_cast<V2_1::IComposerClient::Command>( IVrComposerClient::VrCommand::SET_LAYER_BUFFER_METADATA), kSetLayerBufferMetadataLength); writeBufferMetadata(metadata); Loading @@ -171,7 +166,7 @@ Composer::Composer(const std::string& serviceName) : mWriter(kWriterInitialSize), mIsUsingVrComposer(serviceName == std::string("vr")) { mComposer = IComposer::getService(serviceName); mComposer = V2_1::IComposer::getService(serviceName); if (mComposer == nullptr) { LOG_ALWAYS_FATAL("failed to get hwcomposer service"); Loading @@ -189,7 +184,7 @@ Composer::Composer(const std::string& serviceName) } // 2.2 support is optional sp<V2_2::IComposer> composer_2_2 = V2_2::IComposer::castFrom(mComposer); sp<IComposer> composer_2_2 = IComposer::castFrom(mComposer); if (composer_2_2 != nullptr) { mClient_2_2 = IComposerClient::castFrom(mClient); LOG_ALWAYS_FATAL_IF(mClient_2_2 == nullptr, "IComposer 2.2 did not return IComposerClient 2.2"); Loading Loading @@ -271,7 +266,7 @@ Error Composer::createVirtualDisplay(uint32_t width, uint32_t height, }); } else { mClient->createVirtualDisplay(width, height, static_cast<V1_0::PixelFormat>(*format), bufferSlotCount, static_cast<types::V1_0::PixelFormat>(*format), bufferSlotCount, [&](const auto& tmpError, const auto& tmpDisplay, const auto& tmpFormat) { error = tmpError; Loading Loading @@ -368,7 +363,7 @@ Error Composer::getColorModes(Display display, if (error != Error::NONE) { return; } for (V1_0::ColorMode colorMode : tmpModes) { for (types::V1_0::ColorMode colorMode : tmpModes) { outModes->push_back(static_cast<ColorMode>(colorMode)); } }); Loading Loading @@ -533,7 +528,7 @@ Error Composer::setClientTarget(Display display, uint32_t slot, .height = target->getHeight(), .stride = target->getStride(), .layerCount = target->getLayerCount(), .format = static_cast<V1_0::PixelFormat>(target->getPixelFormat()), .format = static_cast<types::V1_0::PixelFormat>(target->getPixelFormat()), .usage = target->getUsage(), }; mWriter.setClientTargetMetadata(metadata); Loading @@ -556,7 +551,7 @@ Error Composer::setColorMode(Display display, ColorMode mode, ret = mClient_2_2->setColorMode_2_2(display, mode, renderIntent); } else { ret = mClient->setColorMode(display, static_cast<V1_0::ColorMode>(mode)); static_cast<types::V1_0::ColorMode>(mode)); } return unwrapRet(ret); } Loading @@ -577,15 +572,12 @@ Error Composer::setOutputBuffer(Display display, const native_handle_t* buffer, return Error::NONE; } Error Composer::setPowerMode(Display display, IComposerClient::PowerMode mode) { hardware::Return<Error> ret(Error::UNSUPPORTED); Error Composer::setPowerMode(Display display, IComposerClient::PowerMode mode) { Return<Error> ret(Error::UNSUPPORTED); if (mClient_2_2) { ret = mClient_2_2->setPowerMode_2_2(display, mode); } else if (mode != IComposerClient::PowerMode::ON_SUSPEND) { ret = mClient->setPowerMode(display, static_cast<hardware::graphics::composer::V2_1:: IComposerClient::PowerMode>(mode)); ret = mClient->setPowerMode(display, static_cast<V2_1::IComposerClient::PowerMode>(mode)); } return unwrapRet(ret); Loading Loading @@ -663,7 +655,7 @@ Error Composer::setLayerBuffer(Display display, Layer layer, .height = buffer->getHeight(), .stride = buffer->getStride(), .layerCount = buffer->getLayerCount(), .format = static_cast<V1_0::PixelFormat>(buffer->getPixelFormat()), .format = static_cast<types::V1_0::PixelFormat>(buffer->getPixelFormat()), .usage = buffer->getUsage(), }; mWriter.setLayerBufferMetadata(metadata); Loading Loading @@ -731,7 +723,8 @@ Error Composer::setLayerHdrMetadata(Display display, Layer layer, const HdrMetad mWriter.selectDisplay(display); mWriter.selectLayer(layer); std::vector<PerFrameMetadata> composerMetadata; std::vector<IComposerClient::PerFrameMetadata> composerMetadata; using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey; if (metadata.validTypes & HdrMetadata::SMPTE2086) { composerMetadata .insert(composerMetadata.end(), Loading Loading @@ -1007,9 +1000,7 @@ Error CommandReader::parse() uint16_t length = 0; while (!isEmpty()) { auto command_2_1 = reinterpret_cast<hardware::graphics::composer::V2_1::IComposerClient::Command*>( &command); auto command_2_1 = reinterpret_cast<V2_1::IComposerClient::Command*>(&command); if (!beginCommand(command_2_1, &length)) { break; } Loading
services/surfaceflinger/DisplayHardware/ComposerHal.h +29 −28 Original line number Diff line number Diff line Loading @@ -37,32 +37,32 @@ namespace android { namespace Hwc2 { using android::frameworks::vr::composer::V1_0::IVrComposerClient; using android::hardware::graphics::common::V1_0::ColorTransform; using android::hardware::graphics::common::V1_0::Hdr; using android::hardware::graphics::common::V1_0::Transform; using android::hardware::graphics::common::V1_1::ColorMode; using android::hardware::graphics::common::V1_1::Dataspace; using android::hardware::graphics::common::V1_1::PixelFormat; using android::hardware::graphics::common::V1_1::RenderIntent; using android::hardware::graphics::composer::V2_1::Config; using android::hardware::graphics::composer::V2_1::Display; using android::hardware::graphics::composer::V2_1::Error; using android::hardware::graphics::composer::V2_1::IComposer; using android::hardware::graphics::composer::V2_1::IComposerCallback; using android::hardware::graphics::composer::V2_1::Layer; using android::hardware::graphics::composer::V2_2::IComposerClient; using android::hardware::graphics::composer::V2_2::CommandReaderBase; using android::hardware::graphics::composer::V2_2::CommandWriterBase; using android::hardware::kSynchronizedReadWrite; using android::hardware::MessageQueue; using android::hardware::MQDescriptorSync; using android::hardware::hidl_vec; using android::hardware::hidl_handle; using frameworks::vr::composer::V1_0::IVrComposerClient; namespace types = hardware::graphics::common; namespace V2_1 = hardware::graphics::composer::V2_1; namespace V2_2 = hardware::graphics::composer::V2_2; using types::V1_0::ColorTransform; using types::V1_0::Hdr; using types::V1_0::Transform; using types::V1_1::ColorMode; using types::V1_1::Dataspace; using types::V1_1::PixelFormat; using types::V1_1::RenderIntent; using V2_1::Config; using V2_1::Display; using V2_1::Error; using V2_1::IComposerCallback; using V2_1::Layer; using V2_2::CommandReaderBase; using V2_2::CommandWriterBase; using V2_2::IComposer; using V2_2::IComposerClient; class Composer { public: Loading Loading @@ -396,8 +396,9 @@ private: // this function to execute the command queue. Error execute(); sp<IComposer> mComposer; sp<hardware::graphics::composer::V2_1::IComposerClient> mClient; sp<V2_1::IComposer> mComposer; sp<V2_1::IComposerClient> mClient; sp<IComposerClient> mClient_2_2; // 64KiB minus a small space for metadata such as read/write pointers Loading