EventPath::updateTouchLists traverses through EventPath thrice
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Oct 2013 04:08:16 +0000 (04:08 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Oct 2013 04:08:16 +0000 (04:08 +0000)
commitc9a5e5dd403fbde4d2e03c82ddb4348249a2aa0a
tree700d8082a6167a9c67735ccf1198088f0041e399
parentb2be645f4106f71654218a6c525786c5295d36af
EventPath::updateTouchLists traverses through EventPath thrice
https://bugs.webkit.org/show_bug.cgi?id=122804

Reviewed by Benjamin Poulain.

Instead of traversing through EventPath for each TouchList, traverse through TouchList for every EventContext.
This paves our way to have one-pass traversal over EventPath, and evetually to remove EventContext altogether.

This change should also improve the cache hit rate since all Touch objects tend to be allocated at the same time
but this performance improvement is probably not observable.

* dom/EventContext.h:
* dom/EventDispatcher.cpp:
(WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Added a new constructor that takes Touch and
and TouchListType. We need to store these two values in order to update EventContext later.
(WebCore::EventRelatedNodeResolver::touch): Added,
(WebCore::EventRelatedNodeResolver::touchListType): Added.
(WebCore::addRelatedNodeResolversForTouchList): Extracted from updateTouchListsInEventPath.
(WebCore::EventPath::updateTouchLists): Moved the loop over m_path here. Notice that the outer loop iterates
over m_path instead of touchList as done in updateTouchListsInEventPath. The inner loop goes through resolvers
and adds Touch objects each EventContext as needed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157441 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/dom/EventContext.h
Source/WebCore/dom/EventDispatcher.cpp