| 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/scroll/ScrollableArea.h" | 5 #include "platform/scroll/ScrollableArea.h" |
| 6 | 6 |
| 7 #include "platform/graphics/Color.h" | 7 #include "platform/graphics/Color.h" |
| 8 #include "platform/graphics/GraphicsLayer.h" | 8 #include "platform/graphics/GraphicsLayer.h" |
| 9 #include "platform/scroll/ScrollbarTestSuite.h" | 9 #include "platform/scroll/ScrollbarTestSuite.h" |
| 10 #include "platform/scroll/ScrollbarTheme.h" | 10 #include "platform/scroll/ScrollbarTheme.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 | 75 |
| 76 // Forced GC in order to finalize objects depending on the mock object. | 76 // Forced GC in order to finalize objects depending on the mock object. |
| 77 ThreadState::current()-> collectAllGarbage(); | 77 ThreadState::current()-> collectAllGarbage(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) | 80 TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) |
| 81 { | 81 { |
| 82 ScrollbarTheme::setMockScrollbarsEnabled(true); | 82 ScrollbarTheme::setMockScrollbarsEnabled(true); |
| 83 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(0,
100)); | 83 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(0,
100)); |
| 84 FakeGraphicsLayerClient graphicsLayerClient; | 84 FakeGraphicsLayerClient graphicsLayerClient; |
| 85 graphicsLayerClient.setIsTrackingPaintInvalidations(true); | 85 graphicsLayerClient.setIsTrackingRasterInvalidations(true); |
| 86 FakeGraphicsLayer graphicsLayer(&graphicsLayerClient); | 86 FakeGraphicsLayer graphicsLayer(&graphicsLayerClient); |
| 87 graphicsLayer.setDrawsContent(true); | 87 graphicsLayer.setDrawsContent(true); |
| 88 graphicsLayer.setSize(FloatSize(111, 222)); | 88 graphicsLayer.setSize(FloatSize(111, 222)); |
| 89 | 89 |
| 90 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(R
eturn(&graphicsLayer)); | 90 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(R
eturn(&graphicsLayer)); |
| 91 | 91 |
| 92 Scrollbar* scrollbar = Scrollbar::create(scrollableArea, HorizontalScrollbar
, RegularScrollbar, nullptr); | 92 Scrollbar* scrollbar = Scrollbar::create(scrollableArea, HorizontalScrollbar
, RegularScrollbar, nullptr); |
| 93 graphicsLayer.resetTrackedPaintInvalidations(); | 93 graphicsLayer.resetTrackedRasterInvalidations(); |
| 94 scrollbar->setNeedsPaintInvalidation(NoPart); | 94 scrollbar->setNeedsPaintInvalidation(NoPart); |
| 95 EXPECT_TRUE(graphicsLayer.hasTrackedPaintInvalidations()); | 95 EXPECT_TRUE(graphicsLayer.hasTrackedRasterInvalidations()); |
| 96 | 96 |
| 97 // Forced GC in order to finalize objects depending on the mock object. | 97 // Forced GC in order to finalize objects depending on the mock object. |
| 98 ThreadState::current()-> collectAllGarbage(); | 98 ThreadState::current()-> collectAllGarbage(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 TEST_F(ScrollableAreaTest, InvalidatesNonCompositedScrollbarsWhenThumbMoves) | 101 TEST_F(ScrollableAreaTest, InvalidatesNonCompositedScrollbarsWhenThumbMoves) |
| 102 { | 102 { |
| 103 ScrollbarThemeWithMockInvalidation theme; | 103 ScrollbarThemeWithMockInvalidation theme; |
| 104 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(100
, 100)); | 104 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(100
, 100)); |
| 105 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting(scrollableArea,
HorizontalScrollbar, RegularScrollbar, &theme); | 105 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting(scrollableArea,
HorizontalScrollbar, RegularScrollbar, &theme); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 horizontalScrollbar->clearThumbNeedsRepaint(); | 139 horizontalScrollbar->clearThumbNeedsRepaint(); |
| 140 Scrollbar* verticalScrollbar = Scrollbar::createForTesting(scrollableArea, V
erticalScrollbar, RegularScrollbar, &theme); | 140 Scrollbar* verticalScrollbar = Scrollbar::createForTesting(scrollableArea, V
erticalScrollbar, RegularScrollbar, &theme); |
| 141 verticalScrollbar->clearTrackNeedsRepaint(); | 141 verticalScrollbar->clearTrackNeedsRepaint(); |
| 142 verticalScrollbar->clearThumbNeedsRepaint(); | 142 verticalScrollbar->clearThumbNeedsRepaint(); |
| 143 EXPECT_CALL(*scrollableArea, horizontalScrollbar()).WillRepeatedly(Return(ho
rizontalScrollbar)); | 143 EXPECT_CALL(*scrollableArea, horizontalScrollbar()).WillRepeatedly(Return(ho
rizontalScrollbar)); |
| 144 EXPECT_CALL(*scrollableArea, verticalScrollbar()).WillRepeatedly(Return(vert
icalScrollbar)); | 144 EXPECT_CALL(*scrollableArea, verticalScrollbar()).WillRepeatedly(Return(vert
icalScrollbar)); |
| 145 | 145 |
| 146 // Composited scrollbars only need repainting when parts become invalid | 146 // Composited scrollbars only need repainting when parts become invalid |
| 147 // (e.g. if the track changes appearance when the thumb reaches the end). | 147 // (e.g. if the track changes appearance when the thumb reaches the end). |
| 148 FakeGraphicsLayerClient graphicsLayerClient; | 148 FakeGraphicsLayerClient graphicsLayerClient; |
| 149 graphicsLayerClient.setIsTrackingPaintInvalidations(true); | 149 graphicsLayerClient.setIsTrackingRasterInvalidations(true); |
| 150 FakeGraphicsLayer layerForHorizontalScrollbar(&graphicsLayerClient); | 150 FakeGraphicsLayer layerForHorizontalScrollbar(&graphicsLayerClient); |
| 151 layerForHorizontalScrollbar.setDrawsContent(true); | 151 layerForHorizontalScrollbar.setDrawsContent(true); |
| 152 layerForHorizontalScrollbar.setSize(FloatSize(10, 10)); | 152 layerForHorizontalScrollbar.setSize(FloatSize(10, 10)); |
| 153 FakeGraphicsLayer layerForVerticalScrollbar(&graphicsLayerClient); | 153 FakeGraphicsLayer layerForVerticalScrollbar(&graphicsLayerClient); |
| 154 layerForVerticalScrollbar.setDrawsContent(true); | 154 layerForVerticalScrollbar.setDrawsContent(true); |
| 155 layerForVerticalScrollbar.setSize(FloatSize(10, 10)); | 155 layerForVerticalScrollbar.setSize(FloatSize(10, 10)); |
| 156 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(R
eturn(&layerForHorizontalScrollbar)); | 156 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()).WillRepeatedly(R
eturn(&layerForHorizontalScrollbar)); |
| 157 EXPECT_CALL(*scrollableArea, layerForVerticalScrollbar()).WillRepeatedly(Ret
urn(&layerForVerticalScrollbar)); | 157 EXPECT_CALL(*scrollableArea, layerForVerticalScrollbar()).WillRepeatedly(Ret
urn(&layerForVerticalScrollbar)); |
| 158 ASSERT_TRUE(scrollableArea->hasLayerForHorizontalScrollbar()); | 158 ASSERT_TRUE(scrollableArea->hasLayerForHorizontalScrollbar()); |
| 159 ASSERT_TRUE(scrollableArea->hasLayerForVerticalScrollbar()); | 159 ASSERT_TRUE(scrollableArea->hasLayerForVerticalScrollbar()); |
| 160 EXPECT_CALL(theme, shouldRepaintAllPartsOnInvalidation()).WillRepeatedly(Ret
urn(false)); | 160 EXPECT_CALL(theme, shouldRepaintAllPartsOnInvalidation()).WillRepeatedly(Ret
urn(false)); |
| 161 | 161 |
| 162 // First, we'll scroll horizontally, and the theme will require repainting | 162 // First, we'll scroll horizontally, and the theme will require repainting |
| 163 // the back button (i.e. the track). | 163 // the back button (i.e. the track). |
| 164 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return
(BackButtonStartPart)); | 164 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return
(BackButtonStartPart)); |
| 165 scrollableArea->setScrollPosition(DoublePoint(50, 0), ProgrammaticScroll); | 165 scrollableArea->setScrollPosition(DoublePoint(50, 0), ProgrammaticScroll); |
| 166 EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); | 166 EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedRasterInvalidations()); |
| 167 EXPECT_FALSE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); | 167 EXPECT_FALSE(layerForVerticalScrollbar.hasTrackedRasterInvalidations()); |
| 168 EXPECT_TRUE(horizontalScrollbar->trackNeedsRepaint()); | 168 EXPECT_TRUE(horizontalScrollbar->trackNeedsRepaint()); |
| 169 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); | 169 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); |
| 170 layerForHorizontalScrollbar.resetTrackedPaintInvalidations(); | 170 layerForHorizontalScrollbar.resetTrackedRasterInvalidations(); |
| 171 horizontalScrollbar->clearTrackNeedsRepaint(); | 171 horizontalScrollbar->clearTrackNeedsRepaint(); |
| 172 | 172 |
| 173 // Next, we'll scroll vertically, but invalidate the thumb. | 173 // Next, we'll scroll vertically, but invalidate the thumb. |
| 174 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return
(ThumbPart)); | 174 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).WillOnce(Return
(ThumbPart)); |
| 175 scrollableArea->setScrollPosition(DoublePoint(50, 50), ProgrammaticScroll); | 175 scrollableArea->setScrollPosition(DoublePoint(50, 50), ProgrammaticScroll); |
| 176 EXPECT_FALSE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); | 176 EXPECT_FALSE(layerForHorizontalScrollbar.hasTrackedRasterInvalidations()); |
| 177 EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); | 177 EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedRasterInvalidations()); |
| 178 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); | 178 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); |
| 179 EXPECT_TRUE(verticalScrollbar->thumbNeedsRepaint()); | 179 EXPECT_TRUE(verticalScrollbar->thumbNeedsRepaint()); |
| 180 layerForVerticalScrollbar.resetTrackedPaintInvalidations(); | 180 layerForVerticalScrollbar.resetTrackedRasterInvalidations(); |
| 181 verticalScrollbar->clearThumbNeedsRepaint(); | 181 verticalScrollbar->clearThumbNeedsRepaint(); |
| 182 | 182 |
| 183 // Next we'll scroll in both, but the thumb position moving requires no | 183 // Next we'll scroll in both, but the thumb position moving requires no |
| 184 // invalidations. Nonetheless the GraphicsLayer should be invalidated, | 184 // invalidations. Nonetheless the GraphicsLayer should be invalidated, |
| 185 // because we still need to update the underlying layer (though no | 185 // because we still need to update the underlying layer (though no |
| 186 // rasterization will be required). | 186 // rasterization will be required). |
| 187 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).Times(2).WillRe
peatedly(Return(NoPart)); | 187 EXPECT_CALL(theme, invalidateOnThumbPositionChange(_, _, _)).Times(2).WillRe
peatedly(Return(NoPart)); |
| 188 scrollableArea->setScrollPosition(DoublePoint(70, 70), ProgrammaticScroll); | 188 scrollableArea->setScrollPosition(DoublePoint(70, 70), ProgrammaticScroll); |
| 189 EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedPaintInvalidations()); | 189 EXPECT_TRUE(layerForHorizontalScrollbar.hasTrackedRasterInvalidations()); |
| 190 EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedPaintInvalidations()); | 190 EXPECT_TRUE(layerForVerticalScrollbar.hasTrackedRasterInvalidations()); |
| 191 EXPECT_FALSE(horizontalScrollbar->trackNeedsRepaint()); | 191 EXPECT_FALSE(horizontalScrollbar->trackNeedsRepaint()); |
| 192 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); | 192 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); |
| 193 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); | 193 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); |
| 194 EXPECT_FALSE(verticalScrollbar->thumbNeedsRepaint()); | 194 EXPECT_FALSE(verticalScrollbar->thumbNeedsRepaint()); |
| 195 | 195 |
| 196 // Forced GC in order to finalize objects depending on the mock object. | 196 // Forced GC in order to finalize objects depending on the mock object. |
| 197 ThreadState::current()-> collectAllGarbage(); | 197 ThreadState::current()-> collectAllGarbage(); |
| 198 } | 198 } |
| 199 | 199 |
| 200 TEST_F(ScrollableAreaTest, RecalculatesScrollbarOverlayIfBackgroundChanges) | 200 TEST_F(ScrollableAreaTest, RecalculatesScrollbarOverlayIfBackgroundChanges) |
| 201 { | 201 { |
| 202 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(0,
100)); | 202 MockScrollableArea* scrollableArea = MockScrollableArea::create(IntPoint(0,
100)); |
| 203 | 203 |
| 204 EXPECT_EQ(ScrollbarOverlayStyleDefault, scrollableArea->getScrollbarOverlayS
tyle()); | 204 EXPECT_EQ(ScrollbarOverlayStyleDefault, scrollableArea->getScrollbarOverlayS
tyle()); |
| 205 scrollableArea->recalculateScrollbarOverlayStyle(Color(34, 85, 51)); | 205 scrollableArea->recalculateScrollbarOverlayStyle(Color(34, 85, 51)); |
| 206 EXPECT_EQ(ScrollbarOverlayStyleLight, scrollableArea->getScrollbarOverlaySty
le()); | 206 EXPECT_EQ(ScrollbarOverlayStyleLight, scrollableArea->getScrollbarOverlaySty
le()); |
| 207 scrollableArea->recalculateScrollbarOverlayStyle(Color(236, 143, 185)); | 207 scrollableArea->recalculateScrollbarOverlayStyle(Color(236, 143, 185)); |
| 208 EXPECT_EQ(ScrollbarOverlayStyleDefault, scrollableArea->getScrollbarOverlayS
tyle()); | 208 EXPECT_EQ(ScrollbarOverlayStyleDefault, scrollableArea->getScrollbarOverlayS
tyle()); |
| 209 } | 209 } |
| 210 | 210 |
| 211 } // namespace blink | 211 } // namespace blink |
| OLD | NEW |