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