Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h" | 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include "cc/layers/content_layer_client.h" | 10 #include "cc/layers/content_layer_client.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 55 } | 55 } |
| 56 | 56 |
| 57 template <typename T> | 57 template <typename T> |
| 58 static std::unique_ptr<JSONArray> sizeAsJSONArray(const T& size) { | 58 static std::unique_ptr<JSONArray> sizeAsJSONArray(const T& size) { |
| 59 std::unique_ptr<JSONArray> array = JSONArray::create(); | 59 std::unique_ptr<JSONArray> array = JSONArray::create(); |
| 60 array->pushDouble(size.width()); | 60 array->pushDouble(size.width()); |
| 61 array->pushDouble(size.height()); | 61 array->pushDouble(size.height()); |
| 62 return array; | 62 return array; |
| 63 } | 63 } |
| 64 | 64 |
| 65 static int sPropertyTreeSequenceNumber = 1; | |
|
pdr.
2017/02/28 17:44:58
Can you add a short comment here describing what t
wkorman
2017/02/28 20:58:47
Done.
| |
| 66 | |
| 65 class PaintArtifactCompositor::ContentLayerClientImpl | 67 class PaintArtifactCompositor::ContentLayerClientImpl |
| 66 : public cc::ContentLayerClient { | 68 : public cc::ContentLayerClient { |
| 67 WTF_MAKE_NONCOPYABLE(ContentLayerClientImpl); | 69 WTF_MAKE_NONCOPYABLE(ContentLayerClientImpl); |
| 68 USING_FAST_MALLOC(ContentLayerClientImpl); | 70 USING_FAST_MALLOC(ContentLayerClientImpl); |
| 69 | 71 |
| 70 public: | 72 public: |
| 71 ContentLayerClientImpl(DisplayItem::Id paintChunkId) | 73 ContentLayerClientImpl(DisplayItem::Id paintChunkId) |
| 72 : m_id(paintChunkId), | 74 : m_id(paintChunkId), |
| 73 m_debugName(paintChunkId.client.debugName()), | 75 m_debugName(paintChunkId.client.debugName()), |
| 74 m_ccPictureLayer(cc::PictureLayer::Create(this)) {} | 76 m_ccPictureLayer(cc::PictureLayer::Create(this)) {} |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 689 | 691 |
| 690 // The tree will be null after detaching and this update can be ignored. | 692 // The tree will be null after detaching and this update can be ignored. |
| 691 // See: WebViewImpl::detachPaintArtifactCompositor(). | 693 // See: WebViewImpl::detachPaintArtifactCompositor(). |
| 692 if (!layerTreeHost) | 694 if (!layerTreeHost) |
| 693 return; | 695 return; |
| 694 | 696 |
| 695 if (m_extraDataForTestingEnabled) | 697 if (m_extraDataForTestingEnabled) |
| 696 m_extraDataForTesting = WTF::wrapUnique(new ExtraDataForTesting); | 698 m_extraDataForTesting = WTF::wrapUnique(new ExtraDataForTesting); |
| 697 | 699 |
| 698 m_rootLayer->RemoveAllChildren(); | 700 m_rootLayer->RemoveAllChildren(); |
| 699 m_rootLayer->set_property_tree_sequence_number( | 701 |
| 700 PropertyTreeManager::kPropertyTreeSequenceNumber); | 702 m_rootLayer->set_property_tree_sequence_number(sPropertyTreeSequenceNumber); |
| 701 | 703 |
| 702 PropertyTreeManager propertyTreeManager(*layerTreeHost->property_trees(), | 704 PropertyTreeManager propertyTreeManager(*layerTreeHost->property_trees(), |
| 703 m_rootLayer.get()); | 705 m_rootLayer.get(), |
| 706 sPropertyTreeSequenceNumber); | |
| 704 | 707 |
| 705 Vector<PendingLayer, 0> pendingLayers; | 708 Vector<PendingLayer, 0> pendingLayers; |
| 706 collectPendingLayers(paintArtifact, pendingLayers, geometryMapper); | 709 collectPendingLayers(paintArtifact, pendingLayers, geometryMapper); |
| 707 | 710 |
| 708 Vector<std::unique_ptr<ContentLayerClientImpl>> newContentLayerClients; | 711 Vector<std::unique_ptr<ContentLayerClientImpl>> newContentLayerClients; |
| 709 newContentLayerClients.reserveCapacity(paintArtifact.paintChunks().size()); | 712 newContentLayerClients.reserveCapacity(paintArtifact.paintChunks().size()); |
| 710 for (const PendingLayer& pendingLayer : pendingLayers) { | 713 for (const PendingLayer& pendingLayer : pendingLayers) { |
| 711 gfx::Vector2dF layerOffset; | 714 gfx::Vector2dF layerOffset; |
| 712 scoped_refptr<cc::Layer> layer = compositedLayerForPendingLayer( | 715 scoped_refptr<cc::Layer> layer = compositedLayerForPendingLayer( |
| 713 paintArtifact, pendingLayer, layerOffset, newContentLayerClients, | 716 paintArtifact, pendingLayer, layerOffset, newContentLayerClients, |
| 714 rasterChunkInvalidations, storeDebugInfo, geometryMapper); | 717 rasterChunkInvalidations, storeDebugInfo, geometryMapper); |
| 715 | 718 |
| 716 const auto* transform = pendingLayer.propertyTreeState.transform(); | 719 const auto* transform = pendingLayer.propertyTreeState.transform(); |
| 717 int transformId = | 720 int transformId = |
| 718 propertyTreeManager.ensureCompositorTransformNode(transform); | 721 propertyTreeManager.ensureCompositorTransformNode(transform); |
| 719 int clipId = propertyTreeManager.ensureCompositorClipNode( | 722 int clipId = propertyTreeManager.ensureCompositorClipNode( |
| 720 pendingLayer.propertyTreeState.clip()); | 723 pendingLayer.propertyTreeState.clip()); |
| 721 int effectId = propertyTreeManager.switchToEffectNode( | 724 int effectId = propertyTreeManager.switchToEffectNode( |
| 722 *pendingLayer.propertyTreeState.effect()); | 725 *pendingLayer.propertyTreeState.effect()); |
| 723 | 726 |
| 724 layer->set_offset_to_transform_parent(layerOffset); | 727 layer->set_offset_to_transform_parent(layerOffset); |
| 725 layer->SetElementId(pendingLayer.propertyTreeState.compositorElementId()); | 728 layer->SetElementId(pendingLayer.propertyTreeState.compositorElementId()); |
| 726 | 729 |
| 727 m_rootLayer->AddChild(layer); | 730 m_rootLayer->AddChild(layer); |
| 728 layer->set_property_tree_sequence_number( | 731 layer->set_property_tree_sequence_number(sPropertyTreeSequenceNumber); |
| 729 PropertyTreeManager::kPropertyTreeSequenceNumber); | |
| 730 layer->SetTransformTreeIndex(transformId); | 732 layer->SetTransformTreeIndex(transformId); |
| 731 layer->SetClipTreeIndex(clipId); | 733 layer->SetClipTreeIndex(clipId); |
| 732 layer->SetEffectTreeIndex(effectId); | 734 layer->SetEffectTreeIndex(effectId); |
| 733 propertyTreeManager.updateLayerScrollMapping(layer.get(), transform); | 735 propertyTreeManager.updateLayerScrollMapping(layer.get(), transform); |
| 734 | 736 |
| 735 layer->SetShouldCheckBackfaceVisibility(pendingLayer.backfaceHidden); | 737 layer->SetShouldCheckBackfaceVisibility(pendingLayer.backfaceHidden); |
| 736 | 738 |
| 737 if (m_extraDataForTestingEnabled) | 739 if (m_extraDataForTestingEnabled) |
| 738 m_extraDataForTesting->contentLayers.push_back(layer); | 740 m_extraDataForTesting->contentLayers.push_back(layer); |
| 739 } | 741 } |
| 740 m_contentLayerClients.clear(); | 742 m_contentLayerClients.clear(); |
| 741 m_contentLayerClients.swap(newContentLayerClients); | 743 m_contentLayerClients.swap(newContentLayerClients); |
| 742 | 744 |
| 743 // Mark the property trees as having been rebuilt. | 745 // Mark the property trees as having been rebuilt. |
| 744 layerTreeHost->property_trees()->sequence_number = | 746 layerTreeHost->property_trees()->sequence_number = |
| 745 PropertyTreeManager::kPropertyTreeSequenceNumber; | 747 sPropertyTreeSequenceNumber; |
| 746 layerTreeHost->property_trees()->needs_rebuild = false; | 748 layerTreeHost->property_trees()->needs_rebuild = false; |
| 747 layerTreeHost->property_trees()->ResetCachedData(); | 749 layerTreeHost->property_trees()->ResetCachedData(); |
| 750 | |
| 751 sPropertyTreeSequenceNumber++; | |
| 748 } | 752 } |
| 749 | 753 |
| 750 #ifndef NDEBUG | 754 #ifndef NDEBUG |
| 751 void PaintArtifactCompositor::showDebugData() { | 755 void PaintArtifactCompositor::showDebugData() { |
| 752 LOG(ERROR) << layersAsJSON(LayerTreeIncludesDebugInfo) | 756 LOG(ERROR) << layersAsJSON(LayerTreeIncludesDebugInfo) |
| 753 ->toPrettyJSONString() | 757 ->toPrettyJSONString() |
| 754 .utf8() | 758 .utf8() |
| 755 .data(); | 759 .data(); |
| 756 } | 760 } |
| 757 #endif | 761 #endif |
| 758 | 762 |
| 759 } // namespace blink | 763 } // namespace blink |
| OLD | NEW |