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