| Index: cc/layer_tree_host_impl.cc
|
| diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
|
| index 408e8417971f300adfce4cb83a855ddaf80153bc..dd6d1f57d7d8d7a0665a007cbac47f0541969566 100644
|
| --- a/cc/layer_tree_host_impl.cc
|
| +++ b/cc/layer_tree_host_impl.cc
|
| @@ -481,8 +481,6 @@ static void appendQuadsToFillScreen(RenderPass* targetRenderPass, LayerImpl* roo
|
| // doesn't have any bounds and so can't generate this itself.
|
| // FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas).
|
|
|
| - DCHECK(rootLayer->screenSpaceTransform().IsInvertible());
|
| -
|
| gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect();
|
| float opacity = 1;
|
| SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadState::Create());
|
| @@ -494,10 +492,16 @@ static void appendQuadsToFillScreen(RenderPass* targetRenderPass, LayerImpl* roo
|
| opacity);
|
|
|
| AppendQuadsData appendQuadsData;
|
| - gfx::Transform transformToLayerSpace = MathUtil::inverse(rootLayer->screenSpaceTransform());
|
| +
|
| + // Even though we always expect the screen space transform to be invertible if we
|
| + // reach this code, we still try to handle the uninvertible case for Release mode.
|
| + DCHECK(rootLayer->screenSpaceTransform().IsInvertible());
|
| + gfx::Transform transformToLayerSpace(gfx::Transform::kSkipInitialization);
|
| + if (!rootLayer->screenSpaceTransform().GetInverse(&transformToLayerSpace))
|
| + transformToLayerSpace.MakeIdentity();
|
| for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects.next()) {
|
| // The root layer transform is composed of translations and scales only,
|
| - // no perspective, so mapping is sufficient.
|
| + // no perspective, so mapping is sufficient (as opposed to projecting).
|
| gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fillRects.rect());
|
| // Skip the quad culler and just append the quads directly to avoid
|
| // occlusion checks.
|
| @@ -1264,9 +1268,12 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
|
| static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewport, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF viewportPoint, gfx::Vector2dF viewportDelta)
|
| {
|
| // Layers with non-invertible screen space transforms should not have passed the scroll hit
|
| - // test in the first place.
|
| + // test in the first place. Even though we always expect the screen space transform to be invertible
|
| + // if we reach this code, we still try to handle the uninvertible case for Release mode.
|
| DCHECK(layerImpl.screenSpaceTransform().IsInvertible());
|
| - gfx::Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.screenSpaceTransform());
|
| + gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitialization);
|
| + if (!layerImpl.screenSpaceTransform().GetInverse(&inverseScreenSpaceTransform))
|
| + inverseScreenSpaceTransform.MakeIdentity();
|
|
|
| gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewportToScreenSpace);
|
|
|
|
|