OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/damage_tracker.h" | 5 #include "cc/trees/damage_tracker.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 328 |
329 bool surface_is_new = false; | 329 bool surface_is_new = false; |
330 RectMapData& data = RectDataForLayer(layer->id(), &surface_is_new); | 330 RectMapData& data = RectDataForLayer(layer->id(), &surface_is_new); |
331 gfx::Rect old_surface_rect = data.rect_; | 331 gfx::Rect old_surface_rect = data.rect_; |
332 | 332 |
333 // The drawableContextRect() already includes the replica if it exists. | 333 // The drawableContextRect() already includes the replica if it exists. |
334 gfx::Rect surface_rect_in_target_space = | 334 gfx::Rect surface_rect_in_target_space = |
335 gfx::ToEnclosingRect(render_surface->DrawableContentRect()); | 335 gfx::ToEnclosingRect(render_surface->DrawableContentRect()); |
336 data.Update(surface_rect_in_target_space, mailboxId_); | 336 data.Update(surface_rect_in_target_space, mailboxId_); |
337 | 337 |
338 gfx::Rect damage_rect_in_local_space; | |
339 if (surface_is_new || render_surface->SurfacePropertyChanged()) { | 338 if (surface_is_new || render_surface->SurfacePropertyChanged()) { |
340 // The entire surface contributes damage. | 339 // The entire surface contributes damage. |
341 damage_rect_in_local_space = render_surface->content_rect(); | 340 target_damage_rect->Union(surface_rect_in_target_space); |
342 | 341 |
343 // The surface's old region is now exposed on the target surface, too. | 342 // The surface's old region is now exposed on the target surface, too. |
344 target_damage_rect->Union(old_surface_rect); | 343 target_damage_rect->Union(old_surface_rect); |
345 } else { | 344 } else { |
346 // Only the surface's damage_rect will damage the target surface. | 345 // Only the surface's damage_rect will damage the target surface. |
347 damage_rect_in_local_space = | 346 gfx::Rect damage_rect_in_local_space = |
348 render_surface->damage_tracker()->current_damage_rect(); | 347 render_surface->damage_tracker()->current_damage_rect(); |
349 } | |
350 | 348 |
351 // If there was damage, transform it to target space, and possibly contribute | 349 // If there was damage, transform it to target space, and possibly |
352 // its reflection if needed. | 350 // contribute its reflection if needed. |
353 if (!damage_rect_in_local_space.IsEmpty()) { | 351 if (!damage_rect_in_local_space.IsEmpty()) { |
354 const gfx::Transform& draw_transform = render_surface->draw_transform(); | 352 const gfx::Transform& draw_transform = render_surface->draw_transform(); |
355 gfx::Rect damage_rect_in_target_space = MathUtil::MapEnclosingClippedRect( | 353 gfx::Rect damage_rect_in_target_space = MathUtil::MapEnclosingClippedRect( |
356 draw_transform, damage_rect_in_local_space); | 354 draw_transform, damage_rect_in_local_space); |
357 target_damage_rect->Union(damage_rect_in_target_space); | 355 target_damage_rect->Union(damage_rect_in_target_space); |
358 | 356 |
359 if (layer->replica_layer()) { | 357 if (layer->replica_layer()) { |
360 const gfx::Transform& replica_draw_transform = | 358 const gfx::Transform& replica_draw_transform = |
361 render_surface->replica_draw_transform(); | 359 render_surface->replica_draw_transform(); |
362 target_damage_rect->Union(MathUtil::MapEnclosingClippedRect( | 360 target_damage_rect->Union(MathUtil::MapEnclosingClippedRect( |
363 replica_draw_transform, damage_rect_in_local_space)); | 361 replica_draw_transform, damage_rect_in_local_space)); |
| 362 } |
364 } | 363 } |
365 } | 364 } |
366 | 365 |
367 // If there was damage on the replica's mask, then the target surface receives | 366 // If there was damage on the replica's mask, then the target surface receives |
368 // that damage as well. | 367 // that damage as well. |
369 if (layer->replica_layer() && layer->replica_layer()->mask_layer()) { | 368 if (layer->replica_layer() && layer->replica_layer()->mask_layer()) { |
370 LayerImpl* replica_mask_layer = layer->replica_layer()->mask_layer(); | 369 LayerImpl* replica_mask_layer = layer->replica_layer()->mask_layer(); |
371 | 370 |
372 bool replica_is_new = false; | 371 bool replica_is_new = false; |
373 RectMapData& data = | 372 RectMapData& data = |
(...skipping 20 matching lines...) Expand all Loading... |
394 // one in them. This means we need to redraw any pixels in the surface being | 393 // one in them. This means we need to redraw any pixels in the surface being |
395 // used for the blur in this layer this frame. | 394 // used for the blur in this layer this frame. |
396 if (layer->background_filters().HasFilterThatMovesPixels()) { | 395 if (layer->background_filters().HasFilterThatMovesPixels()) { |
397 ExpandDamageRectInsideRectWithFilters(target_damage_rect, | 396 ExpandDamageRectInsideRectWithFilters(target_damage_rect, |
398 surface_rect_in_target_space, | 397 surface_rect_in_target_space, |
399 layer->background_filters()); | 398 layer->background_filters()); |
400 } | 399 } |
401 } | 400 } |
402 | 401 |
403 } // namespace cc | 402 } // namespace cc |
OLD | NEW |