mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
[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
This commit is contained in:
@@ -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<uint32_t>* getOutputMQDescriptor() { return mWriter.getMQDescriptor(); }
|
||||
const MQDescriptorSync<uint32_t>* 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<CommandWriterBase> createCommandWriter(size_t writerInitialSize) {
|
||||
return std::make_unique<CommandWriterBase>(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<int> 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<CommandWriterBase> mWriter;
|
||||
|
||||
Display mCurrentDisplay = 0;
|
||||
Layer mCurrentLayer = 0;
|
||||
|
||||
@@ -49,6 +49,11 @@ class ComposerCommandEngine : public V2_1::hal::ComposerCommandEngine {
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<V2_1::CommandWriterBase> createCommandWriter(
|
||||
size_t writerInitialSize) override {
|
||||
return std::make_unique<CommandWriterBase>(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;
|
||||
|
||||
@@ -50,6 +50,11 @@ class ComposerCommandEngine : public V2_2::hal::ComposerCommandEngine {
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<V2_1::CommandWriterBase> createCommandWriter(
|
||||
size_t writerInitialSize) override {
|
||||
return std::make_unique<CommandWriterBase>(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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user