From 570cad82795beeb1eb7011c09be295afa11373ce Mon Sep 17 00:00:00 2001 From: win7-7 Date: Mon, 8 Jul 2019 19:19:56 +0300 Subject: Iterate the frame property list once to collect which child list properties we have Look into optimizing out the hashtable lookups from nsContainerFrame --- layout/base/FrameProperties.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'layout/base') diff --git a/layout/base/FrameProperties.h b/layout/base/FrameProperties.h index bba3ee06b..71a79138a 100644 --- a/layout/base/FrameProperties.h +++ b/layout/base/FrameProperties.h @@ -160,6 +160,11 @@ public: MOZ_ASSERT(mProperties.Length() == 0, "forgot to delete properties"); } + /** + * Return true if we have no properties, otherwise return false. + */ + bool IsEmpty() const { return mProperties.IsEmpty(); } + /** * Set a property value. This requires a linear search through * the properties of the frame. Any existing value for the property @@ -241,6 +246,28 @@ public: { DeleteInternal(aProperty, aFrame); } + + /** + * Call @aFunction for each property or until @aFunction returns false. + */ + template + void ForEach(F aFunction) const + { +#ifdef DEBUG + size_t len = mProperties.Length(); +#endif + for (const auto& prop : mProperties) { + bool shouldContinue = aFunction(prop.mProperty, prop.mValue); +#ifdef DEBUG + MOZ_ASSERT(len == mProperties.Length(), + "frame property list was modified by ForEach callback!"); +#endif + if (!shouldContinue) { + return; + } + } + } + /** * Remove and destroy all property values for the frame. */ -- cgit v1.2.3