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 ...@@ -465,9 +465,14 @@ void SelectorDataList::execute(ContainerNode& rootNode, typename SelectorQueryTr
findTraverseRootsAndExecute<SelectorQueryTrait>(rootNode, output); findTraverseRootsAndExecute<SelectorQueryTrait>(rootNode, output);
} }
SelectorQuery::SelectorQuery(const CSSSelectorList& selectorList) PassOwnPtr<SelectorQuery> SelectorQuery::adopt(CSSSelectorList& selectorList)
: m_selectorList(selectorList)
{ {
return adoptPtr(new SelectorQuery(selectorList));
}
SelectorQuery::SelectorQuery(CSSSelectorList& selectorList)
{
m_selectorList.adopt(selectorList);
m_selectors.initialize(m_selectorList); m_selectors.initialize(m_selectorList);
} }
...@@ -511,10 +516,7 @@ SelectorQuery* SelectorQueryCache::add(const AtomicString& selectors, const Docu ...@@ -511,10 +516,7 @@ SelectorQuery* SelectorQueryCache::add(const AtomicString& selectors, const Docu
if (m_entries.size() == maximumSelectorQueryCacheSize) if (m_entries.size() == maximumSelectorQueryCacheSize)
m_entries.remove(m_entries.begin()); m_entries.remove(m_entries.begin());
OwnPtr<SelectorQuery> selectorQuery = adoptPtr(new SelectorQuery(selectorList)); return m_entries.add(selectors, SelectorQuery::adopt(selectorList)).storedValue->value.get();
SelectorQuery* rawSelectorQuery = selectorQuery.get();
m_entries.add(selectors, selectorQuery.release());
return rawSelectorQuery;
} }
void SelectorQueryCache::invalidate() void SelectorQueryCache::invalidate()
......
...@@ -88,11 +88,14 @@ class SelectorQuery { ...@@ -88,11 +88,14 @@ class SelectorQuery {
WTF_MAKE_NONCOPYABLE(SelectorQuery); WTF_MAKE_NONCOPYABLE(SelectorQuery);
WTF_MAKE_FAST_ALLOCATED; WTF_MAKE_FAST_ALLOCATED;
public: public:
explicit SelectorQuery(const CSSSelectorList&); static PassOwnPtr<SelectorQuery> adopt(CSSSelectorList&);
bool matches(Element&) const; bool matches(Element&) const;
PassRefPtrWillBeRawPtr<NodeList> queryAll(ContainerNode& rootNode) const; PassRefPtrWillBeRawPtr<NodeList> queryAll(ContainerNode& rootNode) const;
PassRefPtrWillBeRawPtr<Element> queryFirst(ContainerNode& rootNode) const; PassRefPtrWillBeRawPtr<Element> queryFirst(ContainerNode& rootNode) const;
private: private:
explicit SelectorQuery(CSSSelectorList&);
SelectorDataList m_selectors; SelectorDataList m_selectors;
CSSSelectorList m_selectorList; 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