surface_factory.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1// Copyright 2014 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/surfaces/surface_factory.h" 6 7#include "cc/output/compositor_frame.h" 8#include "cc/surfaces/surface.h" 9#include "cc/surfaces/surface_manager.h" 10#include "ui/gfx/geometry/size.h" 11 12namespace cc { 13SurfaceFactory::SurfaceFactory(SurfaceManager* manager, 14 SurfaceFactoryClient* client) 15 : manager_(manager), client_(client), holder_(client) { 16} 17 18SurfaceFactory::~SurfaceFactory() { 19 DCHECK_EQ(0u, surface_map_.size()); 20} 21 22void SurfaceFactory::Create(SurfaceId surface_id, const gfx::Size& size) { 23 scoped_ptr<Surface> surface(new Surface(surface_id, size, this)); 24 manager_->RegisterSurface(surface.get()); 25 DCHECK(!surface_map_.count(surface_id)); 26 surface_map_.add(surface_id, surface.Pass()); 27} 28 29void SurfaceFactory::Destroy(SurfaceId surface_id) { 30 OwningSurfaceMap::iterator it = surface_map_.find(surface_id); 31 DCHECK(it != surface_map_.end()); 32 DCHECK(it->second->factory() == this); 33 manager_->DeregisterSurface(surface_id); 34 surface_map_.erase(it); 35} 36 37void SurfaceFactory::SubmitFrame(SurfaceId surface_id, 38 scoped_ptr<CompositorFrame> frame) { 39 OwningSurfaceMap::iterator it = surface_map_.find(surface_id); 40 DCHECK(it != surface_map_.end()); 41 DCHECK(it->second->factory() == this); 42 it->second->QueueFrame(frame.Pass()); 43 manager_->SurfaceModified(surface_id); 44} 45 46void SurfaceFactory::ReceiveFromChild( 47 const TransferableResourceArray& resources) { 48 holder_.ReceiveFromChild(resources); 49} 50 51void SurfaceFactory::RefResources(const TransferableResourceArray& resources) { 52 holder_.RefResources(resources); 53} 54 55void SurfaceFactory::UnrefResources(const ReturnedResourceArray& resources) { 56 holder_.UnrefResources(resources); 57} 58 59} // namespace cc 60