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/service/async_pixel_transfer_delegate.h" 6 7 #include "base/memory/shared_memory.h" 8 #include "gpu/command_buffer/service/safe_shared_memory_pool.h" 9 10 namespace gpu { 11 12 namespace { 13 14 void* GetAddressImpl(base::SharedMemory* shared_memory, 15 uint32 shm_size, 16 uint32 shm_data_offset, 17 uint32 shm_data_size) { 18 // Memory bounds have already been validated, so there 19 // are just DCHECKS here. 20 DCHECK(shared_memory); 21 DCHECK(shared_memory->memory()); 22 DCHECK_LE(shm_data_offset + shm_data_size, shm_size); 23 return static_cast<int8*>(shared_memory->memory()) + shm_data_offset; 24 } 25 26 } // namespace 27 28 AsyncPixelTransferUploadStats::AsyncPixelTransferUploadStats() 29 : texture_upload_count_(0) {} 30 31 AsyncPixelTransferUploadStats::~AsyncPixelTransferUploadStats() {} 32 33 void AsyncPixelTransferUploadStats::AddUpload(base::TimeDelta transfer_time) { 34 base::AutoLock scoped_lock(lock_); 35 texture_upload_count_++; 36 total_texture_upload_time_ += transfer_time; 37 } 38 39 int AsyncPixelTransferUploadStats::GetStats( 40 base::TimeDelta* total_texture_upload_time) { 41 base::AutoLock scoped_lock(lock_); 42 if (total_texture_upload_time) 43 *total_texture_upload_time = total_texture_upload_time_; 44 return texture_upload_count_; 45 } 46 47 AsyncPixelTransferDelegate::AsyncPixelTransferDelegate(){} 48 49 AsyncPixelTransferDelegate::~AsyncPixelTransferDelegate(){} 50 51 // static 52 void* AsyncPixelTransferDelegate::GetAddress( 53 const AsyncMemoryParams& mem_params) { 54 return GetAddressImpl(mem_params.shared_memory, 55 mem_params.shm_size, 56 mem_params.shm_data_offset, 57 mem_params.shm_data_size); 58 } 59 60 // static 61 void* AsyncPixelTransferDelegate::GetAddress( 62 ScopedSafeSharedMemory* safe_shared_memory, 63 const AsyncMemoryParams& mem_params) { 64 return GetAddressImpl(safe_shared_memory->shared_memory(), 65 mem_params.shm_size, 66 mem_params.shm_data_offset, 67 mem_params.shm_data_size); 68 } 69 70 } // namespace gpu 71