Commit 36972d8c authored by ch.dumez@samsung.com's avatar ch.dumez@samsung.com

Update SelectorQuery constructor to adopt CSSSelectorList object

Update SelectorQuery constructor to adopt CSSSelectorList object instead of
copying it. This CL adds a adopt(CSSSelectorList&) factory function to
SelectorQuery class to make this behavior obvious.

Copying a CSSSelectorList is relatively expensive and it should therefore be
avoided when possible.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/330713003

git-svn-id: svn://svn.chromium.org/blink/trunk@176116 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 9ac0ede4
......@@ -465,9 +465,14 @@ void SelectorDataList::execute(ContainerNode& rootNode, typename SelectorQueryTr
findTraverseRootsAndExecute<SelectorQueryTrait>(rootNode, output);
}
SelectorQuery::SelectorQuery(const CSSSelectorList& selectorList)
: m_selectorList(selectorList)
PassOwnPtr<SelectorQuery> SelectorQuery::adopt(CSSSelectorList& selectorList)
{
return adoptPtr(new SelectorQuery(selectorList));
}
SelectorQuery::SelectorQuery(CSSSelectorList& selectorList)
{
m_selectorList.adopt(selectorList);
m_selectors.initialize(m_selectorList);
}
......@@ -511,10 +516,7 @@ SelectorQuery* SelectorQueryCache::add(const AtomicString& selectors, const Docu
if (m_entries.size() == maximumSelectorQueryCacheSize)
m_entries.remove(m_entries.begin());
OwnPtr<SelectorQuery> selectorQuery = adoptPtr(new SelectorQuery(selectorList));
SelectorQuery* rawSelectorQuery = selectorQuery.get();
m_entries.add(selectors, selectorQuery.release());
return rawSelectorQuery;
return m_entries.add(selectors, SelectorQuery::adopt(selectorList)).storedValue->value.get();
}
void SelectorQueryCache::invalidate()
......
......@@ -88,11 +88,14 @@ class SelectorQuery {
WTF_MAKE_NONCOPYABLE(SelectorQuery);
WTF_MAKE_FAST_ALLOCATED;
public:
explicit SelectorQuery(const CSSSelectorList&);
static PassOwnPtr<SelectorQuery> adopt(CSSSelectorList&);
bool matches(Element&) const;
PassRefPtrWillBeRawPtr<NodeList> queryAll(ContainerNode& rootNode) const;
PassRefPtrWillBeRawPtr<Element> queryFirst(ContainerNode& rootNode) const;
private:
explicit SelectorQuery(CSSSelectorList&);
SelectorDataList m_selectors;
CSSSelectorList m_selectorList;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment