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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11644008: Migrate from MathUtil::inverse() to gfx::Transform::GetInverse() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Partially addressed uninvertible cases Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698