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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp

Issue 2080593002: Revert of Let FrameView track object paint invalidations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@TrackInvalidation
Patch Set: Created 4 years, 6 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) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 bool GraphicsLayer::hasTrackedPaintInvalidations() const 585 bool GraphicsLayer::hasTrackedPaintInvalidations() const
586 { 586 {
587 PaintInvalidationTrackingMap::iterator it = paintInvalidationTrackingMap().f ind(this); 587 PaintInvalidationTrackingMap::iterator it = paintInvalidationTrackingMap().f ind(this);
588 if (it != paintInvalidationTrackingMap().end()) 588 if (it != paintInvalidationTrackingMap().end())
589 return !it->value.trackedPaintInvalidations.isEmpty(); 589 return !it->value.trackedPaintInvalidations.isEmpty();
590 return false; 590 return false;
591 } 591 }
592 592
593 void GraphicsLayer::trackPaintInvalidation(const DisplayItemClient& client, cons t IntRect& rect, PaintInvalidationReason reason) 593 void GraphicsLayer::trackPaintInvalidation(const DisplayItemClient& client, cons t IntRect& rect, PaintInvalidationReason reason)
594 { 594 {
595 if (!isTrackingOrCheckingPaintInvalidations() || rect.isEmpty()) 595 // The caller must check isTrackingOrCheckingPaintInvalidations() before cal ling this method
596 // to avoid constructing the rect unnecessarily.
597 DCHECK(isTrackingOrCheckingPaintInvalidations());
598
599 PaintInvalidationTracking& tracking = paintInvalidationTrackingMap().add(thi s, PaintInvalidationTracking()).storedValue->value;
600 // Omit the entry for trackObjectPaintInvalidation() if the last entry is fo r the same client.
601 // This is to avoid duplicated entries for setNeedsDisplayInRect() and track ObjectPaintInvalidation().
602 if (rect.isEmpty() && !tracking.trackedPaintInvalidations.isEmpty() && track ing.trackedPaintInvalidations.last().client == &client)
596 return; 603 return;
597 604
598 PaintInvalidationTracking& tracking = paintInvalidationTrackingMap().add(thi s, PaintInvalidationTracking()).storedValue->value;
599 PaintInvalidationInfo info = { &client, client.debugName(), rect, reason }; 605 PaintInvalidationInfo info = { &client, client.debugName(), rect, reason };
600 tracking.trackedPaintInvalidations.append(info); 606 tracking.trackedPaintInvalidations.append(info);
601 607
602 #if DCHECK_IS_ON() 608 #if DCHECK_IS_ON()
603 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled()) { 609 if (!rect.isEmpty() && RuntimeEnabledFeatures::slimmingPaintUnderInvalidatio nCheckingEnabled()) {
604 // TODO(crbug.com/496260): Some antialiasing effects overflows the paint invalidation rect. 610 // TODO(crbug.com/496260): Some antialiasing effects overflows the paint invalidation rect.
605 IntRect r = rect; 611 IntRect r = rect;
606 r.inflate(1); 612 r.inflate(1);
607 tracking.paintInvalidationRegionSinceLastPaint.unite(r); 613 tracking.paintInvalidationRegionSinceLastPaint.unite(r);
608 } 614 }
609 #endif 615 #endif
610 } 616 }
611 617
612 static bool comparePaintInvalidationInfo(const PaintInvalidationInfo& a, const P aintInvalidationInfo& b) 618 static bool comparePaintInvalidationInfo(const PaintInvalidationInfo& a, const P aintInvalidationInfo& b)
613 { 619 {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 return array; 707 return array;
702 } 708 }
703 709
704 static String pointerAsString(const void* ptr) 710 static String pointerAsString(const void* ptr)
705 { 711 {
706 TextStream ts; 712 TextStream ts;
707 ts << ptr; 713 ts << ptr;
708 return ts.release(); 714 return ts.release();
709 } 715 }
710 716
711 PassRefPtr<JSONObject> GraphicsLayer::layerTreeAsJSON(LayerTreeFlags flags) cons t 717 PassRefPtr<JSONObject> GraphicsLayer::layerTreeAsJSON(LayerTreeFlags flags, Rend eringContextMap& renderingContextMap) const
712 {
713 RenderingContextMap renderingContextMap;
714 return layerTreeAsJSONInternal(flags, renderingContextMap);
715 }
716
717 PassRefPtr<JSONObject> GraphicsLayer::layerTreeAsJSONInternal(LayerTreeFlags fla gs, RenderingContextMap& renderingContextMap) const
718 { 718 {
719 RefPtr<JSONObject> json = JSONObject::create(); 719 RefPtr<JSONObject> json = JSONObject::create();
720 720
721 if (flags & LayerTreeIncludesDebugInfo) 721 if (flags & LayerTreeIncludesDebugInfo) {
722 json->setString("this", pointerAsString(this)); 722 json->setString("this", pointerAsString(this));
723 723 json->setString("debugName", m_client->debugName(this));
724 json->setString("name", debugName()); 724 }
725 725
726 if (m_position != FloatPoint()) 726 if (m_position != FloatPoint())
727 json->setArray("position", pointAsJSONArray(m_position)); 727 json->setArray("position", pointAsJSONArray(m_position));
728 728
729 if (m_hasTransformOrigin && m_transformOrigin != FloatPoint3D(m_size.width() * 0.5f, m_size.height() * 0.5f, 0)) 729 if (m_hasTransformOrigin && m_transformOrigin != FloatPoint3D(m_size.width() * 0.5f, m_size.height() * 0.5f, 0))
730 json->setArray("transformOrigin", pointAsJSONArray(m_transformOrigin)); 730 json->setArray("transformOrigin", pointAsJSONArray(m_transformOrigin));
731 731
732 if (m_size != IntSize()) 732 if (m_size != IntSize())
733 json->setArray("bounds", sizeAsJSONArray(m_size)); 733 json->setArray("bounds", sizeAsJSONArray(m_size));
734 734
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 if (flags & LayerTreeIncludesDebugInfo) 770 if (flags & LayerTreeIncludesDebugInfo)
771 json->setString("client", pointerAsString(m_client)); 771 json->setString("client", pointerAsString(m_client));
772 772
773 if (m_backgroundColor.alpha()) 773 if (m_backgroundColor.alpha())
774 json->setString("backgroundColor", m_backgroundColor.nameForLayoutTreeAs Text()); 774 json->setString("backgroundColor", m_backgroundColor.nameForLayoutTreeAs Text());
775 775
776 if (!m_transform.isIdentity()) 776 if (!m_transform.isIdentity())
777 json->setArray("transform", transformAsJSONArray(m_transform)); 777 json->setArray("transform", transformAsJSONArray(m_transform));
778 778
779 if (m_replicaLayer) 779 if (m_replicaLayer)
780 json->setObject("replicaLayer", m_replicaLayer->layerTreeAsJSONInternal( flags, renderingContextMap)); 780 json->setObject("replicaLayer", m_replicaLayer->layerTreeAsJSON(flags, r enderingContextMap));
781 781
782 if (m_replicatedLayer) 782 if (m_replicatedLayer)
783 json->setString("replicatedLayer", flags & LayerTreeIncludesDebugInfo ? pointerAsString(m_replicatedLayer) : ""); 783 json->setString("replicatedLayer", flags & LayerTreeIncludesDebugInfo ? pointerAsString(m_replicatedLayer) : "");
784 784
785 PaintInvalidationTrackingMap::iterator it = paintInvalidationTrackingMap().f ind(this); 785 PaintInvalidationTrackingMap::iterator it = paintInvalidationTrackingMap().f ind(this);
786 if (it != paintInvalidationTrackingMap().end()) { 786 if (it != paintInvalidationTrackingMap().end()) {
787 if (flags & LayerTreeIncludesPaintInvalidations) { 787 if (flags & LayerTreeIncludesPaintInvalidations) {
788 Vector<PaintInvalidationInfo>& infos = it->value.trackedPaintInvalid ations; 788 Vector<PaintInvalidationInfo>& infos = it->value.trackedPaintInvalid ations;
789 if (!infos.isEmpty()) { 789 if (!infos.isEmpty()) {
790 std::sort(infos.begin(), infos.end(), &comparePaintInvalidationI nfo); 790 std::sort(infos.begin(), infos.end(), &comparePaintInvalidationI nfo);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 for (size_t i = 0; i < kNumberOfSquashingDisallowedReasons; ++i) { 854 for (size_t i = 0; i < kNumberOfSquashingDisallowedReasons; ++i) {
855 if (m_debugInfo.getSquashingDisallowedReasons() & kSquashingDisallow edReasonStringMap[i].reason) 855 if (m_debugInfo.getSquashingDisallowedReasons() & kSquashingDisallow edReasonStringMap[i].reason)
856 squashingDisallowedReasonsJSON->pushString(debug ? kSquashingDis allowedReasonStringMap[i].description : kSquashingDisallowedReasonStringMap[i].s hortName); 856 squashingDisallowedReasonsJSON->pushString(debug ? kSquashingDis allowedReasonStringMap[i].description : kSquashingDisallowedReasonStringMap[i].s hortName);
857 } 857 }
858 json->setArray("squashingDisallowedReasons", squashingDisallowedReasonsJ SON); 858 json->setArray("squashingDisallowedReasons", squashingDisallowedReasonsJ SON);
859 } 859 }
860 860
861 if (m_children.size()) { 861 if (m_children.size()) {
862 RefPtr<JSONArray> childrenJSON = JSONArray::create(); 862 RefPtr<JSONArray> childrenJSON = JSONArray::create();
863 for (size_t i = 0; i < m_children.size(); i++) 863 for (size_t i = 0; i < m_children.size(); i++)
864 childrenJSON->pushObject(m_children[i]->layerTreeAsJSONInternal(flag s, renderingContextMap)); 864 childrenJSON->pushObject(m_children[i]->layerTreeAsJSON(flags, rende ringContextMap));
865 json->setArray("children", childrenJSON); 865 json->setArray("children", childrenJSON);
866 } 866 }
867 867
868 return json; 868 return json;
869 } 869 }
870 870
871 String GraphicsLayer::layerTreeAsText(LayerTreeFlags flags) const 871 String GraphicsLayer::layerTreeAsText(LayerTreeFlags flags) const
872 { 872 {
873 return layerTreeAsJSON(flags)->toPrettyJSONString(); 873 RenderingContextMap renderingContextMap;
874 RefPtr<JSONObject> json = layerTreeAsJSON(flags, renderingContextMap);
875 return json->toPrettyJSONString();
874 } 876 }
875 877
876 static const cc::Layer* ccLayerForWebLayer(const WebLayer* webLayer) 878 static const cc::Layer* ccLayerForWebLayer(const WebLayer* webLayer)
877 { 879 {
878 return webLayer ? webLayer->ccLayer() : nullptr; 880 return webLayer ? webLayer->ccLayer() : nullptr;
879 } 881 }
880 882
881 String GraphicsLayer::debugName(cc::Layer* layer) const 883 String GraphicsLayer::debugName(cc::Layer* layer) const
882 { 884 {
883 String name; 885 String name;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 if (m_isRootForIsolatedGroup == isolated) 1096 if (m_isRootForIsolatedGroup == isolated)
1095 return; 1097 return;
1096 m_isRootForIsolatedGroup = isolated; 1098 m_isRootForIsolatedGroup = isolated;
1097 platformLayer()->setIsRootForIsolatedGroup(isolated); 1099 platformLayer()->setIsRootForIsolatedGroup(isolated);
1098 } 1100 }
1099 1101
1100 void GraphicsLayer::setContentsNeedsDisplay() 1102 void GraphicsLayer::setContentsNeedsDisplay()
1101 { 1103 {
1102 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) { 1104 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) {
1103 contentsLayer->invalidate(); 1105 contentsLayer->invalidate();
1104 trackPaintInvalidation(*this, m_contentsRect, PaintInvalidationFull); 1106 if (isTrackingOrCheckingPaintInvalidations())
1107 trackPaintInvalidation(*this, m_contentsRect, PaintInvalidationFull) ;
1105 } 1108 }
1106 } 1109 }
1107 1110
1108 void GraphicsLayer::setNeedsDisplay() 1111 void GraphicsLayer::setNeedsDisplay()
1109 { 1112 {
1110 if (!drawsContent()) 1113 if (!drawsContent())
1111 return; 1114 return;
1112 1115
1113 // TODO(chrishtr): stop invalidating the rects once FrameView::paintRecursiv ely does so. 1116 // TODO(chrishtr): stop invalidating the rects once FrameView::paintRecursiv ely does so.
1114 m_layer->layer()->invalidate(); 1117 m_layer->layer()->invalidate();
1115 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 1118 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
1116 m_linkHighlights[i]->invalidate(); 1119 m_linkHighlights[i]->invalidate();
1117 getPaintController().invalidateAll(); 1120 getPaintController().invalidateAll();
1118 1121
1119 trackPaintInvalidation(*this, IntRect(IntPoint(), expandedIntSize(m_size)), PaintInvalidationFull); 1122 if (isTrackingOrCheckingPaintInvalidations())
1123 trackPaintInvalidation(*this, IntRect(IntPoint(), expandedIntSize(m_size )), PaintInvalidationFull);
1120 } 1124 }
1121 1125
1122 void GraphicsLayer::setNeedsDisplayInRect(const IntRect& rect, PaintInvalidation Reason invalidationReason, const DisplayItemClient& client) 1126 void GraphicsLayer::setNeedsDisplayInRect(const IntRect& rect, PaintInvalidation Reason invalidationReason, const DisplayItemClient& client)
1123 { 1127 {
1124 if (!drawsContent()) 1128 if (!drawsContent())
1125 return; 1129 return;
1126 1130
1127 m_layer->layer()->invalidateRect(rect); 1131 m_layer->layer()->invalidateRect(rect);
1128 if (firstPaintInvalidationTrackingEnabled()) 1132 if (firstPaintInvalidationTrackingEnabled())
1129 m_debugInfo.appendAnnotatedInvalidateRect(rect, invalidationReason); 1133 m_debugInfo.appendAnnotatedInvalidateRect(rect, invalidationReason);
1130 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 1134 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
1131 m_linkHighlights[i]->invalidate(); 1135 m_linkHighlights[i]->invalidate();
1132 1136
1133 trackPaintInvalidation(client, rect, invalidationReason); 1137 if (isTrackingOrCheckingPaintInvalidations())
1138 trackPaintInvalidation(client, rect, invalidationReason);
1139 }
1140
1141 void GraphicsLayer::displayItemClientWasInvalidated(const DisplayItemClient& dis playItemClient, PaintInvalidationReason invalidationReason)
1142 {
1143 if (!drawsContent())
1144 return;
1145
1146 getPaintController().displayItemClientWasInvalidated(displayItemClient);
1147
1148 if (isTrackingOrCheckingPaintInvalidations())
1149 trackPaintInvalidation(displayItemClient, IntRect(), invalidationReason) ;
1134 } 1150 }
1135 1151
1136 void GraphicsLayer::setContentsRect(const IntRect& rect) 1152 void GraphicsLayer::setContentsRect(const IntRect& rect)
1137 { 1153 {
1138 if (rect == m_contentsRect) 1154 if (rect == m_contentsRect)
1139 return; 1155 return;
1140 1156
1141 m_contentsRect = rect; 1157 m_contentsRect = rect;
1142 updateContentsRect(); 1158 updateContentsRect();
1143 } 1159 }
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 { 1385 {
1370 if (!layer) { 1386 if (!layer) {
1371 fprintf(stderr, "Cannot showGraphicsLayerTree for (nil).\n"); 1387 fprintf(stderr, "Cannot showGraphicsLayerTree for (nil).\n");
1372 return; 1388 return;
1373 } 1389 }
1374 1390
1375 String output = layer->layerTreeAsText(blink::LayerTreeIncludesDebugInfo); 1391 String output = layer->layerTreeAsText(blink::LayerTreeIncludesDebugInfo);
1376 fprintf(stderr, "%s\n", output.utf8().data()); 1392 fprintf(stderr, "%s\n", output.utf8().data());
1377 } 1393 }
1378 #endif 1394 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698