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 3 // found in the LICENSE file. 4 5 #include "cc/layers/io_surface_layer.h" 6 7 #include "cc/layers/io_surface_layer_impl.h" 8 9 namespace cc { 10 11 scoped_refptr<IOSurfaceLayer> IOSurfaceLayer::Create() { 12 return make_scoped_refptr(new IOSurfaceLayer()); 13 } 14 15 IOSurfaceLayer::IOSurfaceLayer() : Layer(), io_surface_id_(0) {} 16 17 IOSurfaceLayer::~IOSurfaceLayer() {} 18 19 void IOSurfaceLayer::SetIOSurfaceProperties(uint32_t io_surface_id, 20 const gfx::Size& size) { 21 io_surface_id_ = io_surface_id; 22 io_surface_size_ = size; 23 UpdateDrawsContent(HasDrawableContent()); 24 SetNeedsCommit(); 25 } 26 27 scoped_ptr<LayerImpl> IOSurfaceLayer::CreateLayerImpl( 28 LayerTreeImpl* tree_impl) { 29 return IOSurfaceLayerImpl::Create(tree_impl, layer_id_).PassAs<LayerImpl>(); 30 } 31 32 bool IOSurfaceLayer::HasDrawableContent() const { 33 return io_surface_id_ && Layer::HasDrawableContent(); 34 } 35 36 void IOSurfaceLayer::PushPropertiesTo(LayerImpl* layer) { 37 Layer::PushPropertiesTo(layer); 38 39 IOSurfaceLayerImpl* io_surface_layer = 40 static_cast<IOSurfaceLayerImpl*>(layer); 41 io_surface_layer->SetIOSurfaceProperties(io_surface_id_, io_surface_size_); 42 } 43 44 bool IOSurfaceLayer::Update(ResourceUpdateQueue* queue, 45 const OcclusionTracker<Layer>* occlusion) { 46 bool updated = Layer::Update(queue, occlusion); 47 48 // This layer doesn't update any resources from the main thread side, 49 // but repaint rects need to be sent to the layer impl via commit. 50 return updated || !update_rect_.IsEmpty(); 51 } 52 53 } // namespace cc 54