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

Side by Side Diff: Source/core/rendering/RenderBlock.cpp

Issue 264183002: RAL: Eliminate n^2 walk to find repaint containers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix for SVG Created 6 years, 7 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 // If the style has unloaded images, want to notify the ResourceLoadPriority Optimizer so that 353 // If the style has unloaded images, want to notify the ResourceLoadPriority Optimizer so that
354 // network priorities can be set. 354 // network priorities can be set.
355 Vector<ImageResource*> images; 355 Vector<ImageResource*> images;
356 appendImagesFromStyle(images, *newStyle); 356 appendImagesFromStyle(images, *newStyle);
357 if (images.isEmpty()) 357 if (images.isEmpty())
358 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->removeRe nderObject(this); 358 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->removeRe nderObject(this);
359 else 359 else
360 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->addRende rObject(this); 360 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->addRende rObject(this);
361 } 361 }
362 362
363 void RenderBlock::repaintTreeAfterLayout() 363 void RenderBlock::repaintTreeAfterLayout(RenderLayerModelObject& repaintContaine r)
364 { 364 {
365 if (!shouldCheckForInvalidationAfterLayout()) 365 if (!shouldCheckForInvalidationAfterLayout())
366 return; 366 return;
367 367
368 RenderBox::repaintTreeAfterLayout(); 368 RenderBox::repaintTreeAfterLayout(repaintContainer);
369 369
370 // Take care of positioned objects. This is required as LayoutState keeps a single clip rect. 370 // Take care of positioned objects. This is required as LayoutState keeps a single clip rect.
371 if (TrackedRendererListHashSet* positionedObjects = this->positionedObjects( )) { 371 if (TrackedRendererListHashSet* positionedObjects = this->positionedObjects( )) {
372 TrackedRendererListHashSet::iterator end = positionedObjects->end(); 372 TrackedRendererListHashSet::iterator end = positionedObjects->end();
373 LayoutStateMaintainer statePusher(*this, isTableRow() ? LayoutSize() : l ocationOffset()); 373 LayoutStateMaintainer statePusher(*this, isTableRow() ? LayoutSize() : l ocationOffset());
374 for (TrackedRendererListHashSet::iterator it = positionedObjects->begin( ); it != end; ++it) 374 for (TrackedRendererListHashSet::iterator it = positionedObjects->begin( ); it != end; ++it) {
375 (*it)->repaintTreeAfterLayout(); 375 // One of the renderers we're skipping over here may be the child's repaint container,
376 // so we can't pass our own repaint container along.
377 RenderLayerModelObject* repaintContainerForChild = (*it)->containerF orRepaint();
Julien - ping for review 2014/05/07 17:50:03 That's kind of crazy that a positioned element doe
leviw_travelin_and_unemployed 2014/05/07 17:58:48 Super weird, I agree.
Ian Vollick 2014/05/07 22:55:58 Oh, that is strange. I wonder what bugs this is cu
eseidel 2014/05/08 00:43:02 I'm not sure it is odd. But I admit to not fully
ojan 2014/05/10 17:43:12 In theory, all the positioned objects in this loop
ojan 2014/05/10 18:02:31 Hmmm. I guess the repaint container would be diffe
378 (*it)->repaintTreeAfterLayout(*repaintContainerForChild);
379 }
376 } 380 }
377 } 381 }
378 382
379 RenderBlock* RenderBlock::continuationBefore(RenderObject* beforeChild) 383 RenderBlock* RenderBlock::continuationBefore(RenderObject* beforeChild)
380 { 384 {
381 if (beforeChild && beforeChild->parent() == this) 385 if (beforeChild && beforeChild->parent() == this)
382 return this; 386 return this;
383 387
384 RenderBlock* curr = toRenderBlock(continuation()); 388 RenderBlock* curr = toRenderBlock(continuation());
385 RenderBlock* nextToLast = this; 389 RenderBlock* nextToLast = this;
(...skipping 4590 matching lines...) Expand 10 before | Expand all | Expand 10 after
4976 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render Object* obj) const 4980 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render Object* obj) const
4977 { 4981 {
4978 showRenderObject(); 4982 showRenderObject();
4979 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) 4983 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box())
4980 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); 4984 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1);
4981 } 4985 }
4982 4986
4983 #endif 4987 #endif
4984 4988
4985 } // namespace WebCore 4989 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698