Loading libs/gui/LayerMetadata.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -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())); Loading libs/gui/include/gui/LayerMetadata.h +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading services/surfaceflinger/Layer.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -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); Loading services/surfaceflinger/Layer.h +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/surfaceflinger/SurfaceFlinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
libs/gui/LayerMetadata.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -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())); Loading
libs/gui/include/gui/LayerMetadata.h +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
services/surfaceflinger/Layer.cpp +2 −4 Original line number Diff line number Diff line Loading @@ -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); Loading
services/surfaceflinger/Layer.h +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/surfaceflinger/SurfaceFlinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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