OLD | NEW |
---|---|
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
227 // in the proper places and update the notifyIfCanDrawChanged test. | 227 // in the proper places and update the notifyIfCanDrawChanged test. |
228 | 228 |
229 if (!rootLayer()) { | 229 if (!rootLayer()) { |
230 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no root layer"); | 230 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no root layer"); |
231 return false; | 231 return false; |
232 } | 232 } |
233 if (deviceViewportSize().IsEmpty()) { | 233 if (deviceViewportSize().IsEmpty()) { |
234 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw empty viewport"); | 234 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw empty viewport"); |
235 return false; | 235 return false; |
236 } | 236 } |
237 if (deviceViewportSize() != activeTree()->device_viewport_size()) { | |
238 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw viewport resize i ncomplete"); | |
239 return false; | |
240 } | |
237 if (!m_renderer) { | 241 if (!m_renderer) { |
238 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no renderer"); | 242 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no renderer"); |
239 return false; | 243 return false; |
240 } | 244 } |
241 if (m_activeTree->ContentsTexturesPurged()) { | 245 if (m_activeTree->ContentsTexturesPurged()) { |
242 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw contents textures purged"); | 246 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw contents textures purged"); |
243 return false; | 247 return false; |
244 } | 248 } |
245 return true; | 249 return true; |
246 } | 250 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
279 { | 283 { |
280 if (!rootScrollLayer()) | 284 if (!rootScrollLayer()) |
281 return; | 285 return; |
282 | 286 |
283 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 287 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
284 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); | 288 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); |
285 if (!m_settings.pageScalePinchZoomEnabled) { | 289 if (!m_settings.pageScalePinchZoomEnabled) { |
286 scrollTotal.Scale(1 / activeTree()->page_scale_factor()); | 290 scrollTotal.Scale(1 / activeTree()->page_scale_factor()); |
287 scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor()); | 291 scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor()); |
288 } | 292 } |
289 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); | 293 gfx::SizeF viewportSize = gfx::ScaleSize(deviceViewportSize(), 1 / m_deviceS caleFactor); |
danakj
2013/02/13 06:51:36
Is this right? The rootScrollLayer() it's using he
aelias_OOO_until_Jul13
2013/02/13 07:37:08
I definitely want pendingTree size here. pageScal
| |
290 | 294 |
291 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 295 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
292 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()- >total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds ); | 296 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()- >total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds ); |
293 | 297 |
294 if (anchorPoint) { | 298 if (anchorPoint) { |
295 gfx::Vector2dF anchor(targetOffset); | 299 gfx::Vector2dF anchor(targetOffset); |
296 if (!m_settings.pageScalePinchZoomEnabled) | 300 if (!m_settings.pageScalePinchZoomEnabled) |
297 anchor.Scale(1 / pageScale); | 301 anchor.Scale(1 / pageScale); |
298 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); | 302 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); |
299 } else { | 303 } else { |
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
861 return m_renderer->capabilities(); | 865 return m_renderer->capabilities(); |
862 } | 866 } |
863 | 867 |
864 bool LayerTreeHostImpl::swapBuffers() | 868 bool LayerTreeHostImpl::swapBuffers() |
865 { | 869 { |
866 return m_renderer->swapBuffers(); | 870 return m_renderer->swapBuffers(); |
867 } | 871 } |
868 | 872 |
869 const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const | 873 const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const |
870 { | 874 { |
871 return m_deviceViewportSize; | 875 if (pendingTree()) |
876 return pendingTree()->device_viewport_size(); | |
877 return activeTree()->device_viewport_size(); | |
878 } | |
879 | |
880 const gfx::Size& LayerTreeHostImpl::layoutViewportSize() const | |
881 { | |
882 if (pendingTree()) | |
883 return pendingTree()->layout_viewport_size(); | |
884 return activeTree()->layout_viewport_size(); | |
872 } | 885 } |
873 | 886 |
874 const LayerTreeSettings& LayerTreeHostImpl::settings() const | 887 const LayerTreeSettings& LayerTreeHostImpl::settings() const |
875 { | 888 { |
876 return m_settings; | 889 return m_settings; |
877 } | 890 } |
878 | 891 |
879 void LayerTreeHostImpl::didLoseOutputSurface() | 892 void LayerTreeHostImpl::didLoseOutputSurface() |
880 { | 893 { |
881 m_client->didLoseOutputSurfaceOnImplThread(); | 894 m_client->didLoseOutputSurfaceOnImplThread(); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1084 // to be initialized to get max texture size. | 1097 // to be initialized to get max texture size. |
1085 activeTree()->set_needs_update_draw_properties(); | 1098 activeTree()->set_needs_update_draw_properties(); |
1086 if (pendingTree()) | 1099 if (pendingTree()) |
1087 pendingTree()->set_needs_update_draw_properties(); | 1100 pendingTree()->set_needs_update_draw_properties(); |
1088 | 1101 |
1089 return true; | 1102 return true; |
1090 } | 1103 } |
1091 | 1104 |
1092 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) | 1105 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) |
1093 { | 1106 { |
1094 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) | 1107 if (m_settings.implSidePainting) |
1095 return; | 1108 pendingTree()->SetViewportSize(layoutViewportSize, deviceViewportSize); |
1096 | 1109 else |
1097 m_layoutViewportSize = layoutViewportSize; | 1110 activeTree()->SetViewportSize(layoutViewportSize, deviceViewportSize); |
1098 m_deviceViewportSize = deviceViewportSize; | |
1099 | |
1100 updateMaxScrollOffset(); | |
1101 | |
1102 if (m_renderer) | |
1103 m_renderer->viewportChanged(); | |
1104 | |
1105 m_client->onCanDrawStateChanged(canDraw()); | |
1106 } | 1111 } |
1107 | 1112 |
1108 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) | 1113 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) |
1109 { | 1114 { |
1110 if (!layerImpl) | 1115 if (!layerImpl) |
1111 return; | 1116 return; |
1112 | 1117 |
1113 if (layerImpl->scrollable()) { | 1118 if (layerImpl->scrollable()) { |
1114 // We need to convert impl-side scroll deltas to pageScale space. | 1119 // We need to convert impl-side scroll deltas to pageScale space. |
1115 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta(); | 1120 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta(); |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1421 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 1426 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
1422 scrollBegin.Scale(activeTree()->page_scale_delta()); | 1427 scrollBegin.Scale(activeTree()->page_scale_delta()); |
1423 float scaleBegin = activeTree()->total_page_scale_factor(); | 1428 float scaleBegin = activeTree()->total_page_scale_factor(); |
1424 float pageScaleDeltaToSend = activeTree()->min_page_scale_factor() / activeT ree()->page_scale_factor(); | 1429 float pageScaleDeltaToSend = activeTree()->min_page_scale_factor() / activeT ree()->page_scale_factor(); |
1425 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend); | 1430 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend); |
1426 | 1431 |
1427 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1432 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
1428 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1433 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
1429 scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin); | 1434 scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin); |
1430 scrollEnd -= anchorOffset; | 1435 scrollEnd -= anchorOffset; |
1431 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(m_deviceViewportSize).bottom_right()); | 1436 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(deviceViewportSize()).bottom_right()); |
danakj
2013/02/13 06:51:36
Should this be the active tree's deviceViewportSiz
aelias_OOO_until_Jul13
2013/02/13 07:37:08
This is dead code due for deletion, doesn't matter
| |
1432 scrollEnd.ClampToMin(gfx::Vector2d()); | 1437 scrollEnd.ClampToMin(gfx::Vector2d()); |
1433 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1438 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
1434 scrollEnd.Scale(m_deviceScaleFactor); | 1439 scrollEnd.Scale(m_deviceScaleFactor); |
1435 | 1440 |
1436 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), activeT ree()->min_page_scale_factor()); | 1441 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), activeT ree()->min_page_scale_factor()); |
1437 } | 1442 } |
1438 | 1443 |
1439 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl) | 1444 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl) |
1440 { | 1445 { |
1441 if (!layerImpl) | 1446 if (!layerImpl) |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1711 state->SetString("lthi_id", StringPrintf("%p", this)); | 1716 state->SetString("lthi_id", StringPrintf("%p", this)); |
1712 state->SetBoolean("visible_resources_ready", pendingTree()->AreVisibleResour cesReady()); | 1717 state->SetBoolean("visible_resources_ready", pendingTree()->AreVisibleResour cesReady()); |
1713 state->Set("tile_manager", m_tileManager->BasicStateAsValue().release()); | 1718 state->Set("tile_manager", m_tileManager->BasicStateAsValue().release()); |
1714 return state.PassAs<base::Value>(); | 1719 return state.PassAs<base::Value>(); |
1715 } | 1720 } |
1716 | 1721 |
1717 scoped_ptr<base::Value> LayerTreeHostImpl::frameStateAsValue() const | 1722 scoped_ptr<base::Value> LayerTreeHostImpl::frameStateAsValue() const |
1718 { | 1723 { |
1719 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 1724 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
1720 state->SetString("lthi_id", StringPrintf("%p", this)); | 1725 state->SetString("lthi_id", StringPrintf("%p", this)); |
1721 state->Set("device_viewport_size", MathUtil::asValue(m_deviceViewportSize).r elease()); | 1726 state->Set("device_viewport_size", MathUtil::asValue(deviceViewportSize()).r elease()); |
danakj
2013/02/13 06:51:36
This should be the active tree too right?
I feel
aelias_OOO_until_Jul13
2013/02/13 07:37:08
If it drew a frame, then active tree and pending t
| |
1722 if (m_tileManager) | 1727 if (m_tileManager) |
1723 state->Set("tiles", m_tileManager->AllTilesAsValue().release()); | 1728 state->Set("tiles", m_tileManager->AllTilesAsValue().release()); |
1724 return state.PassAs<base::Value>(); | 1729 return state.PassAs<base::Value>(); |
1725 } | 1730 } |
1726 | 1731 |
1727 // static | 1732 // static |
1728 LayerImpl* LayerTreeHostImpl::getNonCompositedContentLayerRecursive(LayerImpl* l ayer) | 1733 LayerImpl* LayerTreeHostImpl::getNonCompositedContentLayerRecursive(LayerImpl* l ayer) |
1729 { | 1734 { |
1730 if (!layer) | 1735 if (!layer) |
1731 return NULL; | 1736 return NULL; |
(...skipping 25 matching lines...) Expand all Loading... | |
1757 if (m_tileManager) | 1762 if (m_tileManager) |
1758 m_tileManager->SetRecordRenderingStats(m_debugState.recordRenderingStats ()); | 1763 m_tileManager->SetRecordRenderingStats(m_debugState.recordRenderingStats ()); |
1759 } | 1764 } |
1760 | 1765 |
1761 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1766 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
1762 { | 1767 { |
1763 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1768 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
1764 } | 1769 } |
1765 | 1770 |
1766 } // namespace cc | 1771 } // namespace cc |
OLD | NEW |