// Copyright (c) 2013 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 "gpu/command_buffer/service/async_pixel_transfer_delegate.h" #include "base/memory/shared_memory.h" #include "gpu/command_buffer/service/safe_shared_memory_pool.h" namespace gpu { namespace { void* GetAddressImpl(base::SharedMemory* shared_memory, uint32 shm_size, uint32 shm_data_offset, uint32 shm_data_size) { // Memory bounds have already been validated, so there // are just DCHECKS here. DCHECK(shared_memory); DCHECK(shared_memory->memory()); DCHECK_LE(shm_data_offset + shm_data_size, shm_size); return static_cast(shared_memory->memory()) + shm_data_offset; } } // namespace AsyncPixelTransferUploadStats::AsyncPixelTransferUploadStats() : texture_upload_count_(0) {} AsyncPixelTransferUploadStats::~AsyncPixelTransferUploadStats() {} void AsyncPixelTransferUploadStats::AddUpload(base::TimeDelta transfer_time) { base::AutoLock scoped_lock(lock_); texture_upload_count_++; total_texture_upload_time_ += transfer_time; } int AsyncPixelTransferUploadStats::GetStats( base::TimeDelta* total_texture_upload_time) { base::AutoLock scoped_lock(lock_); if (total_texture_upload_time) *total_texture_upload_time = total_texture_upload_time_; return texture_upload_count_; } AsyncPixelTransferDelegate::AsyncPixelTransferDelegate(){} AsyncPixelTransferDelegate::~AsyncPixelTransferDelegate(){} // static void* AsyncPixelTransferDelegate::GetAddress( const AsyncMemoryParams& mem_params) { return GetAddressImpl(mem_params.shared_memory, mem_params.shm_size, mem_params.shm_data_offset, mem_params.shm_data_size); } // static void* AsyncPixelTransferDelegate::GetAddress( ScopedSafeSharedMemory* safe_shared_memory, const AsyncMemoryParams& mem_params) { return GetAddressImpl(safe_shared_memory->shared_memory(), mem_params.shm_size, mem_params.shm_data_offset, mem_params.shm_data_size); } } // namespace gpu