| 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); |
| 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()); |
| 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(m_activeTree->device_vi
ewport_size()).release()); |
| 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 |