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