[Webkit-unassigned] [Bug 101857] Updating mouse cursor on style changes without emitting fake mousemove event

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Feb 14 19:53:24 PST 2013


https://bugs.webkit.org/show_bug.cgi?id=101857





--- Comment #87 from Simon Fraser (smfr) <simon.fraser at apple.com>  2013-02-14 19:55:40 PST ---
This patch is fundamentally wrong, and a huge performance regression.

It's wrong because you're do hit testing (via updateCursor()) inside of style recalc. Hit testing relies on geometry, but since style recalc happens before layout, the geometry is not up-to-date.

Secondly, it's a huge perf hit. I profiled the web inspector while dragging a separator around, and see this:

Running Time    Self        Symbol Name
7864.0ms   96.6%    0.0                                    WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
7849.0ms   96.4%    0.0                                     WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
7842.0ms   96.3%    0.0                                      WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
5233.0ms   64.3%    1.0                                       WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
4534.0ms   55.7%    0.0                                        WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
1932.0ms   23.7%    1.0                                         WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
1614.0ms   19.8%    0.0                                         WebCore::Text::recalcTextStyle(WebCore::Node::StyleChange)
1612.0ms   19.8%    1.0                                          WebCore::RenderObject::setStyle(WTF::PassRefPtr<WebCore::RenderStyle>)
1607.0ms   19.7%    0.0                                           WebCore::EventHandler::updateCursor()
1583.0ms   19.4%    0.0                                            WebCore::RenderView::hitTest(WebCore::HitTestRequest const&, WebCore::HitTestResult&)
1583.0ms   19.4%    0.0                                             WebCore::RenderLayer::hitTest(WebCore::HitTestRequest const&, WebCore::HitTestLocation const&, WebCore::HitTestResult&)
1580.0ms   19.4%    1.0                                              WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, bool, WebCore::HitTestingTransformState const*, double*)
1578.0ms   19.3%    0.0                                               WebCore::RenderLayer::hitTestList(WTF::Vector<WebCore::RenderLayer*, 0ul>*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1578.0ms   19.3%    0.0                                                WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, bool, WebCore::HitTestingTransformState const*, double*)
1578.0ms   19.3%    0.0                                                 WebCore::RenderLayer::hitTestList(WTF::Vector<WebCore::RenderLayer*, 0ul>*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1577.0ms   19.3%    0.0                                                  WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, bool, WebCore::HitTestingTransformState const*, double*)
1572.0ms   19.3%    4.0                                                   WebCore::RenderLayer::hitTestList(WTF::Vector<WebCore::RenderLayer*, 0ul>*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1567.0ms   19.2%    5.0                                                    WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, bool, WebCore::HitTestingTransformState const*, double*)
1528.0ms   18.7%    122.0                                                     WebCore::RenderLayer::hitTestList(WTF::Vector<WebCore::RenderLayer*, 0ul>*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool)
1352.0ms   16.6%    182.0                                                      WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&, WebCore::HitTestResult&, WebCore::LayoutRect const&, WebCore::HitTestLocation const&, bool, WebCore::HitTestingTransformState const*, double*)

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list