scoped_resource.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/resources/scoped_resource.h"
6
7namespace cc {
8
9ScopedResource::ScopedResource(ResourceProvider* resource_provider)
10    : resource_provider_(resource_provider) {
11  DCHECK(resource_provider_);
12}
13
14ScopedResource::~ScopedResource() {
15  Free();
16}
17
18bool ScopedResource::Allocate(const gfx::Size& size, GLenum format,
19                              ResourceProvider::TextureUsageHint hint) {
20  DCHECK(!id());
21  DCHECK(!size.IsEmpty());
22
23  set_dimensions(size, format);
24  set_id(resource_provider_->CreateResource(size, format, hint));
25
26#ifndef NDEBUG
27  allocate_thread_id_ = base::PlatformThread::CurrentId();
28#endif
29
30  return id();
31}
32
33void ScopedResource::Free() {
34  if (id()) {
35#ifndef NDEBUG
36    DCHECK(allocate_thread_id_ == base::PlatformThread::CurrentId());
37#endif
38    resource_provider_->DeleteResource(id());
39  }
40  set_id(0);
41}
42
43void ScopedResource::Leak() {
44  set_id(0);
45}
46
47}  // namespace cc
48