11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/gpu/gpu_memory_buffer_factory_host_impl.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/gpu/gpu_process_host.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/gpu_memory_buffer.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGpuMemoryBufferFactoryHostImpl::GpuMemoryBufferFactoryHostImpl() 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : gpu_host_id_(0), next_create_gpu_memory_buffer_request_id_(0) { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGpuMemoryBufferFactoryHostImpl::~GpuMemoryBufferFactoryHostImpl() { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GpuMemoryBufferFactoryHostImpl::CreateGpuMemoryBuffer( 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::GpuMemoryBufferHandle& handle, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Size& size, 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned usage, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const CreateGpuMemoryBufferCallback& callback) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!host) { 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(gfx::GpuMemoryBufferHandle()); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 request_id = next_create_gpu_memory_buffer_request_id_++; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci create_gpu_memory_buffer_requests_[request_id] = callback; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host->CreateGpuMemoryBuffer( 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci internalformat, 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci usage, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&GpuMemoryBufferFactoryHostImpl::OnGpuMemoryBufferCreated, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this), 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request_id)); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GpuMemoryBufferFactoryHostImpl::DestroyGpuMemoryBuffer( 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::GpuMemoryBufferHandle& handle, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32 sync_point) { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!host) 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host->DestroyGpuMemoryBuffer(handle, sync_point); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GpuMemoryBufferFactoryHostImpl::OnGpuMemoryBufferCreated( 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 request_id, 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::GpuMemoryBufferHandle& handle) { 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateGpuMemoryBufferCallbackMap::iterator iter = 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci create_gpu_memory_buffer_requests_.find(request_id); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(iter != create_gpu_memory_buffer_requests_.end()); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci iter->second.Run(handle); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci create_gpu_memory_buffer_requests_.erase(iter); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content 73