Chromium Code Reviews| 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/layers/render_surface_impl.h" | 5 #include "cc/layers/render_surface_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 #include "cc/trees/occlusion.h" | 26 #include "cc/trees/occlusion.h" |
| 27 #include "cc/trees/transform_node.h" | 27 #include "cc/trees/transform_node.h" |
| 28 #include "third_party/skia/include/core/SkImageFilter.h" | 28 #include "third_party/skia/include/core/SkImageFilter.h" |
| 29 #include "ui/gfx/geometry/rect_conversions.h" | 29 #include "ui/gfx/geometry/rect_conversions.h" |
| 30 #include "ui/gfx/transform.h" | 30 #include "ui/gfx/transform.h" |
| 31 | 31 |
| 32 namespace cc { | 32 namespace cc { |
| 33 | 33 |
| 34 RenderSurfaceImpl::RenderSurfaceImpl(LayerImpl* owning_layer) | 34 RenderSurfaceImpl::RenderSurfaceImpl(LayerImpl* owning_layer) |
| 35 : owning_layer_(owning_layer), | 35 : owning_layer_(owning_layer), |
| 36 layer_tree_impl_(owning_layer->layer_tree_impl()), | |
| 37 stable_effect_node_id_(owning_layer->id()), | |
|
jaydasika
2016/10/31 23:12:00
nit : The node in 'stable_effect_node_id' is confu
ajuma
2016/10/31 23:26:00
Done.
| |
| 36 surface_property_changed_(false), | 38 surface_property_changed_(false), |
| 37 ancestor_property_changed_(false), | 39 ancestor_property_changed_(false), |
| 38 contributes_to_drawn_surface_(false), | 40 contributes_to_drawn_surface_(false), |
| 39 nearest_occlusion_immune_ancestor_(nullptr), | 41 nearest_occlusion_immune_ancestor_(nullptr), |
| 40 target_render_surface_layer_index_history_(0), | 42 target_render_surface_layer_index_history_(0), |
| 41 current_layer_index_history_(0) { | 43 current_layer_index_history_(0) { |
| 42 damage_tracker_ = DamageTracker::Create(); | 44 damage_tracker_ = DamageTracker::Create(); |
| 43 } | 45 } |
| 44 | 46 |
| 45 RenderSurfaceImpl::~RenderSurfaceImpl() {} | 47 RenderSurfaceImpl::~RenderSurfaceImpl() {} |
| 46 | 48 |
| 47 RenderSurfaceImpl* RenderSurfaceImpl::render_target() { | 49 RenderSurfaceImpl* RenderSurfaceImpl::render_target() { |
| 48 EffectTree& effect_tree = | 50 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
| 49 owning_layer_->layer_tree_impl()->property_trees()->effect_tree; | |
| 50 EffectNode* node = effect_tree.Node(EffectTreeIndex()); | 51 EffectNode* node = effect_tree.Node(EffectTreeIndex()); |
| 51 EffectNode* target_node = effect_tree.Node(node->target_id); | 52 EffectNode* target_node = effect_tree.Node(node->target_id); |
| 52 if (target_node->id != 0) | 53 if (target_node->id != 0) |
| 53 return target_node->render_surface; | 54 return target_node->render_surface; |
| 54 else | 55 else |
| 55 return this; | 56 return this; |
| 56 } | 57 } |
| 57 | 58 |
| 58 const RenderSurfaceImpl* RenderSurfaceImpl::render_target() const { | 59 const RenderSurfaceImpl* RenderSurfaceImpl::render_target() const { |
| 59 const EffectTree& effect_tree = | 60 const EffectTree& effect_tree = |
| 60 owning_layer_->layer_tree_impl()->property_trees()->effect_tree; | 61 layer_tree_impl_->property_trees()->effect_tree; |
| 61 const EffectNode* node = effect_tree.Node(EffectTreeIndex()); | 62 const EffectNode* node = effect_tree.Node(EffectTreeIndex()); |
| 62 const EffectNode* target_node = effect_tree.Node(node->target_id); | 63 const EffectNode* target_node = effect_tree.Node(node->target_id); |
| 63 if (target_node->id != 0) | 64 if (target_node->id != 0) |
| 64 return target_node->render_surface; | 65 return target_node->render_surface; |
| 65 else | 66 else |
| 66 return this; | 67 return this; |
| 67 } | 68 } |
| 68 | 69 |
| 69 RenderSurfaceImpl::DrawProperties::DrawProperties() { | 70 RenderSurfaceImpl::DrawProperties::DrawProperties() { |
| 70 draw_opacity = 1.f; | 71 draw_opacity = 1.f; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 | 111 |
| 111 bool RenderSurfaceImpl::UsesDefaultBlendMode() const { | 112 bool RenderSurfaceImpl::UsesDefaultBlendMode() const { |
| 112 return BlendMode() == SkXfermode::kSrcOver_Mode; | 113 return BlendMode() == SkXfermode::kSrcOver_Mode; |
| 113 } | 114 } |
| 114 | 115 |
| 115 SkColor RenderSurfaceImpl::GetDebugBorderColor() const { | 116 SkColor RenderSurfaceImpl::GetDebugBorderColor() const { |
| 116 return DebugColors::SurfaceBorderColor(); | 117 return DebugColors::SurfaceBorderColor(); |
| 117 } | 118 } |
| 118 | 119 |
| 119 float RenderSurfaceImpl::GetDebugBorderWidth() const { | 120 float RenderSurfaceImpl::GetDebugBorderWidth() const { |
| 120 return DebugColors::SurfaceBorderWidth(owning_layer_->layer_tree_impl()); | 121 return DebugColors::SurfaceBorderWidth(layer_tree_impl_); |
| 121 } | |
| 122 | |
| 123 int RenderSurfaceImpl::OwningLayerId() const { | |
| 124 return owning_layer_ ? owning_layer_->id() : 0; | |
| 125 } | 122 } |
| 126 | 123 |
| 127 LayerImpl* RenderSurfaceImpl::MaskLayer() { | 124 LayerImpl* RenderSurfaceImpl::MaskLayer() { |
| 128 int mask_layer_id = OwningEffectNode()->mask_layer_id; | 125 int mask_layer_id = OwningEffectNode()->mask_layer_id; |
| 129 return owning_layer_->layer_tree_impl()->LayerById(mask_layer_id); | 126 return layer_tree_impl_->LayerById(mask_layer_id); |
| 130 } | 127 } |
| 131 | 128 |
| 132 bool RenderSurfaceImpl::HasMask() const { | 129 bool RenderSurfaceImpl::HasMask() const { |
| 133 return OwningEffectNode()->mask_layer_id != EffectTree::kInvalidNodeId; | 130 return OwningEffectNode()->mask_layer_id != EffectTree::kInvalidNodeId; |
| 134 } | 131 } |
| 135 | 132 |
| 136 const FilterOperations& RenderSurfaceImpl::Filters() const { | 133 const FilterOperations& RenderSurfaceImpl::Filters() const { |
| 137 return OwningEffectNode()->filters; | 134 return OwningEffectNode()->filters; |
| 138 } | 135 } |
| 139 | 136 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 155 | 152 |
| 156 int RenderSurfaceImpl::TransformTreeIndex() const { | 153 int RenderSurfaceImpl::TransformTreeIndex() const { |
| 157 return owning_layer_->transform_tree_index(); | 154 return owning_layer_->transform_tree_index(); |
| 158 } | 155 } |
| 159 | 156 |
| 160 int RenderSurfaceImpl::ClipTreeIndex() const { | 157 int RenderSurfaceImpl::ClipTreeIndex() const { |
| 161 return owning_layer_->clip_tree_index(); | 158 return owning_layer_->clip_tree_index(); |
| 162 } | 159 } |
| 163 | 160 |
| 164 int RenderSurfaceImpl::EffectTreeIndex() const { | 161 int RenderSurfaceImpl::EffectTreeIndex() const { |
| 165 return owning_layer_->effect_tree_index(); | 162 return layer_tree_impl_->property_trees() |
| 163 ->effect_id_to_index_map[stable_effect_node_id_]; | |
| 166 } | 164 } |
| 167 | 165 |
| 168 const EffectNode* RenderSurfaceImpl::OwningEffectNode() const { | 166 const EffectNode* RenderSurfaceImpl::OwningEffectNode() const { |
| 169 return owning_layer_->layer_tree_impl()->property_trees()->effect_tree.Node( | 167 return layer_tree_impl_->property_trees()->effect_tree.Node( |
| 170 EffectTreeIndex()); | 168 EffectTreeIndex()); |
| 171 } | 169 } |
| 172 | 170 |
| 173 void RenderSurfaceImpl::SetClipRect(const gfx::Rect& clip_rect) { | 171 void RenderSurfaceImpl::SetClipRect(const gfx::Rect& clip_rect) { |
| 174 if (clip_rect == draw_properties_.clip_rect) | 172 if (clip_rect == draw_properties_.clip_rect) |
| 175 return; | 173 return; |
| 176 | 174 |
| 177 surface_property_changed_ = true; | 175 surface_property_changed_ = true; |
| 178 draw_properties_.clip_rect = clip_rect; | 176 draw_properties_.clip_rect = clip_rect; |
| 179 } | 177 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 245 std::min(surface_content_rect.width(), max_texture_size)); | 243 std::min(surface_content_rect.width(), max_texture_size)); |
| 246 surface_content_rect.set_height( | 244 surface_content_rect.set_height( |
| 247 std::min(surface_content_rect.height(), max_texture_size)); | 245 std::min(surface_content_rect.height(), max_texture_size)); |
| 248 | 246 |
| 249 SetContentRect(surface_content_rect); | 247 SetContentRect(surface_content_rect); |
| 250 } | 248 } |
| 251 | 249 |
| 252 void RenderSurfaceImpl::SetContentRectToViewport() { | 250 void RenderSurfaceImpl::SetContentRectToViewport() { |
| 253 // Only root render surface use viewport as content rect. | 251 // Only root render surface use viewport as content rect. |
| 254 DCHECK_EQ(render_target(), this); | 252 DCHECK_EQ(render_target(), this); |
| 255 gfx::Rect viewport = gfx::ToEnclosingRect(owning_layer_->layer_tree_impl() | 253 gfx::Rect viewport = gfx::ToEnclosingRect( |
| 256 ->property_trees() | 254 layer_tree_impl_->property_trees()->clip_tree.ViewportClip()); |
| 257 ->clip_tree.ViewportClip()); | |
| 258 SetContentRect(viewport); | 255 SetContentRect(viewport); |
| 259 } | 256 } |
| 260 | 257 |
| 261 void RenderSurfaceImpl::ClearAccumulatedContentRect() { | 258 void RenderSurfaceImpl::ClearAccumulatedContentRect() { |
| 262 accumulated_content_rect_ = gfx::Rect(); | 259 accumulated_content_rect_ = gfx::Rect(); |
| 263 } | 260 } |
| 264 | 261 |
| 265 void RenderSurfaceImpl::AccumulateContentRectFromContributingLayer( | 262 void RenderSurfaceImpl::AccumulateContentRectFromContributingLayer( |
| 266 LayerImpl* layer) { | 263 LayerImpl* layer) { |
| 267 DCHECK(layer->DrawsContent()); | 264 DCHECK(layer->DrawsContent()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 // | 301 // |
| 305 DCHECK(owning_layer_); | 302 DCHECK(owning_layer_); |
| 306 return surface_property_changed_ || AncestorPropertyChanged(); | 303 return surface_property_changed_ || AncestorPropertyChanged(); |
| 307 } | 304 } |
| 308 | 305 |
| 309 bool RenderSurfaceImpl::SurfacePropertyChangedOnlyFromDescendant() const { | 306 bool RenderSurfaceImpl::SurfacePropertyChangedOnlyFromDescendant() const { |
| 310 return surface_property_changed_ && !AncestorPropertyChanged(); | 307 return surface_property_changed_ && !AncestorPropertyChanged(); |
| 311 } | 308 } |
| 312 | 309 |
| 313 bool RenderSurfaceImpl::AncestorPropertyChanged() const { | 310 bool RenderSurfaceImpl::AncestorPropertyChanged() const { |
| 314 const PropertyTrees* property_trees = | 311 const PropertyTrees* property_trees = layer_tree_impl_->property_trees(); |
| 315 owning_layer_->layer_tree_impl()->property_trees(); | |
| 316 return ancestor_property_changed_ || property_trees->full_tree_damaged || | 312 return ancestor_property_changed_ || property_trees->full_tree_damaged || |
| 317 property_trees->transform_tree.Node(TransformTreeIndex()) | 313 property_trees->transform_tree.Node(TransformTreeIndex()) |
| 318 ->transform_changed || | 314 ->transform_changed || |
| 319 property_trees->effect_tree.Node(EffectTreeIndex())->effect_changed; | 315 property_trees->effect_tree.Node(EffectTreeIndex())->effect_changed; |
| 320 } | 316 } |
| 321 | 317 |
| 322 void RenderSurfaceImpl::NoteAncestorPropertyChanged() { | 318 void RenderSurfaceImpl::NoteAncestorPropertyChanged() { |
| 323 ancestor_property_changed_ = true; | 319 ancestor_property_changed_ = true; |
| 324 } | 320 } |
| 325 | 321 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 354 SkColor debug_border_color, | 350 SkColor debug_border_color, |
| 355 float debug_border_width, | 351 float debug_border_width, |
| 356 LayerImpl* mask_layer, | 352 LayerImpl* mask_layer, |
| 357 AppendQuadsData* append_quads_data, | 353 AppendQuadsData* append_quads_data, |
| 358 RenderPassId render_pass_id) { | 354 RenderPassId render_pass_id) { |
| 359 gfx::Rect visible_layer_rect = | 355 gfx::Rect visible_layer_rect = |
| 360 occlusion_in_content_space.GetUnoccludedContentRect(content_rect()); | 356 occlusion_in_content_space.GetUnoccludedContentRect(content_rect()); |
| 361 if (visible_layer_rect.IsEmpty()) | 357 if (visible_layer_rect.IsEmpty()) |
| 362 return; | 358 return; |
| 363 | 359 |
| 364 const PropertyTrees* property_trees = | 360 const PropertyTrees* property_trees = layer_tree_impl_->property_trees(); |
| 365 owning_layer_->layer_tree_impl()->property_trees(); | |
| 366 int sorting_context_id = | 361 int sorting_context_id = |
| 367 property_trees->transform_tree.Node(TransformTreeIndex()) | 362 property_trees->transform_tree.Node(TransformTreeIndex()) |
| 368 ->sorting_context_id; | 363 ->sorting_context_id; |
| 369 SharedQuadState* shared_quad_state = | 364 SharedQuadState* shared_quad_state = |
| 370 render_pass->CreateAndAppendSharedQuadState(); | 365 render_pass->CreateAndAppendSharedQuadState(); |
| 371 shared_quad_state->SetAll( | 366 shared_quad_state->SetAll( |
| 372 draw_transform, content_rect().size(), content_rect(), | 367 draw_transform, content_rect().size(), content_rect(), |
| 373 draw_properties_.clip_rect, draw_properties_.is_clipped, | 368 draw_properties_.clip_rect, draw_properties_.is_clipped, |
| 374 draw_properties_.draw_opacity, BlendMode(), sorting_context_id); | 369 draw_properties_.draw_opacity, BlendMode(), sorting_context_id); |
| 375 | 370 |
| 376 if (owning_layer_->ShowDebugBorders()) { | 371 if (layer_tree_impl_->debug_state().show_debug_borders) { |
| 377 DebugBorderDrawQuad* debug_border_quad = | 372 DebugBorderDrawQuad* debug_border_quad = |
| 378 render_pass->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); | 373 render_pass->CreateAndAppendDrawQuad<DebugBorderDrawQuad>(); |
| 379 debug_border_quad->SetNew(shared_quad_state, content_rect(), | 374 debug_border_quad->SetNew(shared_quad_state, content_rect(), |
| 380 visible_layer_rect, debug_border_color, | 375 visible_layer_rect, debug_border_color, |
| 381 debug_border_width); | 376 debug_border_width); |
| 382 } | 377 } |
| 383 | 378 |
| 384 ResourceId mask_resource_id = 0; | 379 ResourceId mask_resource_id = 0; |
| 385 gfx::Size mask_texture_size; | 380 gfx::Size mask_texture_size; |
| 386 gfx::Vector2dF mask_uv_scale; | 381 gfx::Vector2dF mask_uv_scale; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 404 | 399 |
| 405 RenderPassDrawQuad* quad = | 400 RenderPassDrawQuad* quad = |
| 406 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 401 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 407 quad->SetNew(shared_quad_state, content_rect(), visible_layer_rect, | 402 quad->SetNew(shared_quad_state, content_rect(), visible_layer_rect, |
| 408 render_pass_id, mask_resource_id, mask_uv_scale, | 403 render_pass_id, mask_resource_id, mask_uv_scale, |
| 409 mask_texture_size, Filters(), owning_layer_to_target_scale, | 404 mask_texture_size, Filters(), owning_layer_to_target_scale, |
| 410 FiltersOrigin(), BackgroundFilters()); | 405 FiltersOrigin(), BackgroundFilters()); |
| 411 } | 406 } |
| 412 | 407 |
| 413 } // namespace cc | 408 } // namespace cc |
| OLD | NEW |