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

Commit ad96dd9f authored by Peiyong Lin's avatar Peiyong Lin
Browse files

[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
parent a8cc1918
Loading
Loading
Loading
Loading
+49 −43
Original line number Diff line number Diff line
@@ -40,7 +40,9 @@ namespace hal {
class ComposerCommandEngine : protected CommandReaderBase {
   public:
     ComposerCommandEngine(ComposerHal* hal, ComposerResources* resources)
        : mHal(hal), mResources(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)
        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;
+7 −2
Original line number Diff line number Diff line
@@ -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;
+8 −3
Original line number Diff line number Diff line
@@ -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;
};