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

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

Merge "Merge metadata from transaction instead of replace"

parents efa19c2c ef876c9c
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -31,11 +31,24 @@ LayerMetadata::LayerMetadata(const LayerMetadata& other) = default;

LayerMetadata::LayerMetadata(LayerMetadata&& other) = default;

void LayerMetadata::merge(const LayerMetadata& other) {
bool LayerMetadata::merge(const LayerMetadata& other, bool eraseEmpty) {
    bool changed = false;
    for (const auto& entry : other.mMap) {
        auto it = mMap.find(entry.first);
        if (it != mMap.cend() && it->second != entry.second) {
            if (eraseEmpty && entry.second.empty()) {
                mMap.erase(it);
            } else {
                it->second = entry.second;
            }
            changed = true;
        } else if (it == mMap.cend() && !entry.second.empty()) {
            mMap[entry.first] = entry.second;
            changed = true;
        }
    }
    return changed;
}

status_t LayerMetadata::writeToParcel(Parcel* parcel) const {
    parcel->writeInt32(static_cast<int>(mMap.size()));
+3 −1
Original line number Diff line number Diff line
@@ -34,7 +34,9 @@ struct LayerMetadata : public Parcelable {
    LayerMetadata& operator=(const LayerMetadata& other);
    LayerMetadata& operator=(LayerMetadata&& other);

    void merge(const LayerMetadata& other);
    // Merges other into this LayerMetadata. If eraseEmpty is true, any entries in
    // in this whose keys are paired with empty values in other will be erased.
    bool merge(const LayerMetadata& other, bool eraseEmpty = false);

    status_t writeToParcel(Parcel* parcel) const override;
    status_t readFromParcel(const Parcel* parcel) override;
+2 −4
Original line number Diff line number Diff line
@@ -1338,10 +1338,8 @@ bool Layer::setOverrideScalingMode(int32_t scalingMode) {
    return true;
}

bool Layer::setMetadata(LayerMetadata data) {
    bool changed = data.mMap != mCurrentState.metadata.mMap;
    if (!changed) return false;
    mCurrentState.metadata = std::move(data);
bool Layer::setMetadata(const LayerMetadata& data) {
    if (!mCurrentState.metadata.merge(data, true /* eraseEmpty */)) return false;
    mCurrentState.sequence++;
    mCurrentState.modified = true;
    setTransactionFlags(eTransactionNeeded);
+1 −1
Original line number Diff line number Diff line
@@ -292,7 +292,7 @@ public:
                                              uint64_t frameNumber);
    virtual void deferTransactionUntil_legacy(const sp<Layer>& barrierLayer, uint64_t frameNumber);
    virtual bool setOverrideScalingMode(int32_t overrideScalingMode);
    virtual bool setMetadata(LayerMetadata data);
    virtual bool setMetadata(const LayerMetadata& data);
    virtual bool reparentChildren(const sp<IBinder>& layer);
    virtual void setChildrenDrawingParent(const sp<Layer>& layer);
    virtual bool reparent(const sp<IBinder>& newParentHandle);
+1 −1
Original line number Diff line number Diff line
@@ -4102,7 +4102,7 @@ status_t SurfaceFlinger::createLayer(const String8& name, const sp<Client>& clie
        }
    }

    layer->setMetadata(std::move(metadata));
    layer->setMetadata(metadata);

    bool addToCurrentState = callingThreadHasUnscopedSurfaceFlingerAccess();
    result = addClientLayer(client, *handle, *gbp, layer, *parent,
Loading