Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: Source/core/rendering/CompositedLayerMapping.h

Issue 20723003: Fix pixel snapping issues when layers become composited (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Adding another failing test expectation Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 NormalCompositingLayer, // non-tiled layer with backing store 43 NormalCompositingLayer, // non-tiled layer with backing store
44 MediaCompositingLayer, // layer that contains an image, video, webGL or plug in 44 MediaCompositingLayer, // layer that contains an image, video, webGL or plug in
45 ContainerCompositingLayer // layer with no backing store 45 ContainerCompositingLayer // layer with no backing store
46 }; 46 };
47 47
48 48
49 // A GraphicsLayerPaintInfo contains all the info needed to paint a partial subt ree of RenderLayers into a GraphicsLayer. 49 // A GraphicsLayerPaintInfo contains all the info needed to paint a partial subt ree of RenderLayers into a GraphicsLayer.
50 struct GraphicsLayerPaintInfo { 50 struct GraphicsLayerPaintInfo {
51 RenderLayer* renderLayer; 51 RenderLayer* renderLayer;
52 52
53 IntRect compositedBounds; 53 LayoutRect compositedBounds;
54 54
55 IntSize offsetFromRenderer; 55 IntSize offsetFromRenderer;
56 56
57 GraphicsLayerPaintingPhase paintingPhase; 57 GraphicsLayerPaintingPhase paintingPhase;
58 58
59 bool isBackgroundLayer; 59 bool isBackgroundLayer;
60 }; 60 };
61 61
62 // CompositedLayerMapping keeps track of how RenderLayers of the render tree cor respond to 62 // CompositedLayerMapping keeps track of how RenderLayers of the render tree cor respond to
63 // GraphicsLayers of the composited layer tree. Each instance of CompositedLayer Mapping 63 // GraphicsLayers of the composited layer tree. Each instance of CompositedLayer Mapping
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 137
138 // Interface to start, finish, suspend and resume animations and transitions 138 // Interface to start, finish, suspend and resume animations and transitions
139 bool startTransition(double, CSSPropertyID, const RenderStyle* fromStyle, co nst RenderStyle* toStyle); 139 bool startTransition(double, CSSPropertyID, const RenderStyle* fromStyle, co nst RenderStyle* toStyle);
140 void transitionPaused(double timeOffset, CSSPropertyID); 140 void transitionPaused(double timeOffset, CSSPropertyID);
141 void transitionFinished(CSSPropertyID); 141 void transitionFinished(CSSPropertyID);
142 142
143 bool startAnimation(double timeOffset, const CSSAnimationData*, const Keyfra meList& keyframes); 143 bool startAnimation(double timeOffset, const CSSAnimationData*, const Keyfra meList& keyframes);
144 void animationPaused(double timeOffset, const String& name); 144 void animationPaused(double timeOffset, const String& name);
145 void animationFinished(const String& name); 145 void animationFinished(const String& name);
146 146
147 IntRect compositedBounds() const; 147 LayoutRect compositedBounds() const;
148 void setCompositedBounds(const IntRect&); 148 void setCompositedBounds(const LayoutRect&);
149 void updateCompositedBounds(); 149 void updateCompositedBounds();
150 150
151 void updateAfterWidgetResize(); 151 void updateAfterWidgetResize();
152 void positionOverflowControlsLayers(const IntSize& offsetFromRoot); 152 void positionOverflowControlsLayers(const IntSize& offsetFromRoot);
153 bool hasUnpositionedOverflowControlsLayers() const; 153 bool hasUnpositionedOverflowControlsLayers() const;
154 154
155 // GraphicsLayerClient interface 155 // GraphicsLayerClient interface
156 virtual void notifyAnimationStarted(const GraphicsLayer*, double startTime) OVERRIDE; 156 virtual void notifyAnimationStarted(const GraphicsLayer*, double startTime) OVERRIDE;
157 157
158 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL ayerPaintingPhase, const IntRect& clip) OVERRIDE; 158 virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsL ayerPaintingPhase, const IntRect& clip) OVERRIDE;
159 159
160 virtual void didCommitChangesForLayer(const GraphicsLayer*) const OVERRIDE; 160 virtual void didCommitChangesForLayer(const GraphicsLayer*) const OVERRIDE;
161 virtual bool getCurrentTransform(const GraphicsLayer*, TransformationMatrix& ) const OVERRIDE; 161 virtual bool getCurrentTransform(const GraphicsLayer*, TransformationMatrix& ) const OVERRIDE;
162 162
163 virtual bool isTrackingRepaints() const OVERRIDE; 163 virtual bool isTrackingRepaints() const OVERRIDE;
164 164
165 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const; 165 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const;
166 166
167 #ifndef NDEBUG 167 #ifndef NDEBUG
168 virtual void verifyNotPainting(); 168 virtual void verifyNotPainting();
169 #endif 169 #endif
170 170
171 IntRect contentsBox() const; 171 LayoutRect contentsBox() const;
172 IntRect backgroundBox() const; 172 IntRect backgroundBox() const;
173 173
174 // For informative purposes only. 174 // For informative purposes only.
175 CompositingLayerType compositingLayerType() const; 175 CompositingLayerType compositingLayerType() const;
176 176
177 GraphicsLayer* layerForHorizontalScrollbar() const { return m_layerForHorizo ntalScrollbar.get(); } 177 GraphicsLayer* layerForHorizontalScrollbar() const { return m_layerForHorizo ntalScrollbar.get(); }
178 GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVertical Scrollbar.get(); } 178 GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVertical Scrollbar.get(); }
179 GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner. get(); } 179 GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner. get(); }
180 180
181 void updateFilters(const RenderStyle*); 181 void updateFilters(const RenderStyle*);
182 bool canCompositeFilters() const { return m_canCompositeFilters; } 182 bool canCompositeFilters() const { return m_canCompositeFilters; }
183 183
184 // Return an estimate of the backing store area (in pixels) allocated by thi s object's GraphicsLayers. 184 // Return an estimate of the backing store area (in pixels) allocated by thi s object's GraphicsLayers.
185 double backingStoreMemoryEstimate() const; 185 double backingStoreMemoryEstimate() const;
186 186
187 void setBlendMode(BlendMode); 187 void setBlendMode(BlendMode);
188 188
189 virtual String debugName(const GraphicsLayer*) OVERRIDE; 189 virtual String debugName(const GraphicsLayer*) OVERRIDE;
190 190
191 LayoutSize subpixelAccumulation() const { return m_subpixelAccumulation; }
191 private: 192 private:
192 void createPrimaryGraphicsLayer(); 193 void createPrimaryGraphicsLayer();
193 void destroyGraphicsLayers(); 194 void destroyGraphicsLayers();
194 195
195 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons); 196 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons);
196 197
197 RenderLayerModelObject* renderer() const { return m_owningLayer->renderer(); } 198 RenderLayerModelObject* renderer() const { return m_owningLayer->renderer(); }
198 RenderLayerCompositor* compositor() const { return m_owningLayer->compositor (); } 199 RenderLayerCompositor* compositor() const { return m_owningLayer->compositor (); }
199 200
200 void updateInternalHierarchy(); 201 void updateInternalHierarchy();
201 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); 202 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip);
202 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer); 203 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer);
203 bool updateForegroundLayer(bool needsForegroundLayer); 204 bool updateForegroundLayer(bool needsForegroundLayer);
204 bool updateBackgroundLayer(bool needsBackgroundLayer); 205 bool updateBackgroundLayer(bool needsBackgroundLayer);
205 bool updateMaskLayer(bool needsMaskLayer); 206 bool updateMaskLayer(bool needsMaskLayer);
206 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer); 207 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer);
207 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer->scroll ableArea() && m_owningLayer->scrollableArea()->horizontalScrollbar(); } 208 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer->scroll ableArea() && m_owningLayer->scrollableArea()->horizontalScrollbar(); }
208 bool requiresVerticalScrollbarLayer() const { return m_owningLayer->scrollab leArea() && m_owningLayer->scrollableArea()->verticalScrollbar(); } 209 bool requiresVerticalScrollbarLayer() const { return m_owningLayer->scrollab leArea() && m_owningLayer->scrollableArea()->verticalScrollbar(); }
209 bool requiresScrollCornerLayer() const { return m_owningLayer->scrollableAre a() && !m_owningLayer->scrollableArea()->scrollCornerAndResizerRect().isEmpty(); } 210 bool requiresScrollCornerLayer() const { return m_owningLayer->scrollableAre a() && !m_owningLayer->scrollableArea()->scrollCornerAndResizerRect().isEmpty(); }
210 bool updateScrollingLayers(bool scrollingLayers); 211 bool updateScrollingLayers(bool scrollingLayers);
211 void updateScrollParent(RenderLayer*); 212 void updateScrollParent(RenderLayer*);
212 void updateClipParent(RenderLayer*); 213 void updateClipParent(RenderLayer*);
213 void updateDrawsContent(bool isSimpleContainer); 214 void updateDrawsContent(bool isSimpleContainer);
214 void registerScrollingLayers(); 215 void registerScrollingLayers();
215 216
217 void adjustBoundsForSubPixelAccumulation(const RenderLayer* compositedAncest or, IntRect& localCompositingBounds, IntRect& relativeCompositingBounds, IntPoin t& delta);
218
216 void setBackgroundLayerPaintsFixedRootBackground(bool); 219 void setBackgroundLayerPaintsFixedRootBackground(bool);
217 220
218 GraphicsLayerPaintingPhase paintingPhaseForPrimaryLayer() const; 221 GraphicsLayerPaintingPhase paintingPhaseForPrimaryLayer() const;
219 222
220 IntSize contentOffsetInCompostingLayer() const; 223 LayoutSize contentOffsetInCompostingLayer() const;
221 // Result is transform origin in pixels. 224 // Result is transform origin in pixels.
222 FloatPoint3D computeTransformOrigin(const IntRect& borderBox) const; 225 FloatPoint3D computeTransformOrigin(const IntRect& borderBox) const;
223 // Result is perspective origin in pixels. 226 // Result is perspective origin in pixels.
224 FloatPoint computePerspectiveOrigin(const IntRect& borderBox) const; 227 FloatPoint computePerspectiveOrigin(const IntRect& borderBox) const;
225 228
226 void updateOpacity(const RenderStyle*); 229 void updateOpacity(const RenderStyle*);
227 void updateTransform(const RenderStyle*); 230 void updateTransform(const RenderStyle*);
228 void updateLayerBlendMode(const RenderStyle*); 231 void updateLayerBlendMode(const RenderStyle*);
229 // Return the opacity value that this layer should use for compositing. 232 // Return the opacity value that this layer should use for compositing.
230 float compositingOpacity(float rendererOpacity) const; 233 float compositingOpacity(float rendererOpacity) const;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 // the background layer (or repainting). 324 // the background layer (or repainting).
322 OwnPtr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately. 325 OwnPtr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately.
323 OwnPtr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately. 326 OwnPtr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately.
324 327
325 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar; 328 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar;
326 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar; 329 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar;
327 OwnPtr<GraphicsLayer> m_layerForScrollCorner; 330 OwnPtr<GraphicsLayer> m_layerForScrollCorner;
328 331
329 OwnPtr<WebAnimationProvider> m_animationProvider; 332 OwnPtr<WebAnimationProvider> m_animationProvider;
330 333
331 IntRect m_compositedBounds; 334 LayoutRect m_compositedBounds;
335 LayoutSize m_subpixelAccumulation; // The accumulated subpixel offset of the compositedBounds compared to absolute coordinates.
332 336
333 bool m_artificiallyInflatedBounds; // bounds had to be made non-zero to make transform-origin work 337 bool m_artificiallyInflatedBounds; // bounds had to be made non-zero to make transform-origin work
334 bool m_boundsConstrainedByClipping; 338 bool m_boundsConstrainedByClipping;
335 bool m_isMainFrameRenderViewLayer; 339 bool m_isMainFrameRenderViewLayer;
336 bool m_requiresOwnBackingStoreForIntrinsicReasons; 340 bool m_requiresOwnBackingStoreForIntrinsicReasons;
337 bool m_requiresOwnBackingStoreForAncestorReasons; 341 bool m_requiresOwnBackingStoreForAncestorReasons;
338 bool m_canCompositeFilters; 342 bool m_canCompositeFilters;
339 bool m_backgroundLayerPaintsFixedRootBackground; 343 bool m_backgroundLayerPaintsFixedRootBackground;
340 }; 344 };
341 345
342 } // namespace WebCore 346 } // namespace WebCore
343 347
344 #endif // CompositedLayerMapping_h 348 #endif // CompositedLayerMapping_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698