Remove the Timer parameters from timer callbacks
[WebKit-https.git] / Source / WebCore / platform / graphics / ca / TileController.h
1 /*
2  * Copyright (C) 2011-2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TileController_h
27 #define TileController_h
28
29 #include "FloatRect.h"
30 #include "IntRect.h"
31 #include "PlatformCALayer.h"
32 #include "PlatformCALayerClient.h"
33 #include "TiledBacking.h"
34 #include "Timer.h"
35 #include <wtf/Deque.h>
36 #include <wtf/HashMap.h>
37 #include <wtf/Noncopyable.h>
38 #include <wtf/PassOwnPtr.h>
39 #include <wtf/RetainPtr.h>
40
41 namespace WebCore {
42
43 class FloatRect;
44 class IntPoint;
45 class IntRect;
46 class TileCoverageMap;
47 class TileGrid;
48
49 typedef Vector<RetainPtr<PlatformLayer>> PlatformLayerList;
50
51 class TileController final : public TiledBacking {
52     WTF_MAKE_NONCOPYABLE(TileController); WTF_MAKE_FAST_ALLOCATED;
53     friend class TileCoverageMap;
54     friend class TileGrid;
55 public:
56     explicit TileController(PlatformCALayer*);
57     ~TileController();
58
59     WEBCORE_EXPORT void tileCacheLayerBoundsChanged();
60
61     WEBCORE_EXPORT void setNeedsDisplay();
62     WEBCORE_EXPORT void setNeedsDisplayInRect(const IntRect&);
63
64     WEBCORE_EXPORT void setContentsScale(float);
65     WEBCORE_EXPORT float contentsScale() const;
66
67     bool acceleratesDrawing() const { return m_acceleratesDrawing; }
68     WEBCORE_EXPORT void setAcceleratesDrawing(bool);
69
70     WEBCORE_EXPORT void setTilesOpaque(bool);
71     bool tilesAreOpaque() const { return m_tilesAreOpaque; }
72
73     PlatformCALayer& rootLayer() { return *m_tileCacheLayer; }
74     const PlatformCALayer& rootLayer() const { return *m_tileCacheLayer; }
75
76     WEBCORE_EXPORT void setTileDebugBorderWidth(float);
77     WEBCORE_EXPORT void setTileDebugBorderColor(Color);
78
79     virtual FloatRect visibleRect() const override { return m_visibleRect; }
80
81     unsigned blankPixelCount() const;
82     static unsigned blankPixelCountForTiles(const PlatformLayerList&, const FloatRect&, const IntPoint&);
83
84 #if PLATFORM(IOS)
85     unsigned numberOfUnparentedTiles() const;
86     void removeUnparentedTilesNow();
87 #endif
88
89     float deviceScaleFactor() const { return m_deviceScaleFactor; }
90
91     Color tileDebugBorderColor() const { return m_tileDebugBorderColor; }
92     float tileDebugBorderWidth() const { return m_tileDebugBorderWidth; }
93     ScrollingModeIndication indicatorMode() const { return m_indicatorMode; }
94
95     virtual IntSize tileSize() const override { return m_tileSize; }
96     virtual IntRect bounds() const override;
97     virtual IntRect boundsWithoutMargin() const override;
98     virtual bool hasMargins() const override;
99     virtual bool hasHorizontalMargins() const override;
100     virtual bool hasVerticalMargins() const override;
101     virtual int topMarginHeight() const override;
102     virtual int bottomMarginHeight() const override;
103     virtual int leftMarginWidth() const override;
104     virtual int rightMarginWidth() const override;
105     virtual TileCoverage tileCoverage() const override { return m_tileCoverage; }
106     virtual bool unparentsOffscreenTiles() const override { return m_unparentsOffscreenTiles; }
107     virtual bool scrollingPerformanceLoggingEnabled() const override { return m_scrollingPerformanceLoggingEnabled; }
108
109     FloatRect computeTileCoverageRect(const FloatRect& previousVisibleRect, const FloatRect& currentVisibleRect) const;
110
111     IntRect boundsAtLastRevalidate() const { return m_boundsAtLastRevalidate; }
112     IntRect boundsAtLastRevalidateWithoutMargin() const;
113     FloatRect visibleRectAtLastRevalidate() const { return m_visibleRectAtLastRevalidate; }
114     void didRevalidateTiles();
115
116     bool shouldAggressivelyRetainTiles() const;
117     bool shouldTemporarilyRetainTileCohorts() const;
118
119     void updateTileCoverageMap();
120
121     RefPtr<PlatformCALayer> createTileLayer(const IntRect&, TileGrid&);
122
123     const TileGrid& tileGrid() const { return *m_tileGrid; }
124
125     WEBCORE_EXPORT Vector<RefPtr<PlatformCALayer>> containerLayers();
126
127 private:
128     TileGrid& tileGrid() { return *m_tileGrid; }
129
130     void scheduleTileRevalidation(double interval);
131
132     bool isInWindow() const { return m_isInWindow; }
133     float topContentInset() const { return m_topContentInset; }
134
135     // TiledBacking member functions.
136     virtual void setVisibleRect(const FloatRect&) override;
137     virtual bool tilesWouldChangeForVisibleRect(const FloatRect&) const override;
138     virtual void setTiledScrollingIndicatorPosition(const FloatPoint&) override;
139     virtual void setTopContentInset(float) override;
140     virtual void prepopulateRect(const FloatRect&) override;
141     virtual void setIsInWindow(bool) override;
142     virtual void setTileCoverage(TileCoverage) override;
143     virtual void revalidateTiles() override;
144     virtual void forceRepaint() override;
145     virtual IntRect tileGridExtent() const override;
146     virtual void setScrollingPerformanceLoggingEnabled(bool flag) override { m_scrollingPerformanceLoggingEnabled = flag; }
147     virtual void setUnparentsOffscreenTiles(bool flag) override { m_unparentsOffscreenTiles = flag; }
148     virtual double retainedTileBackingStoreMemory() const override;
149     virtual IntRect tileCoverageRect() const override;
150 #if USE(CA)
151     virtual PlatformCALayer* tiledScrollingIndicatorLayer() override;
152 #endif
153     virtual void setScrollingModeIndication(ScrollingModeIndication) override;
154     virtual void setTileMargins(int marginTop, int marginBottom, int marginLeft, int marginRight) override;
155     virtual void setZoomedOutContentsScale(float) override;
156     virtual float zoomedOutContentsScale() const override;
157
158
159     void tileRevalidationTimerFired();
160
161     void setNeedsRevalidateTiles();
162
163     PlatformCALayerClient* owningGraphicsLayer() const { return m_tileCacheLayer->owner(); }
164
165     PlatformCALayer* m_tileCacheLayer;
166
167     std::unique_ptr<TileCoverageMap> m_coverageMap;
168
169     std::unique_ptr<TileGrid> m_tileGrid;
170     std::unique_ptr<TileGrid> m_zoomedOutTileGrid;
171
172     IntSize m_tileSize;
173     FloatRect m_visibleRect;
174     FloatRect m_visibleRectAtLastRevalidate;
175     IntRect m_boundsAtLastRevalidate;
176
177     Timer m_tileRevalidationTimer;
178
179     float m_zoomedOutContentsScale;
180     float m_deviceScaleFactor;
181
182     TileCoverage m_tileCoverage;
183
184     // m_marginTop and m_marginBottom are the height in pixels of the top and bottom margin tiles. The width
185     // of those tiles will be equivalent to the width of the other tiles in the grid. m_marginRight and
186     // m_marginLeft are the width in pixels of the right and left margin tiles, respectively. The height of
187     // those tiles will be equivalent to the height of the other tiles in the grid.
188     int m_marginTop;
189     int m_marginBottom;
190     int m_marginLeft;
191     int m_marginRight;
192
193     bool m_isInWindow;
194     bool m_scrollingPerformanceLoggingEnabled;
195     bool m_unparentsOffscreenTiles;
196     bool m_acceleratesDrawing;
197     bool m_tilesAreOpaque;
198     bool m_hasTilesWithTemporaryScaleFactor; // Used to make low-res tiles when zooming.
199
200     Color m_tileDebugBorderColor;
201     float m_tileDebugBorderWidth;
202     ScrollingModeIndication m_indicatorMode;
203     float m_topContentInset;
204 };
205
206 } // namespace WebCore
207
208 #endif // TileController_h