Home | History | Annotate | Download | only in client
      1 // Copyright (c) 2013 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 "gpu/command_buffer/client/gpu_memory_buffer_tracker.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "gpu/command_buffer/client/gles2_implementation.h"
      9 #include "gpu/command_buffer/client/image_factory.h"
     10 #include "ui/gfx/gpu_memory_buffer.h"
     11 
     12 namespace gpu {
     13 namespace gles2 {
     14 
     15 GpuMemoryBufferTracker::GpuMemoryBufferTracker(ImageFactory* factory)
     16     : buffers_(),
     17       factory_(factory) {
     18 }
     19 
     20 GpuMemoryBufferTracker::~GpuMemoryBufferTracker() {
     21   while (!buffers_.empty()) {
     22     RemoveBuffer(buffers_.begin()->first);
     23   }
     24 }
     25 
     26 GLuint GpuMemoryBufferTracker::CreateBuffer(
     27     GLsizei width, GLsizei height, GLenum internalformat) {
     28   GLuint image_id = 0;
     29   DCHECK(factory_);
     30   scoped_ptr<gfx::GpuMemoryBuffer> buffer =
     31       factory_->CreateGpuMemoryBuffer(width, height, internalformat, &image_id);
     32 
     33   if (buffer.get() == NULL)
     34     return 0;
     35 
     36   std::pair<BufferMap::iterator, bool> result =
     37       buffers_.insert(std::make_pair(image_id, buffer.release()));
     38   GPU_DCHECK(result.second);
     39 
     40   return image_id;
     41 }
     42 
     43 gfx::GpuMemoryBuffer* GpuMemoryBufferTracker::GetBuffer(GLuint image_id) {
     44   BufferMap::iterator it = buffers_.find(image_id);
     45   return (it != buffers_.end()) ? it->second : NULL;
     46 }
     47 
     48 void GpuMemoryBufferTracker::RemoveBuffer(GLuint image_id) {
     49   BufferMap::iterator buffer_it = buffers_.find(image_id);
     50   if (buffer_it != buffers_.end()) {
     51     gfx::GpuMemoryBuffer* buffer = buffer_it->second;
     52     buffers_.erase(buffer_it);
     53     delete buffer;
     54   }
     55   DCHECK(factory_);
     56   factory_->DeleteGpuMemoryBuffer(image_id);
     57 }
     58 
     59 }  // namespace gles2
     60 }  // namespace gpu
     61