| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cc/scoped_resource.h" |
| |
| namespace cc { |
| |
| ScopedResource::ScopedResource(ResourceProvider* resource_provider) |
| : resource_provider_(resource_provider) { |
| DCHECK(resource_provider_); |
| } |
| |
| ScopedResource::~ScopedResource() { |
| Free(); |
| } |
| |
| bool ScopedResource::Allocate(int pool, const gfx::Size& size, GLenum format, |
| ResourceProvider::TextureUsageHint hint) { |
| DCHECK(!id()); |
| DCHECK(!size.IsEmpty()); |
| |
| set_dimensions(size, format); |
| set_id(resource_provider_->createResource(pool, size, format, hint)); |
| |
| #ifndef NDEBUG |
| allocate_thread_id_ = base::PlatformThread::CurrentId(); |
| #endif |
| |
| return id(); |
| } |
| |
| void ScopedResource::Free() { |
| if (id()) { |
| #ifndef NDEBUG |
| DCHECK(allocate_thread_id_ == base::PlatformThread::CurrentId()); |
| #endif |
| resource_provider_->deleteResource(id()); |
| } |
| set_id(0); |
| } |
| |
| void ScopedResource::Leak() { |
| set_id(0); |
| } |
| |
| } // namespace cc |