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

Side by Side Diff: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp

Issue 2896703003: [DMC #11] Move some rendered rect method impls from DMC To TextMatchMarkerListImpl (Closed)
Patch Set: Rebase Created 3 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
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) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
7 * reserved. 7 * reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 401 }
402 std::sort(result.begin(), result.end(), 402 std::sort(result.begin(), result.end(),
403 [](const Member<DocumentMarker>& marker1, 403 [](const Member<DocumentMarker>& marker1,
404 const Member<DocumentMarker>& marker2) { 404 const Member<DocumentMarker>& marker2) {
405 return marker1->StartOffset() < marker2->StartOffset(); 405 return marker1->StartOffset() < marker2->StartOffset();
406 }); 406 });
407 return result; 407 return result;
408 } 408 }
409 409
410 Vector<IntRect> DocumentMarkerController::RenderedRectsForTextMatchMarkers() { 410 Vector<IntRect> DocumentMarkerController::RenderedRectsForTextMatchMarkers() {
411 DCHECK(!document_->View() || !document_->View()->NeedsLayout());
yosin_UTC9 2017/05/22 05:24:18 We should not call this function when |document_->
rlanday 2017/05/22 05:29:11 I'm just moving this check up from UpdateMarkerRen
yosin_UTC9 2017/05/22 05:54:26 Let's try. And change call sites not to do so.
412 DCHECK(!document_->NeedsLayoutTreeUpdate());
413
411 Vector<IntRect> result; 414 Vector<IntRect> result;
415
412 if (!PossiblyHasMarkers(DocumentMarker::kTextMatch)) 416 if (!PossiblyHasMarkers(DocumentMarker::kTextMatch))
413 return result; 417 return result;
414 DCHECK(!(markers_.IsEmpty())); 418 DCHECK(!(markers_.IsEmpty()));
415 419
416 // outer loop: process each node 420 // outer loop: process each node
417 MarkerMap::iterator end = markers_.end(); 421 MarkerMap::iterator end = markers_.end();
418 for (MarkerMap::iterator node_iterator = markers_.begin(); 422 for (MarkerMap::iterator node_iterator = markers_.begin();
419 node_iterator != end; ++node_iterator) { 423 node_iterator != end; ++node_iterator) {
420 // inner loop; process each marker in this node 424 // inner loop; process each marker in this node
421 const Node& node = *node_iterator->key; 425 const Node& node = *node_iterator->key;
422 if (!node.isConnected()) 426 if (!node.isConnected())
423 continue; 427 continue;
424 MarkerLists* markers = node_iterator->value.Get(); 428 MarkerLists* markers = node_iterator->value.Get();
425 DocumentMarkerList* const list = 429 DocumentMarkerList* const list =
426 ListForType(markers, DocumentMarker::kTextMatch); 430 ListForType(markers, DocumentMarker::kTextMatch);
427 if (!list || list->IsEmpty()) 431 if (!list)
428 continue; 432 continue;
429 433 ToTextMatchMarkerListImpl(list)->AppendRenderedRectsToVector(node, &result);
yosin_UTC9 2017/05/22 05:24:18 We can use |Vector<T>::AppendVector()| as |Documen
rlanday 2017/05/22 05:29:11 I think that would involve constructing a temporar
yosin_UTC9 2017/05/22 05:54:26 OK. Let's do cleaner implementation. When perf tes
430 for (DocumentMarker* marker : list->GetMarkers()) {
431 RenderedDocumentMarker* const rendered_marker =
432 ToRenderedDocumentMarker(marker);
433 UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker);
434 if (!rendered_marker->IsRendered())
435 continue;
436 result.push_back(rendered_marker->RenderedRect());
437 }
438 } 434 }
439 435
440 return result; 436 return result;
441 } 437 }
442 438
439 // TODO(rlanday): move this to TextMatchMarkerListImpl.cpp
440 void TextMatchMarkerListImpl::AppendRenderedRectsToVector(
441 const Node& node,
442 Vector<IntRect>* result) {
443 if (IsEmpty())
444 return;
445
446 for (DocumentMarker* marker : markers_) {
447 RenderedDocumentMarker* const rendered_marker =
448 ToRenderedDocumentMarker(marker);
449 UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker);
450 if (!rendered_marker->IsRendered())
451 continue;
452 result->push_back(rendered_marker->RenderedRect());
453 }
454 }
455
443 static void InvalidatePaintForTickmarks(const Node& node) { 456 static void InvalidatePaintForTickmarks(const Node& node) {
444 if (FrameView* frame_view = node.GetDocument().View()) 457 if (FrameView* frame_view = node.GetDocument().View())
445 frame_view->InvalidatePaintForTickmarks(); 458 frame_view->InvalidatePaintForTickmarks();
446 } 459 }
447 460
448 void DocumentMarkerController::UpdateMarkerRenderedRectIfNeeded( 461 // TODO(rlanday): move this to TextMatchMarkerListImpl.cpp
462 void TextMatchMarkerListImpl::UpdateMarkerRenderedRectIfNeeded(
449 const Node& node, 463 const Node& node,
450 RenderedDocumentMarker& marker) { 464 RenderedDocumentMarker& marker) {
451 DCHECK(!document_->View() || !document_->View()->NeedsLayout());
452 DCHECK(!document_->NeedsLayoutTreeUpdate());
453 if (!marker.IsValid()) 465 if (!marker.IsValid())
454 UpdateMarkerRenderedRect(node, marker); 466 UpdateMarkerRenderedRect(node, marker);
455 } 467 }
456 468
457 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode( 469 void DocumentMarkerController::InvalidateRectsForTextMatchMarkersInNode(
458 const Node& node) { 470 const Node& node) {
459 MarkerLists* markers = markers_.at(&node); 471 MarkerLists* markers = markers_.at(&node);
460 472
461 const DocumentMarkerList* const marker_list = 473 const DocumentMarkerList* const marker_list =
462 ListForType(markers, DocumentMarker::kTextMatch); 474 ListForType(markers, DocumentMarker::kTextMatch);
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 } 756 }
745 757
746 } // namespace blink 758 } // namespace blink
747 759
748 #ifndef NDEBUG 760 #ifndef NDEBUG
749 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 761 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
750 if (controller) 762 if (controller)
751 controller->ShowMarkers(); 763 controller->ShowMarkers();
752 } 764 }
753 #endif 765 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698