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

Side by Side Diff: Source/core/rendering/svg/SVGRenderSupport.cpp

Issue 327093003: [RAL] Reduce SVG tree walks (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Added svg/repaint/image-with-clip-path.svg to the rebaseline list Created 6 years, 6 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
« no previous file with comments | « Source/core/rendering/svg/SVGRenderSupport.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org> 2 * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org>
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2009 Google, Inc. All rights reserved. 5 * Copyright (C) 2009 Google, Inc. All rights reserved.
6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 6 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 if (parent->isSVGRoot()) { 93 if (parent->isSVGRoot()) {
94 TransformationMatrix matrix(object->localToParentTransform()); 94 TransformationMatrix matrix(object->localToParentTransform());
95 matrix.multiply(toRenderSVGRoot(parent)->localToBorderBoxTransform()); 95 matrix.multiply(toRenderSVGRoot(parent)->localToBorderBoxTransform());
96 geometryMap.push(object, matrix); 96 geometryMap.push(object, matrix);
97 } else 97 } else
98 geometryMap.push(object, object->localToParentTransform()); 98 geometryMap.push(object, object->localToParentTransform());
99 99
100 return parent; 100 return parent;
101 } 101 }
102 102
103 bool SVGRenderSupport::parentTransformDidChange(RenderObject* object)
104 {
105 // When a parent container is transformed in SVG, all children will be paint ed automatically
106 // so we are able to skip redundant repaint checks.
107 RenderObject* parent = object->parent();
108 return !(parent && parent->isSVGContainer() && toRenderSVGContainer(parent)- >didTransformToRootUpdate());
109 }
110
103 bool SVGRenderSupport::checkForSVGRepaintDuringLayout(RenderObject* object) 111 bool SVGRenderSupport::checkForSVGRepaintDuringLayout(RenderObject* object)
104 { 112 {
105 if (!object->checkForRepaintDuringLayout()) 113 if (!object->checkForRepaintDuringLayout())
106 return false; 114 return false;
107 // When a parent container is transformed in SVG, all children will be paint ed automatically 115
108 // so we are able to skip redundant repaint checks. 116 return parentTransformDidChange(object);
109 RenderObject* parent = object->parent();
110 return !(parent && parent->isSVGContainer() && toRenderSVGContainer(parent)- >didTransformToRootUpdate());
111 } 117 }
112 118
113 // Update a bounding box taking into account the validity of the other bounding box. 119 // Update a bounding box taking into account the validity of the other bounding box.
114 inline void SVGRenderSupport::updateObjectBoundingBox(FloatRect& objectBoundingB ox, bool& objectBoundingBoxValid, RenderObject* other, FloatRect otherBoundingBo x) 120 inline void SVGRenderSupport::updateObjectBoundingBox(FloatRect& objectBoundingB ox, bool& objectBoundingBoxValid, RenderObject* other, FloatRect otherBoundingBo x)
115 { 121 {
116 bool otherValid = other->isSVGContainer() ? toRenderSVGContainer(other)->isO bjectBoundingBoxValid() : true; 122 bool otherValid = other->isSVGContainer() ? toRenderSVGContainer(other)->isO bjectBoundingBoxValid() : true;
117 if (!otherValid) 123 if (!otherValid)
118 return; 124 return;
119 125
120 if (!objectBoundingBoxValid) { 126 if (!objectBoundingBoxValid) {
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 } 398 }
393 399
394 bool SVGRenderSupport::isRenderableTextNode(const RenderObject* object) 400 bool SVGRenderSupport::isRenderableTextNode(const RenderObject* object)
395 { 401 {
396 ASSERT(object->isText()); 402 ASSERT(object->isText());
397 // <br> is marked as text, but is not handled by the SVG rendering code-path . 403 // <br> is marked as text, but is not handled by the SVG rendering code-path .
398 return object->isSVGInlineText() && !toRenderSVGInlineText(object)->hasEmpty Text(); 404 return object->isSVGInlineText() && !toRenderSVGInlineText(object)->hasEmpty Text();
399 } 405 }
400 406
401 } 407 }
OLDNEW
« no previous file with comments | « Source/core/rendering/svg/SVGRenderSupport.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698