OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
5 * | 5 * |
6 * Other contributors: | 6 * Other contributors: |
7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 , m_has3DTransformedDescendant(false) | 116 , m_has3DTransformedDescendant(false) |
117 , m_containsDirtyOverlayScrollbars(false) | 117 , m_containsDirtyOverlayScrollbars(false) |
118 , m_hasFilterInfo(false) | 118 , m_hasFilterInfo(false) |
119 , m_needsAncestorDependentCompositingInputsUpdate(true) | 119 , m_needsAncestorDependentCompositingInputsUpdate(true) |
120 , m_needsDescendantDependentCompositingInputsUpdate(true) | 120 , m_needsDescendantDependentCompositingInputsUpdate(true) |
121 , m_childNeedsCompositingInputsUpdate(true) | 121 , m_childNeedsCompositingInputsUpdate(true) |
122 , m_hasCompositingDescendant(false) | 122 , m_hasCompositingDescendant(false) |
123 , m_hasNonCompositedChild(false) | 123 , m_hasNonCompositedChild(false) |
124 , m_shouldIsolateCompositedDescendants(false) | 124 , m_shouldIsolateCompositedDescendants(false) |
125 , m_lostGroupedMapping(false) | 125 , m_lostGroupedMapping(false) |
| 126 , m_needsRepaint(false) |
126 , m_layoutObject(layoutObject) | 127 , m_layoutObject(layoutObject) |
127 , m_parent(0) | 128 , m_parent(0) |
128 , m_previous(0) | 129 , m_previous(0) |
129 , m_next(0) | 130 , m_next(0) |
130 , m_first(0) | 131 , m_first(0) |
131 , m_last(0) | 132 , m_last(0) |
132 , m_staticInlinePosition(0) | 133 , m_staticInlinePosition(0) |
133 , m_staticBlockPosition(0) | 134 , m_staticBlockPosition(0) |
134 , m_enclosingPaginationLayer(0) | 135 , m_enclosingPaginationLayer(0) |
135 , m_potentialCompositingReasonsFromStyle(CompositingReasonNone) | 136 , m_potentialCompositingReasonsFromStyle(CompositingReasonNone) |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 { | 852 { |
852 const AncestorDependentCompositingInputs& properties = ancestorDependentComp
ositingInputs(); | 853 const AncestorDependentCompositingInputs& properties = ancestorDependentComp
ositingInputs(); |
853 | 854 |
854 TransformState transformState(TransformState::ApplyTransformDirection, Float
Point()); | 855 TransformState transformState(TransformState::ApplyTransformDirection, Float
Point()); |
855 // FIXME: add a test that checks flipped writing mode and ApplyContainerFlip
are correct. | 856 // FIXME: add a test that checks flipped writing mode and ApplyContainerFlip
are correct. |
856 layoutObject()->mapLocalToContainer(properties.transformAncestor ? propertie
s.transformAncestor->layoutObject() : 0, transformState, ApplyContainerFlip); | 857 layoutObject()->mapLocalToContainer(properties.transformAncestor ? propertie
s.transformAncestor->layoutObject() : 0, transformState, ApplyContainerFlip); |
857 transformState.flatten(); | 858 transformState.flatten(); |
858 return LayoutPoint(transformState.lastPlanarPoint()); | 859 return LayoutPoint(transformState.lastPlanarPoint()); |
859 } | 860 } |
860 | 861 |
861 const DeprecatedPaintLayer* DeprecatedPaintLayer::compositingContainer() const | 862 DeprecatedPaintLayer* DeprecatedPaintLayer::compositingContainer() const |
862 { | 863 { |
863 if (!stackingNode()->isTreatedAsStackingContextForPainting()) | 864 if (!stackingNode()->isTreatedAsStackingContextForPainting()) |
864 return parent(); | 865 return parent(); |
865 if (DeprecatedPaintLayerStackingNode* ancestorStackingNode = stackingNode()-
>ancestorStackingContextNode()) | 866 if (DeprecatedPaintLayerStackingNode* ancestorStackingNode = stackingNode()-
>ancestorStackingContextNode()) |
866 return ancestorStackingNode->layer(); | 867 return ancestorStackingNode->layer(); |
867 return 0; | 868 return nullptr; |
868 } | 869 } |
869 | 870 |
870 bool DeprecatedPaintLayer::isPaintInvalidationContainer() const | 871 bool DeprecatedPaintLayer::isPaintInvalidationContainer() const |
871 { | 872 { |
872 return compositingState() == PaintsIntoOwnBacking || compositingState() == P
aintsIntoGroupedBacking; | 873 return compositingState() == PaintsIntoOwnBacking || compositingState() == P
aintsIntoGroupedBacking; |
873 } | 874 } |
874 | 875 |
875 // Note: enclosingCompositingLayer does not include squashed layers. Compositing
stacking children of squashed layers | 876 // Note: enclosingCompositingLayer does not include squashed layers. Compositing
stacking children of squashed layers |
876 // receive graphics layers that are parented to the compositing ancestor of the
squashed layer. | 877 // receive graphics layers that are parented to the compositing ancestor of the
squashed layer. |
877 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerWithCompositedDeprecat
edPaintLayerMapping(IncludeSelfOrNot includeSelf) const | 878 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerWithCompositedDeprecat
edPaintLayerMapping(IncludeSelfOrNot includeSelf) const |
878 { | 879 { |
879 ASSERT(isAllowedToQueryCompositingState()); | 880 ASSERT(isAllowedToQueryCompositingState()); |
880 | 881 |
881 if ((includeSelf == IncludeSelf) && compositingState() != NotComposited && c
ompositingState() != PaintsIntoGroupedBacking) | 882 if ((includeSelf == IncludeSelf) && compositingState() != NotComposited && c
ompositingState() != PaintsIntoGroupedBacking) |
882 return const_cast<DeprecatedPaintLayer*>(this); | 883 return const_cast<DeprecatedPaintLayer*>(this); |
883 | 884 |
884 for (const DeprecatedPaintLayer* curr = compositingContainer(); curr; curr =
curr->compositingContainer()) { | 885 for (DeprecatedPaintLayer* curr = compositingContainer(); curr; curr = curr-
>compositingContainer()) { |
885 if (curr->compositingState() != NotComposited && curr->compositingState(
) != PaintsIntoGroupedBacking) | 886 if (curr->compositingState() != NotComposited && curr->compositingState(
) != PaintsIntoGroupedBacking) |
886 return const_cast<DeprecatedPaintLayer*>(curr); | 887 return curr; |
887 } | 888 } |
888 | 889 |
889 return 0; | 890 return nullptr; |
890 } | 891 } |
891 | 892 |
892 // Return the enclosingCompositedLayerForPaintInvalidation for the given Layer | 893 // Return the enclosingCompositedLayerForPaintInvalidation for the given Layer |
893 // including crossing frame boundaries. | 894 // including crossing frame boundaries. |
894 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerForPaintInvalidationCr
ossingFrameBoundaries() const | 895 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerForPaintInvalidationCr
ossingFrameBoundaries() const |
895 { | 896 { |
896 const DeprecatedPaintLayer* layer = this; | 897 const DeprecatedPaintLayer* layer = this; |
897 DeprecatedPaintLayer* compositedLayer = 0; | 898 DeprecatedPaintLayer* compositedLayer = 0; |
898 while (!compositedLayer) { | 899 while (!compositedLayer) { |
899 compositedLayer = layer->enclosingLayerForPaintInvalidation(); | 900 compositedLayer = layer->enclosingLayerForPaintInvalidation(); |
900 if (!compositedLayer) { | 901 if (!compositedLayer) { |
901 LayoutObject* owner = layer->layoutObject()->frame()->ownerLayoutObj
ect(); | 902 LayoutObject* owner = layer->layoutObject()->frame()->ownerLayoutObj
ect(); |
902 if (!owner) | 903 if (!owner) |
903 break; | 904 break; |
904 layer = owner->enclosingLayer(); | 905 layer = owner->enclosingLayer(); |
905 } | 906 } |
906 } | 907 } |
907 return compositedLayer; | 908 return compositedLayer; |
908 } | 909 } |
909 | 910 |
910 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerForPaintInvalidation()
const | 911 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingLayerForPaintInvalidation()
const |
911 { | 912 { |
912 ASSERT(isAllowedToQueryCompositingState()); | 913 ASSERT(isAllowedToQueryCompositingState()); |
913 | 914 |
914 if (isPaintInvalidationContainer()) | 915 if (isPaintInvalidationContainer()) |
915 return const_cast<DeprecatedPaintLayer*>(this); | 916 return const_cast<DeprecatedPaintLayer*>(this); |
916 | 917 |
917 for (const DeprecatedPaintLayer* curr = compositingContainer(); curr; curr =
curr->compositingContainer()) { | 918 for (DeprecatedPaintLayer* curr = compositingContainer(); curr; curr = curr-
>compositingContainer()) { |
918 if (curr->isPaintInvalidationContainer()) | 919 if (curr->isPaintInvalidationContainer()) |
919 return const_cast<DeprecatedPaintLayer*>(curr); | 920 return curr; |
920 } | 921 } |
921 | 922 |
922 return 0; | 923 return nullptr; |
923 } | 924 } |
924 | 925 |
925 void DeprecatedPaintLayer::setNeedsCompositingInputsUpdate() | 926 void DeprecatedPaintLayer::setNeedsCompositingInputsUpdate() |
926 { | 927 { |
927 m_needsAncestorDependentCompositingInputsUpdate = true; | 928 m_needsAncestorDependentCompositingInputsUpdate = true; |
928 m_needsDescendantDependentCompositingInputsUpdate = true; | 929 m_needsDescendantDependentCompositingInputsUpdate = true; |
929 | 930 |
930 for (DeprecatedPaintLayer* current = this; current && !current->m_childNeeds
CompositingInputsUpdate; current = current->parent()) | 931 for (DeprecatedPaintLayer* current = this; current && !current->m_childNeeds
CompositingInputsUpdate; current = current->parent()) |
931 current->m_childNeedsCompositingInputsUpdate = true; | 932 current->m_childNeedsCompositingInputsUpdate = true; |
932 | 933 |
(...skipping 1746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2679 iter->value.append(physicalBoundingBox(parentLayer)); | 2680 iter->value.append(physicalBoundingBox(parentLayer)); |
2680 } | 2681 } |
2681 } | 2682 } |
2682 } else { | 2683 } else { |
2683 rect.append(logicalBoundingBox()); | 2684 rect.append(logicalBoundingBox()); |
2684 rects.set(this, rect); | 2685 rects.set(this, rect); |
2685 } | 2686 } |
2686 } | 2687 } |
2687 } | 2688 } |
2688 | 2689 |
| 2690 void DeprecatedPaintLayer::setNeedsRepaint() |
| 2691 { |
| 2692 ASSERT(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
| 2693 |
| 2694 DeprecatedPaintLayer* layer = this; |
| 2695 while (!layer->isSelfPaintingLayer() && !layer->hasSelfPaintingLayerDescenda
nt()) { |
| 2696 layer = layer->parent(); |
| 2697 ASSERT(layer); // At least the root layer is self painting. |
| 2698 } |
| 2699 |
| 2700 if (layer->m_needsRepaint) |
| 2701 return; |
| 2702 layer->m_needsRepaint = true; |
| 2703 layer->markCompositingContainerChainForNeedsRepaint(); |
| 2704 } |
| 2705 |
| 2706 void DeprecatedPaintLayer::markCompositingContainerChainForNeedsRepaint() |
| 2707 { |
| 2708 DeprecatedPaintLayer* layer = this; |
| 2709 while (true) { |
| 2710 DeprecatedPaintLayer* container = layer->compositingContainer(); |
| 2711 if (!container) { |
| 2712 LayoutObject* owner = layer->layoutObject()->frame()->ownerLayoutObj
ect(); |
| 2713 if (!owner) |
| 2714 break; |
| 2715 container = owner->enclosingLayer(); |
| 2716 } |
| 2717 if (container->m_needsRepaint) |
| 2718 break; |
| 2719 if (container->isSelfPaintingLayer() || container->hasSelfPaintingLayerD
escendant()) |
| 2720 container->m_needsRepaint = true; |
| 2721 layer = container; |
| 2722 } |
| 2723 } |
| 2724 |
2689 DisableCompositingQueryAsserts::DisableCompositingQueryAsserts() | 2725 DisableCompositingQueryAsserts::DisableCompositingQueryAsserts() |
2690 : m_disabler(gCompositingQueryMode, CompositingQueriesAreAllowed) { } | 2726 : m_disabler(gCompositingQueryMode, CompositingQueriesAreAllowed) { } |
2691 | 2727 |
2692 } // namespace blink | 2728 } // namespace blink |
2693 | 2729 |
2694 #ifndef NDEBUG | 2730 #ifndef NDEBUG |
2695 // FIXME: Rename? | 2731 // FIXME: Rename? |
2696 void showLayerTree(const blink::DeprecatedPaintLayer* layer) | 2732 void showLayerTree(const blink::DeprecatedPaintLayer* layer) |
2697 { | 2733 { |
2698 if (!layer) { | 2734 if (!layer) { |
2699 fprintf(stderr, "Cannot showLayerTree. Root is (nil)\n"); | 2735 fprintf(stderr, "Cannot showLayerTree. Root is (nil)\n"); |
2700 return; | 2736 return; |
2701 } | 2737 } |
2702 | 2738 |
2703 if (blink::LocalFrame* frame = layer->layoutObject()->frame()) { | 2739 if (blink::LocalFrame* frame = layer->layoutObject()->frame()) { |
2704 WTF::String output = externalRepresentation(frame, blink::LayoutAsTextSh
owAllLayers | blink::LayoutAsTextShowLayerNesting | blink::LayoutAsTextShowCompo
sitedLayers | blink::LayoutAsTextShowAddresses | blink::LayoutAsTextShowIDAndCla
ss | blink::LayoutAsTextDontUpdateLayout | blink::LayoutAsTextShowLayoutState); | 2740 WTF::String output = externalRepresentation(frame, blink::LayoutAsTextSh
owAllLayers | blink::LayoutAsTextShowLayerNesting | blink::LayoutAsTextShowCompo
sitedLayers | blink::LayoutAsTextShowAddresses | blink::LayoutAsTextShowIDAndCla
ss | blink::LayoutAsTextDontUpdateLayout | blink::LayoutAsTextShowLayoutState); |
2705 fprintf(stderr, "%s\n", output.utf8().data()); | 2741 fprintf(stderr, "%s\n", output.utf8().data()); |
2706 } | 2742 } |
2707 } | 2743 } |
2708 | 2744 |
2709 void showLayerTree(const blink::LayoutObject* layoutObject) | 2745 void showLayerTree(const blink::LayoutObject* layoutObject) |
2710 { | 2746 { |
2711 if (!layoutObject) { | 2747 if (!layoutObject) { |
2712 fprintf(stderr, "Cannot showLayerTree. Root is (nil)\n"); | 2748 fprintf(stderr, "Cannot showLayerTree. Root is (nil)\n"); |
2713 return; | 2749 return; |
2714 } | 2750 } |
2715 showLayerTree(layoutObject->enclosingLayer()); | 2751 showLayerTree(layoutObject->enclosingLayer()); |
2716 } | 2752 } |
2717 #endif | 2753 #endif |
OLD | NEW |