Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1249)

Unified Diff: cc/layer_tree_host_impl.cc

Issue 12212156: cc: Only allow trees created at the current viewport size to draw. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Style nits Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index e357999dcb264deb268a5c190e8f2662127359c6..3cbd76e3bee99e187f1fb0f37f6fd1dc61d89065 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -234,6 +234,10 @@ bool LayerTreeHostImpl::canDraw()
TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw empty viewport");
return false;
}
+ if (deviceViewportSize() != activeTree()->device_viewport_size()) {
+ TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw viewport resize incomplete");
+ return false;
+ }
if (!m_renderer) {
TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no renderer");
return false;
@@ -286,7 +290,7 @@ void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
scrollTotal.Scale(1 / activeTree()->page_scale_factor());
scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor());
}
- gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceScaleFactor);
+ gfx::SizeF viewportSize = gfx::ScaleSize(deviceViewportSize(), 1 / m_deviceScaleFactor);
double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF();
m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()->total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds);
@@ -868,7 +872,16 @@ bool LayerTreeHostImpl::swapBuffers()
const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const
{
- return m_deviceViewportSize;
+ if (pendingTree())
+ return pendingTree()->device_viewport_size();
+ return activeTree()->device_viewport_size();
+}
+
+const gfx::Size& LayerTreeHostImpl::layoutViewportSize() const
+{
+ if (pendingTree())
+ return pendingTree()->layout_viewport_size();
+ return activeTree()->layout_viewport_size();
}
const LayerTreeSettings& LayerTreeHostImpl::settings() const
@@ -1091,18 +1104,10 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<OutputSurface> outputSurfa
void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, const gfx::Size& deviceViewportSize)
{
- if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_deviceViewportSize)
- return;
-
- m_layoutViewportSize = layoutViewportSize;
- m_deviceViewportSize = deviceViewportSize;
-
- updateMaxScrollOffset();
-
- if (m_renderer)
- m_renderer->viewportChanged();
-
- m_client->onCanDrawStateChanged(canDraw());
+ if (m_settings.implSidePainting)
+ pendingTree()->SetViewportSize(layoutViewportSize, deviceViewportSize);
+ else
+ activeTree()->SetViewportSize(layoutViewportSize, deviceViewportSize);
}
static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScaleChange)
@@ -1428,7 +1433,7 @@ void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo)
gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset;
scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin);
scrollEnd -= anchorOffset;
- scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx::Rect(m_deviceViewportSize).bottom_right());
+ scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx::Rect(deviceViewportSize()).bottom_right());
scrollEnd.ClampToMin(gfx::Vector2d());
scrollEnd.Scale(1 / pageScaleDeltaToSend);
scrollEnd.Scale(m_deviceScaleFactor);
@@ -1718,7 +1723,7 @@ scoped_ptr<base::Value> LayerTreeHostImpl::frameStateAsValue() const
{
scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
state->SetString("lthi_id", StringPrintf("%p", this));
- state->Set("device_viewport_size", MathUtil::asValue(m_deviceViewportSize).release());
+ state->Set("device_viewport_size", MathUtil::asValue(m_activeTree->device_viewport_size()).release());
if (m_tileManager)
state->Set("tiles", m_tileManager->AllTilesAsValue().release());
return state.PassAs<base::Value>();
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_impl.h » ('j') | cc/layer_tree_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698