OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 { | 95 { |
96 TRACE_EVENT_BEGIN0("blink,devtools.timeline", "HitTest"); | 96 TRACE_EVENT_BEGIN0("blink,devtools.timeline", "HitTest"); |
97 m_hitTestCount++; | 97 m_hitTestCount++; |
98 | 98 |
99 ASSERT(!result.hitTestLocation().isRectBasedTest() || result.hitTestRequest(
).listBased()); | 99 ASSERT(!result.hitTestLocation().isRectBasedTest() || result.hitTestRequest(
).listBased()); |
100 | 100 |
101 commitPendingSelection(); | 101 commitPendingSelection(); |
102 | 102 |
103 uint64_t domTreeVersion = document().domTreeVersion(); | 103 uint64_t domTreeVersion = document().domTreeVersion(); |
104 HitTestResult cacheResult = result; | 104 HitTestResult cacheResult = result; |
105 bool cacheHit = m_hitTestCache->lookupCachedResult(cacheResult, domTreeVersi
on); | 105 bool hitLayer = false; |
106 bool hitLayer = layer()->hitTest(result); | 106 if (m_hitTestCache->lookupCachedResult(cacheResult, domTreeVersion)) { |
| 107 m_hitTestCacheHits++; |
| 108 hitLayer = true; |
| 109 result = cacheResult; |
| 110 } else { |
| 111 hitLayer = layer()->hitTest(result); |
107 | 112 |
108 // FrameView scrollbars are not the same as Layer scrollbars tested by Layer
::hitTestOverflowControls, | 113 // FrameView scrollbars are not the same as Layer scrollbars tested by L
ayer::hitTestOverflowControls, |
109 // so we need to test FrameView scrollbars separately here. Note that it's i
mportant we do this after | 114 // so we need to test FrameView scrollbars separately here. Note that it
's important we do this after |
110 // the hit test above, because that may overwrite the entire HitTestResult w
hen it finds a hit. | 115 // the hit test above, because that may overwrite the entire HitTestResu
lt when it finds a hit. |
111 IntPoint framePoint = frameView()->contentsToFrame(result.hitTestLocation().
roundedPoint()); | 116 IntPoint framePoint = frameView()->contentsToFrame(result.hitTestLocatio
n().roundedPoint()); |
112 if (Scrollbar* frameScrollbar = frameView()->scrollbarAtFramePoint(framePoin
t)) | 117 if (Scrollbar* frameScrollbar = frameView()->scrollbarAtFramePoint(frame
Point)) |
113 result.setScrollbar(frameScrollbar); | 118 result.setScrollbar(frameScrollbar); |
114 | 119 |
115 if (cacheHit) { | 120 if (hitLayer) |
116 m_hitTestCacheHits++; | 121 m_hitTestCache->addCachedResult(result, domTreeVersion); |
117 m_hitTestCache->verifyCachedResult(result, cacheResult); | |
118 } | 122 } |
119 | 123 |
120 if (hitLayer) | |
121 m_hitTestCache->addCachedResult(result, domTreeVersion); | |
122 | |
123 TRACE_EVENT_END1("blink,devtools.timeline", "HitTest", "endData", InspectorH
itTestEvent::endData(result.hitTestRequest(), result.hitTestLocation(), result))
; | 124 TRACE_EVENT_END1("blink,devtools.timeline", "HitTest", "endData", InspectorH
itTestEvent::endData(result.hitTestRequest(), result.hitTestLocation(), result))
; |
124 return hitLayer; | 125 return hitLayer; |
125 } | 126 } |
126 | 127 |
127 void LayoutView::clearHitTestCache() | 128 void LayoutView::clearHitTestCache() |
128 { | 129 { |
129 m_hitTestCache->clear(); | 130 m_hitTestCache->clear(); |
130 if (LayoutPart* frameLayoutObject = frame()->ownerLayoutObject()) | 131 if (LayoutPart* frameLayoutObject = frame()->ownerLayoutObject()) |
131 frameLayoutObject->view()->clearHitTestCache(); | 132 frameLayoutObject->view()->clearHitTestCache(); |
132 } | 133 } |
(...skipping 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1005 return viewHeight(IncludeScrollbars) / scale; | 1006 return viewHeight(IncludeScrollbars) / scale; |
1006 } | 1007 } |
1007 | 1008 |
1008 void LayoutView::willBeDestroyed() | 1009 void LayoutView::willBeDestroyed() |
1009 { | 1010 { |
1010 LayoutBlockFlow::willBeDestroyed(); | 1011 LayoutBlockFlow::willBeDestroyed(); |
1011 m_compositor.clear(); | 1012 m_compositor.clear(); |
1012 } | 1013 } |
1013 | 1014 |
1014 } // namespace blink | 1015 } // namespace blink |
OLD | NEW |