[GTK][WPE] Remove UpdateAtlas
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / coordinated / CoordinatedGraphicsState.h
1 /*
2  * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies)
3  * Copyright (C) 2013 Company 100, Inc. All rights reserved.
4  * Copyright (C) 2017 Sony Interactive Entertainment Inc.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25  * THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 #ifndef CoordinatedGraphicsState_h
29 #define CoordinatedGraphicsState_h
30
31 #if USE(COORDINATED_GRAPHICS)
32
33 #include "Color.h"
34 #include "FilterOperations.h"
35 #include "FloatRect.h"
36 #include "FloatSize.h"
37 #include "IntRect.h"
38 #include "IntSize.h"
39 #include "NicosiaBuffer.h"
40 #include "SurfaceUpdateInfo.h"
41 #include "TextureMapperAnimation.h"
42 #include "TransformationMatrix.h"
43
44 #if USE(COORDINATED_GRAPHICS_THREADED)
45 #include "TextureMapperPlatformLayerProxy.h"
46 #endif
47
48 namespace WebCore {
49
50 typedef uint32_t CoordinatedLayerID;
51 enum { InvalidCoordinatedLayerID = 0 };
52
53 typedef uint64_t CoordinatedImageBackingID;
54 enum { InvalidCoordinatedImageBackingID = 0 };
55
56 struct TileUpdateInfo {
57     uint32_t tileID;
58     IntRect tileRect;
59     WebCore::SurfaceUpdateInfo updateInfo;
60 };
61
62 struct TileCreationInfo {
63     uint32_t tileID;
64     float scale;
65 };
66
67 struct DebugVisuals {
68     DebugVisuals()
69         : showDebugBorders(false)
70         , showRepaintCounter(false) { }
71     Color debugBorderColor;
72     float debugBorderWidth { 0 };
73     union {
74         struct {
75             bool showDebugBorders : 1;
76             bool showRepaintCounter : 1;
77         };
78         unsigned flags;
79     };
80 };
81
82 struct CoordinatedGraphicsLayerState {
83     union {
84         struct {
85             bool positionChanged: 1;
86             bool anchorPointChanged: 1;
87             bool sizeChanged: 1;
88             bool transformChanged: 1;
89             bool childrenTransformChanged: 1;
90             bool contentsRectChanged: 1;
91             bool opacityChanged: 1;
92             bool solidColorChanged: 1;
93             bool debugVisualsChanged: 1;
94             bool replicaChanged: 1;
95             bool maskChanged: 1;
96             bool imageChanged: 1;
97             bool flagsChanged: 1;
98             bool animationsChanged: 1;
99             bool filtersChanged: 1;
100             bool childrenChanged: 1;
101             bool repaintCountChanged : 1;
102             bool platformLayerChanged: 1;
103             bool platformLayerUpdated: 1;
104             bool platformLayerShouldSwapBuffers: 1;
105             bool isScrollableChanged: 1;
106             bool contentsTilingChanged: 1;
107         };
108         unsigned changeMask;
109     };
110     union {
111         struct {
112             bool contentsOpaque : 1;
113             bool drawsContent : 1;
114             bool contentsVisible : 1;
115             bool backfaceVisible : 1;
116             bool masksToBounds : 1;
117             bool preserves3D : 1;
118             bool fixedToViewport : 1;
119             bool isScrollable: 1;
120         };
121         unsigned flags;
122     };
123
124     CoordinatedGraphicsLayerState()
125         : changeMask(0)
126         , contentsOpaque(false)
127         , drawsContent(false)
128         , contentsVisible(true)
129         , backfaceVisible(true)
130         , masksToBounds(false)
131         , preserves3D(false)
132         , fixedToViewport(false)
133         , isScrollable(false)
134         , opacity(0)
135         , replica(InvalidCoordinatedLayerID)
136         , mask(InvalidCoordinatedLayerID)
137         , imageID(InvalidCoordinatedImageBackingID)
138         , repaintCount(0)
139 #if USE(COORDINATED_GRAPHICS_THREADED)
140         , platformLayerProxy(0)
141 #endif
142     {
143     }
144
145     FloatPoint pos;
146     FloatPoint3D anchorPoint;
147     FloatSize size;
148     TransformationMatrix transform;
149     TransformationMatrix childrenTransform;
150     FloatRect contentsRect;
151     FloatSize contentsTilePhase;
152     FloatSize contentsTileSize;
153     float opacity;
154     Color solidColor;
155     FilterOperations filters;
156     TextureMapperAnimations animations;
157     Vector<uint32_t> children;
158     Vector<TileCreationInfo> tilesToCreate;
159     Vector<uint32_t> tilesToRemove;
160     CoordinatedLayerID replica;
161     CoordinatedLayerID mask;
162     CoordinatedImageBackingID imageID;
163     DebugVisuals debugVisuals;
164
165     unsigned repaintCount;
166     Vector<TileUpdateInfo> tilesToUpdate;
167
168 #if USE(COORDINATED_GRAPHICS_THREADED)
169     RefPtr<TextureMapperPlatformLayerProxy> platformLayerProxy;
170 #endif
171
172     bool hasPendingChanges() const
173     {
174         return changeMask || tilesToUpdate.size() || tilesToRemove.size() || tilesToCreate.size();
175     }
176 };
177
178 struct CoordinatedGraphicsState {
179     uint32_t rootCompositingLayer;
180     FloatPoint scrollPosition;
181     IntSize contentsSize;
182     IntRect coveredRect;
183
184     Vector<CoordinatedLayerID> layersToCreate;
185     Vector<std::pair<CoordinatedLayerID, CoordinatedGraphicsLayerState>> layersToUpdate;
186     Vector<CoordinatedLayerID> layersToRemove;
187
188     Vector<CoordinatedImageBackingID> imagesToCreate;
189     Vector<CoordinatedImageBackingID> imagesToRemove;
190     Vector<std::pair<CoordinatedImageBackingID, RefPtr<Nicosia::Buffer>>> imagesToUpdate;
191     Vector<CoordinatedImageBackingID> imagesToClear;
192 };
193
194 } // namespace WebCore
195
196 #endif // USE(COORDINATED_GRAPHICS)
197
198 #endif // CoordinatedGraphicsState_h