Chromium Code Reviews| 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 |