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

Commit eea8c324 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[composer] Add createCommandWriter to command engine."

parents f2aaa68e ad96dd9f
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;
};