OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |