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.
5 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
7 #include "base/memory/shared_memory.h"
8 #include "gpu/command_buffer/service/safe_shared_memory_pool.h"
14 void* GetAddressImpl(base::SharedMemory* shared_memory,
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;
28 AsyncPixelTransferUploadStats::AsyncPixelTransferUploadStats()
29 : texture_upload_count_(0) {}
31 AsyncPixelTransferUploadStats::~AsyncPixelTransferUploadStats() {}
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;
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_;
47 AsyncPixelTransferDelegate::AsyncPixelTransferDelegate(){}
49 AsyncPixelTransferDelegate::~AsyncPixelTransferDelegate(){}
52 void* AsyncPixelTransferDelegate::GetAddress(
53 const AsyncMemoryParams& mem_params) {
54 return GetAddressImpl(mem_params.shared_memory,
56 mem_params.shm_data_offset,
57 mem_params.shm_data_size);
61 void* AsyncPixelTransferDelegate::GetAddress(
62 ScopedSafeSharedMemory* safe_shared_memory,
63 const AsyncMemoryParams& mem_params) {
64 return GetAddressImpl(safe_shared_memory->shared_memory(),
66 mem_params.shm_data_offset,
67 mem_params.shm_data_size);