[Webkit-unassigned] [Bug 22379] Make CSSOM use less memory
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri Dec 5 06:03:57 PST 2008
https://bugs.webkit.org/show_bug.cgi?id=22379
darin at apple.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #25768|review? |review+
Flag| |
------- Comment #15 from darin at apple.com 2008-12-05 06:03 PDT -------
(From update of attachment 25768)
> + Vector<CSSProperty>::const_iterator it = findPropertyWithId(propertyID);
Something I always tell people who are working with Vector is that iterators
are just pointers and thus I think it's unnecessary to use the typedef or use
end() to indicate "not found". So I would have done:
const CSSProperty* property = findPropertyWithId(propertyID);
And I would have make it return 0 when not found rather than end().
> + String value = returnText ? (*it).value()->cssText() : String();
I think it->value() reads better than (*it).value.
> + (*it) = property;
No parentheses needed here.
> void CSSMutableStyleDeclaration::removePropertiesInSet(const int* set, unsigned length, bool notifyChanged)
> {
> - bool changed = false;
> - for (unsigned i = 0; i < length; i++) {
> - RefPtr<CSSValue> value = getPropertyCSSValue(set[i]);
> - if (value) {
> - m_values.remove(CSSProperty(set[i], value.release(), false));
> - changed = true;
> + ASSERT(!m_iteratorCount);
> +
> + if (m_properties.isEmpty())
> + return;
> +
> + // FIXME: This is often used with static sets and in that case constructing the hash repeatedly is pretty pointless.
> + HashSet<unsigned> toRemove;
> + for (unsigned i = 0; i < length; i++)
> + toRemove.add(set[i]);
I think we should change this function to take a HashSet and make a helper
function to use with it. I think the function is *always* used with static
sets.
I don't understand why you chose HashSet<unsigned> rather than HashSet<int> or
HashSet<CSSPropertyID>.
> Index: WebCore/css/CSSProperty.h
> ===================================================================
> --- WebCore/css/CSSProperty.h (revision 39020)
> +++ WebCore/css/CSSProperty.h (working copy)
> @@ -45,6 +45,7 @@ public:
> m_id = other.m_id;
> m_shorthandID = other.m_shorthandID;
> m_important = other.m_important;
> + m_implicit = other.m_implicit;
> m_value = other.m_value;
> return *this;
> }
Maybe you could land this change sepaarately?
> +namespace WTF {
> + template<> struct VectorTraits<WebCore::CSSProperty> : SimpleClassVectorTraits { };
> +}
I think this needs a comment to explain what it means and why we're doing it.
> - Vector<int> properties;
> - DeprecatedValueListConstIterator<CSSProperty> end;
> - for (DeprecatedValueListConstIterator<CSSProperty> it(style->valuesIterator()); it != end; ++it) {
> - const CSSProperty& property = *it;
> - RefPtr<CSSValue> value = getPropertyCSSValue(property.id());
> - if (value && (value->cssText() == property.value()->cssText()))
> - properties.append(property.id());
> + Vector<int> propertiesToRemove;
> + {
> + CSSMutableStyleDeclaration::const_iterator end = style->end();
> + for (CSSMutableStyleDeclaration::const_iterator it = style->begin(); it != end; ++it) {
> + const CSSProperty& property = *it;
> + RefPtr<CSSValue> value = getPropertyCSSValue(property.id());
> + if (value && (value->cssText() == property.value()->cssText()))
> + propertiesToRemove.append(property.id());
> + }
> }
>
> - for (unsigned i = 0; i < properties.size(); i++)
> - style->removeProperty(properties[i]);
> + // FIXME: This should use mass removal.
> + for (unsigned i = 0; i < propertiesToRemove.size(); i++)
> + style->removeProperty(propertiesToRemove[i]);
> }
Why not change this to use removePropertiesFromSet now? If you're going to add
a comment, please mention the name of the function specifically.
How did you test the impact on speed?
r=me
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the webkit-unassigned
mailing list