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

Unified Diff: Source/core/rendering/RenderView.cpp

Issue 620553009: Move selection invalidations to the invalidation phase (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated change after review comments. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« Source/core/rendering/RenderText.h ('K') | « Source/core/rendering/RenderText.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderView.cpp
diff --git a/Source/core/rendering/RenderView.cpp b/Source/core/rendering/RenderView.cpp
index c700c0cf5125ec4f4a6aac882a47a40b2172a969..509617c1e0ba47538d56e891c054cb17f98f0991 100644
--- a/Source/core/rendering/RenderView.cpp
+++ b/Source/core/rendering/RenderView.cpp
@@ -475,10 +475,6 @@ void RenderView::invalidatePaintForSelection() const
{
HashSet<RenderBlock*> processedBlocks;
- // For querying RenderLayer::compositingState()
- // FIXME: this may be wrong. crbug.com/407416
- DisableCompositingQueryAsserts disabler;
-
RenderObject* end = rendererAfterPosition(m_selectionEnd, m_selectionEndPos);
for (RenderObject* o = m_selectionStart; o && o != end; o = o->nextInPreOrder()) {
if (!o->canBeSelectionLeaf() && o != m_selectionStart && o != m_selectionEnd)
@@ -486,13 +482,13 @@ void RenderView::invalidatePaintForSelection() const
if (o->selectionState() == SelectionNone)
continue;
- RenderSelectionInfo(o).invalidatePaint();
+ o->setShouldInvalidateSelection();
// Blocks are responsible for painting line gaps and margin gaps. They must be examined as well.
for (RenderBlock* block = o->containingBlock(); block && !block->isRenderView(); block = block->containingBlock()) {
if (!processedBlocks.add(block).isNewEntry)
break;
- RenderSelectionInfo(block).invalidatePaint();
+ block->setShouldInvalidateSelection();
}
}
}
@@ -632,10 +628,6 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
if (!m_frameView || blockPaintInvalidationMode == PaintInvalidationNothing)
return;
- // For querying RenderLayer::compositingState()
- // FIXME: this is wrong, selection should not cause eager invalidation. crbug.com/407416
- DisableCompositingQueryAsserts disabler;
-
// Have any of the old selected objects changed compared to the new selection?
for (SelectedObjectMap::iterator i = oldSelectedObjects.begin(); i != oldObjectsEnd; ++i) {
RenderObject* obj = i->key;
@@ -646,7 +638,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
|| (m_selectionEnd == obj && oldEndPos != m_selectionEndPos)) {
oldInfo->invalidatePaint();
if (newInfo) {
- newInfo->invalidatePaint();
+ newInfo->object()->setShouldInvalidateSelection();
newSelectedObjects.remove(obj);
}
}
@@ -655,7 +647,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
// Any new objects that remain were not found in the old objects dict, and so they need to be updated.
SelectedObjectMap::iterator newObjectsEnd = newSelectedObjects.end();
for (SelectedObjectMap::iterator i = newSelectedObjects.begin(); i != newObjectsEnd; ++i)
- i->value->invalidatePaint();
+ i->value->object()->setShouldInvalidateSelection();
// Have any of the old blocks changed?
SelectedBlockMap::iterator oldBlocksEnd = oldSelectedBlocks.end();
@@ -664,9 +656,9 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
RenderBlockSelectionInfo* newInfo = newSelectedBlocks.get(block);
RenderBlockSelectionInfo* oldInfo = i->value.get();
if (!newInfo || newInfo->hasChangedFrom(*oldInfo)) {
- oldInfo->invalidatePaint();
+ oldInfo->object()->setShouldInvalidateSelection();
if (newInfo) {
- newInfo->invalidatePaint();
+ newInfo->object()->setShouldInvalidateSelection();
newSelectedBlocks.remove(block);
}
}
@@ -675,7 +667,7 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
// Any new blocks that remain were not found in the old blocks dict, and so they need to be updated.
SelectedBlockMap::iterator newBlocksEnd = newSelectedBlocks.end();
for (SelectedBlockMap::iterator i = newSelectedBlocks.begin(); i != newBlocksEnd; ++i)
- i->value->invalidatePaint();
+ i->value->object()->setShouldInvalidateSelection();
}
void RenderView::getSelection(RenderObject*& startRenderer, int& startOffset, RenderObject*& endRenderer, int& endOffset) const
« Source/core/rendering/RenderText.h ('K') | « Source/core/rendering/RenderText.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698