From ad96dd9f12a500124a82eef42e9368a83a4b75a6 Mon Sep 17 00:00:00 2001 From: Peiyong Lin Date: Thu, 9 Jan 2020 13:42:15 -0800 Subject: [PATCH] [composer] Add createCommandWriter to command engine. Command engine always uses V2.1 CommandWriterBase, change the creation of command writer inside command engine so that we can use the right version of command writer. BUG: b/147365206 Test: build and boot. Change-Id: I61fbbce19a44244725621e9a1cef750bd4c78b4d --- .../composer-hal/2.1/ComposerCommandEngine.h | 92 ++++++++++--------- .../composer-hal/2.2/ComposerCommandEngine.h | 9 +- .../composer-hal/2.3/ComposerCommandEngine.h | 11 ++- 3 files changed, 64 insertions(+), 48 deletions(-) diff --git a/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/ComposerCommandEngine.h b/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/ComposerCommandEngine.h index 53b9202b97..b173e2eeb0 100644 --- a/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/ComposerCommandEngine.h +++ b/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/ComposerCommandEngine.h @@ -39,8 +39,10 @@ namespace hal { // TODO own a CommandReaderBase rather than subclassing class ComposerCommandEngine : protected CommandReaderBase { public: - ComposerCommandEngine(ComposerHal* hal, ComposerResources* resources) - : mHal(hal), mResources(resources) {} + ComposerCommandEngine(ComposerHal* hal, ComposerResources* resources) + : mHal(hal), mResources(resources) { + mWriter = createCommandWriter(kWriterInitialSize); + } virtual ~ComposerCommandEngine() = default; @@ -74,16 +76,16 @@ class ComposerCommandEngine : protected CommandReaderBase { return Error::BAD_PARAMETER; } - return mWriter.writeQueue(outQueueChanged, outCommandLength, outCommandHandles) - ? Error::NONE - : Error::NO_RESOURCES; + return mWriter->writeQueue(outQueueChanged, outCommandLength, outCommandHandles) + ? Error::NONE + : Error::NO_RESOURCES; } - const MQDescriptorSync* getOutputMQDescriptor() { return mWriter.getMQDescriptor(); } + const MQDescriptorSync* getOutputMQDescriptor() { return mWriter->getMQDescriptor(); } void reset() { CommandReaderBase::reset(); - mWriter.reset(); + mWriter->reset(); } protected: @@ -140,13 +142,17 @@ class ComposerCommandEngine : protected CommandReaderBase { } } + virtual std::unique_ptr createCommandWriter(size_t writerInitialSize) { + return std::make_unique(writerInitialSize); + } + bool executeSelectDisplay(uint16_t length) { if (length != CommandWriterBase::kSelectDisplayLength) { return false; } mCurrentDisplay = read64(); - mWriter.selectDisplay(mCurrentDisplay); + mWriter->selectDisplay(mCurrentDisplay); return true; } @@ -174,7 +180,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setColorTransform(mCurrentDisplay, matrix, transform); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -208,7 +214,7 @@ class ComposerCommandEngine : protected CommandReaderBase { close(fence); } if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -239,7 +245,7 @@ class ComposerCommandEngine : protected CommandReaderBase { close(fence); } if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -260,10 +266,10 @@ class ComposerCommandEngine : protected CommandReaderBase { &displayRequestMask, &requestedLayers, &requestMasks); mResources->setDisplayMustValidateState(mCurrentDisplay, false); if (err == Error::NONE) { - mWriter.setChangedCompositionTypes(changedLayers, compositionTypes); - mWriter.setDisplayRequests(displayRequestMask, requestedLayers, requestMasks); + mWriter->setChangedCompositionTypes(changedLayers, compositionTypes); + mWriter->setDisplayRequests(displayRequestMask, requestedLayers, requestMasks); } else { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -283,9 +289,9 @@ class ComposerCommandEngine : protected CommandReaderBase { ? Error::NOT_VALIDATED : mHal->presentDisplay(mCurrentDisplay, &presentFence, &layers, &fences); if (err == Error::NONE) { - mWriter.setPresentOrValidateResult(1); - mWriter.setPresentFence(presentFence); - mWriter.setReleaseFences(layers, fences); + mWriter->setPresentOrValidateResult(1); + mWriter->setPresentFence(presentFence); + mWriter->setReleaseFences(layers, fences); return true; } } @@ -301,11 +307,11 @@ class ComposerCommandEngine : protected CommandReaderBase { &displayRequestMask, &requestedLayers, &requestMasks); mResources->setDisplayMustValidateState(mCurrentDisplay, false); if (err == Error::NONE) { - mWriter.setPresentOrValidateResult(0); - mWriter.setChangedCompositionTypes(changedLayers, compositionTypes); - mWriter.setDisplayRequests(displayRequestMask, requestedLayers, requestMasks); + mWriter->setPresentOrValidateResult(0); + mWriter->setChangedCompositionTypes(changedLayers, compositionTypes); + mWriter->setDisplayRequests(displayRequestMask, requestedLayers, requestMasks); } else { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -318,7 +324,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->acceptDisplayChanges(mCurrentDisplay); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -334,10 +340,10 @@ class ComposerCommandEngine : protected CommandReaderBase { std::vector fences; auto err = mHal->presentDisplay(mCurrentDisplay, &presentFence, &layers, &fences); if (err == Error::NONE) { - mWriter.setPresentFence(presentFence); - mWriter.setReleaseFences(layers, fences); + mWriter->setPresentFence(presentFence); + mWriter->setReleaseFences(layers, fences); } else { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -351,7 +357,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerCursorPosition(mCurrentDisplay, mCurrentLayer, readSigned(), readSigned()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -382,7 +388,7 @@ class ComposerCommandEngine : protected CommandReaderBase { close(fence); } if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -397,7 +403,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto damage = readRegion(length / 4); auto err = mHal->setLayerSurfaceDamage(mCurrentDisplay, mCurrentLayer, damage); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -410,7 +416,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerBlendMode(mCurrentDisplay, mCurrentLayer, readSigned()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -423,7 +429,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerColor(mCurrentDisplay, mCurrentLayer, readColor()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -436,7 +442,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerCompositionType(mCurrentDisplay, mCurrentLayer, readSigned()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -449,7 +455,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerDataspace(mCurrentDisplay, mCurrentLayer, readSigned()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -462,7 +468,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerDisplayFrame(mCurrentDisplay, mCurrentLayer, readRect()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -475,7 +481,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerPlaneAlpha(mCurrentDisplay, mCurrentLayer, readFloat()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -496,7 +502,7 @@ class ComposerCommandEngine : protected CommandReaderBase { err = mHal->setLayerSidebandStream(mCurrentDisplay, mCurrentLayer, stream); } if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -509,7 +515,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerSourceCrop(mCurrentDisplay, mCurrentLayer, readFRect()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -522,7 +528,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerTransform(mCurrentDisplay, mCurrentLayer, readSigned()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -537,7 +543,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto region = readRegion(length / 4); auto err = mHal->setLayerVisibleRegion(mCurrentDisplay, mCurrentLayer, region); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -550,7 +556,7 @@ class ComposerCommandEngine : protected CommandReaderBase { auto err = mHal->setLayerZOrder(mCurrentDisplay, mCurrentLayer, read()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -579,12 +585,12 @@ class ComposerCommandEngine : protected CommandReaderBase { }; } - ComposerHal* mHal; - ComposerResources* mResources; - // 64KiB minus a small space for metadata such as read/write pointers static constexpr size_t kWriterInitialSize = 64 * 1024 / sizeof(uint32_t) - 16; - CommandWriterBase mWriter{kWriterInitialSize}; + + ComposerHal* mHal; + ComposerResources* mResources; + std::unique_ptr mWriter; Display mCurrentDisplay = 0; Layer mCurrentLayer = 0; diff --git a/graphics/composer/2.2/utils/hal/include/composer-hal/2.2/ComposerCommandEngine.h b/graphics/composer/2.2/utils/hal/include/composer-hal/2.2/ComposerCommandEngine.h index d9f6226ad9..8d70ba2aac 100644 --- a/graphics/composer/2.2/utils/hal/include/composer-hal/2.2/ComposerCommandEngine.h +++ b/graphics/composer/2.2/utils/hal/include/composer-hal/2.2/ComposerCommandEngine.h @@ -49,6 +49,11 @@ class ComposerCommandEngine : public V2_1::hal::ComposerCommandEngine { } } + std::unique_ptr createCommandWriter( + size_t writerInitialSize) override { + return std::make_unique(writerInitialSize); + } + bool executeSetLayerPerFrameMetadata(uint16_t length) { // (key, value) pairs if (length % 2 != 0) { @@ -65,7 +70,7 @@ class ComposerCommandEngine : public V2_1::hal::ComposerCommandEngine { auto err = mHal->setLayerPerFrameMetadata(mCurrentDisplay, mCurrentLayer, metadata); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -78,7 +83,7 @@ class ComposerCommandEngine : public V2_1::hal::ComposerCommandEngine { auto err = mHal->setLayerFloatColor(mCurrentDisplay, mCurrentLayer, readFloatColor()); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; diff --git a/graphics/composer/2.3/utils/hal/include/composer-hal/2.3/ComposerCommandEngine.h b/graphics/composer/2.3/utils/hal/include/composer-hal/2.3/ComposerCommandEngine.h index 329dbed51f..02f62127bd 100644 --- a/graphics/composer/2.3/utils/hal/include/composer-hal/2.3/ComposerCommandEngine.h +++ b/graphics/composer/2.3/utils/hal/include/composer-hal/2.3/ComposerCommandEngine.h @@ -50,6 +50,11 @@ class ComposerCommandEngine : public V2_2::hal::ComposerCommandEngine { } } + std::unique_ptr createCommandWriter( + size_t writerInitialSize) override { + return std::make_unique(writerInitialSize); + } + bool executeSetLayerColorTransform(uint16_t length) { if (length != CommandWriterBase::kSetLayerColorTransformLength) { return false; @@ -61,7 +66,7 @@ class ComposerCommandEngine : public V2_2::hal::ComposerCommandEngine { } auto err = mHal->setLayerColorTransform(mCurrentDisplay, mCurrentLayer, matrix); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; @@ -97,7 +102,7 @@ class ComposerCommandEngine : public V2_2::hal::ComposerCommandEngine { } auto err = mHal->setLayerPerFrameMetadataBlobs(mCurrentDisplay, mCurrentLayer, metadata); if (err != Error::NONE) { - mWriter.setError(getCommandLoc(), err); + mWriter->setError(getCommandLoc(), err); } return true; } @@ -111,8 +116,8 @@ class ComposerCommandEngine : public V2_2::hal::ComposerCommandEngine { private: using BaseType2_1 = V2_1::hal::ComposerCommandEngine; - using BaseType2_1::mWriter; using BaseType2_2 = V2_2::hal::ComposerCommandEngine; + using BaseType2_1::mWriter; ComposerHal* mHal; };