15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/layers/surface_layer_impl.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/debug/trace_event_argument.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/debug/debug_colors.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/quads/surface_draw_quad.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/trees/occlusion_tracker.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace cc { 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SurfaceLayerImpl::SurfaceLayerImpl(LayerTreeImpl* tree_impl, int id) 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : LayerImpl(tree_impl, id) { 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SurfaceLayerImpl::~SurfaceLayerImpl() {} 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<LayerImpl> SurfaceLayerImpl::CreateLayerImpl( 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LayerTreeImpl* tree_impl) { 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return SurfaceLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SurfaceLayerImpl::SetSurfaceId(SurfaceId surface_id) { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (surface_id_ == surface_id) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) surface_id_ = surface_id; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NoteLayerPropertyChanged(); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SurfaceLayerImpl::PushPropertiesTo(LayerImpl* layer) { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LayerImpl::PushPropertiesTo(layer); 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer); 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) layer_impl->SetSurfaceId(surface_id_); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid SurfaceLayerImpl::AppendQuads( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RenderPass* render_pass, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const OcclusionTracker<LayerImpl>& occlusion_tracker, 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AppendQuadsData* append_quads_data) { 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SharedQuadState* shared_quad_state = 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass->CreateAndAppendSharedQuadState(); 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) PopulateSharedQuadState(shared_quad_state); 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AppendDebugBorderQuad( 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass, content_bounds(), shared_quad_state, append_quads_data); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (surface_id_.is_null()) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect quad_rect(content_bounds()); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect visible_quad_rect = 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci occlusion_tracker.GetCurrentOcclusionForLayer( 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_properties().target_space_transform) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .GetUnoccludedContentRect(quad_rect); 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (visible_quad_rect.IsEmpty()) 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SurfaceDrawQuad* quad = 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch render_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) quad->SetNew(shared_quad_state, quad_rect, visible_quad_rect, surface_id_); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SurfaceLayerImpl::GetDebugBorderProperties(SkColor* color, 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float* width) const { 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *color = DebugColors::SurfaceLayerBorderColor(); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *width = DebugColors::SurfaceLayerBorderWidth(layer_tree_impl()); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SurfaceLayerImpl::AsValueInto(base::debug::TracedValue* dict) const { 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LayerImpl::AsValueInto(dict); 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("surface_id", surface_id_.id); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* SurfaceLayerImpl::LayerTypeAsString() const { 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "cc::SurfaceLayerImpl"; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace cc 82