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