| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/occlusion_tracker.h" | 5 #include "cc/trees/occlusion_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 &stack_.back().occlusion_from_outside_target); | 328 &stack_.back().occlusion_from_outside_target); |
| 329 } | 329 } |
| 330 | 330 |
| 331 void OcclusionTracker::MarkOccludedBehindLayer(const LayerImpl* layer) { | 331 void OcclusionTracker::MarkOccludedBehindLayer(const LayerImpl* layer) { |
| 332 DCHECK(!stack_.empty()); | 332 DCHECK(!stack_.empty()); |
| 333 DCHECK_EQ(layer->render_target(), stack_.back().target); | 333 DCHECK_EQ(layer->render_target(), stack_.back().target); |
| 334 | 334 |
| 335 if (layer->draw_opacity() < 1) | 335 if (layer->draw_opacity() < 1) |
| 336 return; | 336 return; |
| 337 | 337 |
| 338 // The only currently supported draw_blend_mode is SrcOver mode, so | |
| 339 // draw_blend_mode does not affect occlusion. | |
| 340 DCHECK_EQ(layer->draw_blend_mode(), SkBlendMode::kSrcOver); | |
| 341 | |
| 342 if (layer->Is3dSorted()) | 338 if (layer->Is3dSorted()) |
| 343 return; | 339 return; |
| 344 | 340 |
| 345 SimpleEnclosedRegion opaque_layer_region = layer->VisibleOpaqueRegion(); | 341 SimpleEnclosedRegion opaque_layer_region = layer->VisibleOpaqueRegion(); |
| 346 if (opaque_layer_region.IsEmpty()) | 342 if (opaque_layer_region.IsEmpty()) |
| 347 return; | 343 return; |
| 348 | 344 |
| 349 DCHECK(layer->visible_layer_rect().Contains(opaque_layer_region.bounds())); | 345 DCHECK(layer->visible_layer_rect().Contains(opaque_layer_region.bounds())); |
| 350 | 346 |
| 351 gfx::Transform draw_transform = layer->DrawTransform(); | 347 gfx::Transform draw_transform = layer->DrawTransform(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 378 DCHECK(layer_tree->RootRenderSurface() == stack_.back().target); | 374 DCHECK(layer_tree->RootRenderSurface() == stack_.back().target); |
| 379 const SimpleEnclosedRegion& occluded = | 375 const SimpleEnclosedRegion& occluded = |
| 380 stack_.back().occlusion_from_inside_target; | 376 stack_.back().occlusion_from_inside_target; |
| 381 Region visible_region(screen_space_clip_rect_); | 377 Region visible_region(screen_space_clip_rect_); |
| 382 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) | 378 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) |
| 383 visible_region.Subtract(occluded.GetRect(i)); | 379 visible_region.Subtract(occluded.GetRect(i)); |
| 384 return visible_region; | 380 return visible_region; |
| 385 } | 381 } |
| 386 | 382 |
| 387 } // namespace cc | 383 } // namespace cc |
| OLD | NEW |