| Index: cc/damage_tracker.cc
|
| diff --git a/cc/damage_tracker.cc b/cc/damage_tracker.cc
|
| index 400fe5fefbdef7292550e1d2613406fbd0953f0f..103449f7fb5b64dd8f8f55d4f1c51e1e4b882a14 100644
|
| --- a/cc/damage_tracker.cc
|
| +++ b/cc/damage_tracker.cc
|
| @@ -32,26 +32,25 @@ DamageTracker::~DamageTracker()
|
| {
|
| }
|
|
|
| -static inline void expandRectWithFilters(FloatRect& rect, const WebKit::WebFilterOperations& filters)
|
| +static inline void expandRectWithFilters(gfx::RectF& rect, const WebKit::WebFilterOperations& filters)
|
| {
|
| int top, right, bottom, left;
|
| filters.getOutsets(top, right, bottom, left);
|
| - rect.move(-left, -top);
|
| - rect.expand(left + right, top + bottom);
|
| + rect.Inset(-left, -top, -right, -bottom);
|
| }
|
|
|
| -static inline void expandDamageRectInsideRectWithFilters(FloatRect& damageRect, const FloatRect& preFilterRect, const WebKit::WebFilterOperations& filters)
|
| +static inline void expandDamageRectInsideRectWithFilters(gfx::RectF& damageRect, const gfx::RectF& preFilterRect, const WebKit::WebFilterOperations& filters)
|
| {
|
| - FloatRect expandedDamageRect = damageRect;
|
| + gfx::RectF expandedDamageRect = damageRect;
|
| expandRectWithFilters(expandedDamageRect, filters);
|
| - FloatRect filterRect = preFilterRect;
|
| + gfx::RectF filterRect = preFilterRect;
|
| expandRectWithFilters(filterRect, filters);
|
|
|
| - expandedDamageRect.intersect(filterRect);
|
| - damageRect.unite(expandedDamageRect);
|
| + expandedDamageRect.Intersect(filterRect);
|
| + damageRect.Union(expandedDamageRect);
|
| }
|
|
|
| -void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& layerList, int targetSurfaceLayerID, bool targetSurfacePropertyChangedOnlyFromDescendant, const IntRect& targetSurfaceContentRect, LayerImpl* targetSurfaceMaskLayer, const WebKit::WebFilterOperations& filters, SkImageFilter* filter)
|
| +void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& layerList, int targetSurfaceLayerID, bool targetSurfacePropertyChangedOnlyFromDescendant, const gfx::Rect& targetSurfaceContentRect, LayerImpl* targetSurfaceMaskLayer, const WebKit::WebFilterOperations& filters, SkImageFilter* filter)
|
| {
|
| //
|
| // This function computes the "damage rect" of a target surface, and updates the state
|
| @@ -119,11 +118,11 @@ void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& lay
|
| // These functions cannot be bypassed with early-exits, even if we know what the
|
| // damage will be for this frame, because we need to update the damage tracker state
|
| // to correctly track the next frame.
|
| - FloatRect damageFromActiveLayers = trackDamageFromActiveLayers(layerList, targetSurfaceLayerID);
|
| - FloatRect damageFromSurfaceMask = trackDamageFromSurfaceMask(targetSurfaceMaskLayer);
|
| - FloatRect damageFromLeftoverRects = trackDamageFromLeftoverRects();
|
| + gfx::RectF damageFromActiveLayers = trackDamageFromActiveLayers(layerList, targetSurfaceLayerID);
|
| + gfx::RectF damageFromSurfaceMask = trackDamageFromSurfaceMask(targetSurfaceMaskLayer);
|
| + gfx::RectF damageFromLeftoverRects = trackDamageFromLeftoverRects();
|
|
|
| - FloatRect damageRectForThisUpdate;
|
| + gfx::RectF damageRectForThisUpdate;
|
|
|
| if (m_forceFullDamageNextUpdate || targetSurfacePropertyChangedOnlyFromDescendant) {
|
| damageRectForThisUpdate = targetSurfaceContentRect;
|
| @@ -131,8 +130,8 @@ void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& lay
|
| } else {
|
| // FIXME: can we clamp this damage to the surface's content rect? (affects performance, but not correctness)
|
| damageRectForThisUpdate = damageFromActiveLayers;
|
| - damageRectForThisUpdate.uniteIfNonZero(damageFromSurfaceMask);
|
| - damageRectForThisUpdate.uniteIfNonZero(damageFromLeftoverRects);
|
| + damageRectForThisUpdate.Union(damageFromSurfaceMask);
|
| + damageRectForThisUpdate.Union(damageFromLeftoverRects);
|
|
|
| if (filters.hasFilterThatMovesPixels()) {
|
| expandRectWithFilters(damageRectForThisUpdate, filters);
|
| @@ -144,7 +143,7 @@ void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& lay
|
| }
|
|
|
| // Damage accumulates until we are notified that we actually did draw on that frame.
|
| - m_currentDamageRect.uniteIfNonZero(damageRectForThisUpdate);
|
| + m_currentDamageRect.Union(damageRectForThisUpdate);
|
|
|
| // The next history map becomes the current map for the next frame. Note this must
|
| // happen every frame to correctly track changes, even if damage accumulates over
|
| @@ -152,19 +151,19 @@ void DamageTracker::updateDamageTrackingState(const std::vector<LayerImpl*>& lay
|
| swap(m_currentRectHistory, m_nextRectHistory);
|
| }
|
|
|
| -FloatRect DamageTracker::removeRectFromCurrentFrame(int layerID, bool& layerIsNew)
|
| +gfx::RectF DamageTracker::removeRectFromCurrentFrame(int layerID, bool& layerIsNew)
|
| {
|
| RectMap::iterator iter = m_currentRectHistory->find(layerID);
|
| layerIsNew = iter == m_currentRectHistory->end();
|
| if (layerIsNew)
|
| - return FloatRect();
|
| + return gfx::RectF();
|
|
|
| - FloatRect ret = iter->second;
|
| + gfx::RectF ret = iter->second;
|
| m_currentRectHistory->erase(iter);
|
| return ret;
|
| }
|
|
|
| -void DamageTracker::saveRectForNextFrame(int layerID, const FloatRect& targetSpaceRect)
|
| +void DamageTracker::saveRectForNextFrame(int layerID, const gfx::RectF& targetSpaceRect)
|
| {
|
| // This layer should not yet exist in next frame's history.
|
| DCHECK(layerID > 0);
|
| @@ -172,9 +171,9 @@ void DamageTracker::saveRectForNextFrame(int layerID, const FloatRect& targetSpa
|
| (*m_nextRectHistory)[layerID] = targetSpaceRect;
|
| }
|
|
|
| -FloatRect DamageTracker::trackDamageFromActiveLayers(const std::vector<LayerImpl*>& layerList, int targetSurfaceLayerID)
|
| +gfx::RectF DamageTracker::trackDamageFromActiveLayers(const std::vector<LayerImpl*>& layerList, int targetSurfaceLayerID)
|
| {
|
| - FloatRect damageRect = FloatRect();
|
| + gfx::RectF damageRect = gfx::RectF();
|
|
|
| for (unsigned layerIndex = 0; layerIndex < layerList.size(); ++layerIndex) {
|
| // Visit layers in back-to-front order.
|
| @@ -189,9 +188,9 @@ FloatRect DamageTracker::trackDamageFromActiveLayers(const std::vector<LayerImpl
|
| return damageRect;
|
| }
|
|
|
| -FloatRect DamageTracker::trackDamageFromSurfaceMask(LayerImpl* targetSurfaceMaskLayer)
|
| +gfx::RectF DamageTracker::trackDamageFromSurfaceMask(LayerImpl* targetSurfaceMaskLayer)
|
| {
|
| - FloatRect damageRect = FloatRect();
|
| + gfx::RectF damageRect = gfx::RectF();
|
|
|
| if (!targetSurfaceMaskLayer)
|
| return damageRect;
|
| @@ -199,22 +198,22 @@ FloatRect DamageTracker::trackDamageFromSurfaceMask(LayerImpl* targetSurfaceMask
|
| // Currently, if there is any change to the mask, we choose to damage the entire
|
| // surface. This could potentially be optimized later, but it is not expected to be a
|
| // common case.
|
| - if (targetSurfaceMaskLayer->layerPropertyChanged() || !targetSurfaceMaskLayer->updateRect().isEmpty())
|
| - damageRect = FloatRect(FloatPoint::zero(), FloatSize(targetSurfaceMaskLayer->bounds()));
|
| + if (targetSurfaceMaskLayer->layerPropertyChanged() || !targetSurfaceMaskLayer->updateRect().IsEmpty())
|
| + damageRect = gfx::RectF(gfx::PointF(), targetSurfaceMaskLayer->bounds());
|
|
|
| return damageRect;
|
| }
|
|
|
| -FloatRect DamageTracker::trackDamageFromLeftoverRects()
|
| +gfx::RectF DamageTracker::trackDamageFromLeftoverRects()
|
| {
|
| // After computing damage for all active layers, any leftover items in the current
|
| // rect history correspond to layers/surfaces that no longer exist. So, these regions
|
| // are now exposed on the target surface.
|
|
|
| - FloatRect damageRect = FloatRect();
|
| + gfx::RectF damageRect = gfx::RectF();
|
|
|
| for (RectMap::iterator it = m_currentRectHistory->begin(); it != m_currentRectHistory->end(); ++it)
|
| - damageRect.unite(it->second);
|
| + damageRect.Union(it->second);
|
|
|
| m_currentRectHistory->clear();
|
|
|
| @@ -233,7 +232,7 @@ static bool layerNeedsToRedrawOntoItsTargetSurface(LayerImpl* layer)
|
| return layer->layerPropertyChanged() || layer->layerSurfacePropertyChanged();
|
| }
|
|
|
| -void DamageTracker::extendDamageForLayer(LayerImpl* layer, FloatRect& targetDamageRect)
|
| +void DamageTracker::extendDamageForLayer(LayerImpl* layer, gfx::RectF& targetDamageRect)
|
| {
|
| // There are two ways that a layer can damage a region of the target surface:
|
| // 1. Property change (e.g. opacity, position, transforms):
|
| @@ -252,28 +251,28 @@ void DamageTracker::extendDamageForLayer(LayerImpl* layer, FloatRect& targetDama
|
| // extendDamageForRenderSurface() must be called instead.
|
|
|
| bool layerIsNew = false;
|
| - FloatRect oldRectInTargetSpace = removeRectFromCurrentFrame(layer->id(), layerIsNew);
|
| + gfx::RectF oldRectInTargetSpace = removeRectFromCurrentFrame(layer->id(), layerIsNew);
|
|
|
| - FloatRect rectInTargetSpace = MathUtil::mapClippedRect(layer->drawTransform(), FloatRect(FloatPoint::zero(), layer->contentBounds()));
|
| + gfx::RectF rectInTargetSpace = MathUtil::mapClippedRect(layer->drawTransform(), gfx::RectF(FloatPoint(), layer->contentBounds()));
|
| saveRectForNextFrame(layer->id(), rectInTargetSpace);
|
|
|
| if (layerIsNew || layerNeedsToRedrawOntoItsTargetSurface(layer)) {
|
| // If a layer is new or has changed, then its entire layer rect affects the target surface.
|
| - targetDamageRect.uniteIfNonZero(rectInTargetSpace);
|
| + targetDamageRect.Union(rectInTargetSpace);
|
|
|
| // The layer's old region is now exposed on the target surface, too.
|
| // Note oldRectInTargetSpace is already in target space.
|
| - targetDamageRect.uniteIfNonZero(oldRectInTargetSpace);
|
| - } else if (!layer->updateRect().isEmpty()) {
|
| + targetDamageRect.Union(oldRectInTargetSpace);
|
| + } else if (!layer->updateRect().IsEmpty()) {
|
| // If the layer properties haven't changed, then the the target surface is only
|
| // affected by the layer's update area, which could be empty.
|
| - FloatRect updateContentRect = layer->layerRectToContentRect(layer->updateRect());
|
| - FloatRect updateRectInTargetSpace = MathUtil::mapClippedRect(layer->drawTransform(), updateContentRect);
|
| - targetDamageRect.uniteIfNonZero(updateRectInTargetSpace);
|
| + gfx::RectF updateContentRect = layer->layerRectToContentRect(layer->updateRect());
|
| + gfx::RectF updateRectInTargetSpace = MathUtil::mapClippedRect(layer->drawTransform(), updateContentRect);
|
| + targetDamageRect.Union(updateRectInTargetSpace);
|
| }
|
| }
|
|
|
| -void DamageTracker::extendDamageForRenderSurface(LayerImpl* layer, FloatRect& targetDamageRect)
|
| +void DamageTracker::extendDamageForRenderSurface(LayerImpl* layer, gfx::RectF& targetDamageRect)
|
| {
|
| // There are two ways a "descendant surface" can damage regions of the "target surface":
|
| // 1. Property change:
|
| @@ -290,32 +289,32 @@ void DamageTracker::extendDamageForRenderSurface(LayerImpl* layer, FloatRect& ta
|
| RenderSurfaceImpl* renderSurface = layer->renderSurface();
|
|
|
| bool surfaceIsNew = false;
|
| - FloatRect oldSurfaceRect = removeRectFromCurrentFrame(layer->id(), surfaceIsNew);
|
| + gfx::RectF oldSurfaceRect = removeRectFromCurrentFrame(layer->id(), surfaceIsNew);
|
|
|
| - FloatRect surfaceRectInTargetSpace = renderSurface->drawableContentRect(); // already includes replica if it exists.
|
| + gfx::RectF surfaceRectInTargetSpace = renderSurface->drawableContentRect(); // already includes replica if it exists.
|
| saveRectForNextFrame(layer->id(), surfaceRectInTargetSpace);
|
|
|
| - FloatRect damageRectInLocalSpace;
|
| + gfx::RectF damageRectInLocalSpace;
|
| if (surfaceIsNew || renderSurface->surfacePropertyChanged() || layer->layerSurfacePropertyChanged()) {
|
| // The entire surface contributes damage.
|
| damageRectInLocalSpace = renderSurface->contentRect();
|
|
|
| // The surface's old region is now exposed on the target surface, too.
|
| - targetDamageRect.uniteIfNonZero(oldSurfaceRect);
|
| + targetDamageRect.Union(oldSurfaceRect);
|
| } else {
|
| // Only the surface's damageRect will damage the target surface.
|
| damageRectInLocalSpace = renderSurface->damageTracker()->currentDamageRect();
|
| }
|
|
|
| // If there was damage, transform it to target space, and possibly contribute its reflection if needed.
|
| - if (!damageRectInLocalSpace.isEmpty()) {
|
| + if (!damageRectInLocalSpace.IsEmpty()) {
|
| const WebTransformationMatrix& drawTransform = renderSurface->drawTransform();
|
| - FloatRect damageRectInTargetSpace = MathUtil::mapClippedRect(drawTransform, damageRectInLocalSpace);
|
| - targetDamageRect.uniteIfNonZero(damageRectInTargetSpace);
|
| + gfx::RectF damageRectInTargetSpace = MathUtil::mapClippedRect(drawTransform, damageRectInLocalSpace);
|
| + targetDamageRect.Union(damageRectInTargetSpace);
|
|
|
| if (layer->replicaLayer()) {
|
| const WebTransformationMatrix& replicaDrawTransform = renderSurface->replicaDrawTransform();
|
| - targetDamageRect.uniteIfNonZero(MathUtil::mapClippedRect(replicaDrawTransform, damageRectInLocalSpace));
|
| + targetDamageRect.Union(MathUtil::mapClippedRect(replicaDrawTransform, damageRectInLocalSpace));
|
| }
|
| }
|
|
|
| @@ -327,12 +326,12 @@ void DamageTracker::extendDamageForRenderSurface(LayerImpl* layer, FloatRect& ta
|
| removeRectFromCurrentFrame(replicaMaskLayer->id(), replicaIsNew);
|
|
|
| const WebTransformationMatrix& replicaDrawTransform = renderSurface->replicaDrawTransform();
|
| - FloatRect replicaMaskLayerRect = MathUtil::mapClippedRect(replicaDrawTransform, FloatRect(FloatPoint::zero(), FloatSize(replicaMaskLayer->bounds().width(), replicaMaskLayer->bounds().height())));
|
| + gfx::RectF replicaMaskLayerRect = MathUtil::mapClippedRect(replicaDrawTransform, gfx::RectF(FloatPoint(), FloatSize(replicaMaskLayer->bounds().width(), replicaMaskLayer->bounds().height())));
|
| saveRectForNextFrame(replicaMaskLayer->id(), replicaMaskLayerRect);
|
|
|
| // In the current implementation, a change in the replica mask damages the entire replica region.
|
| - if (replicaIsNew || replicaMaskLayer->layerPropertyChanged() || !replicaMaskLayer->updateRect().isEmpty())
|
| - targetDamageRect.uniteIfNonZero(replicaMaskLayerRect);
|
| + if (replicaIsNew || replicaMaskLayer->layerPropertyChanged() || !replicaMaskLayer->updateRect().IsEmpty())
|
| + targetDamageRect.Union(replicaMaskLayerRect);
|
| }
|
|
|
| // If the layer has a background filter, this may cause pixels in our surface to be expanded, so we will need to expand any damage
|
|
|