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 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 targetRenderPass->shared_quad_state_list, | 474 targetRenderPass->shared_quad_state_list, |
475 rootLayer, | 475 rootLayer, |
476 occlusionTracker, | 476 occlusionTracker, |
477 rootLayer->showDebugBorders(), | 477 rootLayer->showDebugBorders(), |
478 forSurface); | 478 forSurface); |
479 | 479 |
480 // Manually create the quad state for the gutter quads, as the root layer | 480 // Manually create the quad state for the gutter quads, as the root layer |
481 // doesn't have any bounds and so can't generate this itself. | 481 // doesn't have any bounds and so can't generate this itself. |
482 // FIXME: Make the gutter quads generated by the solid color layer (make it
smarter about generating quads to fill unoccluded areas). | 482 // FIXME: Make the gutter quads generated by the solid color layer (make it
smarter about generating quads to fill unoccluded areas). |
483 | 483 |
484 DCHECK(rootLayer->screenSpaceTransform().IsInvertible()); | |
485 | |
486 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); | 484 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); |
487 float opacity = 1; | 485 float opacity = 1; |
488 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS
tate::Create()); | 486 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS
tate::Create()); |
489 sharedQuadState->SetAll(rootLayer->drawTransform(), | 487 sharedQuadState->SetAll(rootLayer->drawTransform(), |
490 rootTargetRect, | 488 rootTargetRect, |
491 rootTargetRect, | 489 rootTargetRect, |
492 rootTargetRect, | 490 rootTargetRect, |
493 false, | 491 false, |
494 opacity); | 492 opacity); |
495 | 493 |
496 AppendQuadsData appendQuadsData; | 494 AppendQuadsData appendQuadsData; |
497 gfx::Transform transformToLayerSpace = MathUtil::inverse(rootLayer->screenSp
aceTransform()); | 495 |
| 496 // Even though we always expect the screen space transform to be invertible
if we |
| 497 // reach this code, we still try to handle the uninvertible case for Release
mode. |
| 498 DCHECK(rootLayer->screenSpaceTransform().IsInvertible()); |
| 499 gfx::Transform transformToLayerSpace(gfx::Transform::kSkipInitialization); |
| 500 if (!rootLayer->screenSpaceTransform().GetInverse(&transformToLayerSpace)) |
| 501 transformToLayerSpace.MakeIdentity(); |
498 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects
.next()) { | 502 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects
.next()) { |
499 // The root layer transform is composed of translations and scales only, | 503 // The root layer transform is composed of translations and scales only, |
500 // no perspective, so mapping is sufficient. | 504 // no perspective, so mapping is sufficient (as opposed to projecting). |
501 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi
llRects.rect()); | 505 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi
llRects.rect()); |
502 // Skip the quad culler and just append the quads directly to avoid | 506 // Skip the quad culler and just append the quads directly to avoid |
503 // occlusion checks. | 507 // occlusion checks. |
504 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); | 508 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
505 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); | 509 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); |
506 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); | 510 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
507 } | 511 } |
508 } | 512 } |
509 | 513 |
510 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) | 514 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1257 m_numImplThreadScrolls++; | 1261 m_numImplThreadScrolls++; |
1258 setNeedsUpdateDrawProperties(); | 1262 setNeedsUpdateDrawProperties(); |
1259 return ScrollStarted; | 1263 return ScrollStarted; |
1260 } | 1264 } |
1261 return ScrollIgnored; | 1265 return ScrollIgnored; |
1262 } | 1266 } |
1263 | 1267 |
1264 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp
ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie
wportPoint, gfx::Vector2dF viewportDelta) | 1268 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp
ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie
wportPoint, gfx::Vector2dF viewportDelta) |
1265 { | 1269 { |
1266 // Layers with non-invertible screen space transforms should not have passed
the scroll hit | 1270 // Layers with non-invertible screen space transforms should not have passed
the scroll hit |
1267 // test in the first place. | 1271 // test in the first place. Even though we always expect the screen space tr
ansform to be invertible |
| 1272 // if we reach this code, we still try to handle the uninvertible case for R
elease mode. |
1268 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); | 1273 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); |
1269 gfx::Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.scr
eenSpaceTransform()); | 1274 gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitializati
on); |
| 1275 if (!layerImpl.screenSpaceTransform().GetInverse(&inverseScreenSpaceTransfor
m)) |
| 1276 inverseScreenSpaceTransform.MakeIdentity(); |
1270 | 1277 |
1271 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp
ortToScreenSpace); | 1278 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp
ortToScreenSpace); |
1272 | 1279 |
1273 gfx::Vector2dF screenSpaceDelta = viewportDelta; | 1280 gfx::Vector2dF screenSpaceDelta = viewportDelta; |
1274 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); | 1281 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); |
1275 | 1282 |
1276 // First project the scroll start and end points to local layer space to fin
d the scroll delta | 1283 // First project the scroll start and end points to local layer space to fin
d the scroll delta |
1277 // in layer coordinates. | 1284 // in layer coordinates. |
1278 bool startClipped, endClipped; | 1285 bool startClipped, endClipped; |
1279 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; | 1286 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1707 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1714 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
1708 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1715 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
1709 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1716 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1710 m_client->setNeedsRedrawOnImplThread(); | 1717 m_client->setNeedsRedrawOnImplThread(); |
1711 | 1718 |
1712 for (size_t i = 0; i < layer->children().size(); ++i) | 1719 for (size_t i = 0; i < layer->children().size(); ++i) |
1713 animateScrollbarsRecursive(layer->children()[i], time); | 1720 animateScrollbarsRecursive(layer->children()[i], time); |
1714 } | 1721 } |
1715 | 1722 |
1716 } // namespace cc | 1723 } // namespace cc |
OLD | NEW |