Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" | 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 } | 25 } |
| 26 | 26 |
| 27 } // namespace | 27 } // namespace |
| 28 | 28 |
| 29 // Class which handles async pixel transfers in a platform | 29 // Class which handles async pixel transfers in a platform |
| 30 // independent way. | 30 // independent way. |
| 31 class AsyncPixelTransferDelegateIdle | 31 class AsyncPixelTransferDelegateIdle |
| 32 : public AsyncPixelTransferDelegate, | 32 : public AsyncPixelTransferDelegate, |
| 33 public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> { | 33 public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> { |
| 34 public: | 34 public: |
| 35 typedef base::Callback<GLuint()> TextureIdCallback; | |
| 35 AsyncPixelTransferDelegateIdle( | 36 AsyncPixelTransferDelegateIdle( |
| 36 AsyncPixelTransferManagerIdle::SharedState* state, | 37 AsyncPixelTransferManagerIdle::SharedState* state, |
| 37 GLuint texture_id, | 38 const TextureIdCallback& texture_id_callback, |
| 38 const AsyncTexImage2DParams& define_params); | 39 const AsyncTexImage2DParams& define_params); |
| 39 ~AsyncPixelTransferDelegateIdle() override; | 40 ~AsyncPixelTransferDelegateIdle() override; |
| 40 | 41 |
| 41 // Implement AsyncPixelTransferDelegate: | 42 // Implement AsyncPixelTransferDelegate: |
| 42 void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params, | 43 void AsyncTexImage2D(const AsyncTexImage2DParams& tex_params, |
| 43 const AsyncMemoryParams& mem_params, | 44 const AsyncMemoryParams& mem_params, |
| 44 const base::Closure& bind_callback) override; | 45 const base::Closure& bind_callback) override; |
| 45 void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params, | 46 void AsyncTexSubImage2D(const AsyncTexSubImage2DParams& tex_params, |
| 46 const AsyncMemoryParams& mem_params) override; | 47 const AsyncMemoryParams& mem_params) override; |
| 47 bool TransferIsInProgress() override; | 48 bool TransferIsInProgress() override; |
| 48 void WaitForTransferCompletion() override; | 49 void WaitForTransferCompletion() override; |
| 49 | 50 |
| 50 private: | 51 private: |
| 51 void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params, | 52 void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params, |
| 52 AsyncMemoryParams mem_params, | 53 AsyncMemoryParams mem_params, |
| 53 const base::Closure& bind_callback); | 54 const base::Closure& bind_callback); |
| 54 void PerformAsyncTexSubImage2D(AsyncTexSubImage2DParams tex_params, | 55 void PerformAsyncTexSubImage2D(AsyncTexSubImage2DParams tex_params, |
| 55 AsyncMemoryParams mem_params); | 56 AsyncMemoryParams mem_params); |
| 56 | 57 |
| 57 uint64 id_; | 58 uint64 id_; |
| 58 GLuint texture_id_; | 59 TextureIdCallback texture_id_callback_; |
| 59 bool transfer_in_progress_; | 60 bool transfer_in_progress_; |
| 60 AsyncTexImage2DParams define_params_; | 61 AsyncTexImage2DParams define_params_; |
| 61 | 62 |
| 62 // Safe to hold a raw pointer because SharedState is owned by the Manager | 63 // Safe to hold a raw pointer because SharedState is owned by the Manager |
| 63 // which owns the Delegate. | 64 // which owns the Delegate. |
| 64 AsyncPixelTransferManagerIdle::SharedState* shared_state_; | 65 AsyncPixelTransferManagerIdle::SharedState* shared_state_; |
| 65 | 66 |
| 66 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle); | 67 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle); |
| 67 }; | 68 }; |
| 68 | 69 |
| 69 AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle( | 70 AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle( |
| 70 AsyncPixelTransferManagerIdle::SharedState* shared_state, | 71 AsyncPixelTransferManagerIdle::SharedState* shared_state, |
| 71 GLuint texture_id, | 72 const TextureIdCallback& texture_id_callback, |
| 72 const AsyncTexImage2DParams& define_params) | 73 const AsyncTexImage2DParams& define_params) |
| 73 : id_(g_next_pixel_transfer_state_id++), | 74 : id_(g_next_pixel_transfer_state_id++), |
| 74 texture_id_(texture_id), | 75 texture_id_callback_(texture_id_callback), |
| 75 transfer_in_progress_(false), | 76 transfer_in_progress_(false), |
| 76 define_params_(define_params), | 77 define_params_(define_params), |
| 77 shared_state_(shared_state) {} | 78 shared_state_(shared_state) {} |
| 78 | 79 |
| 79 AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {} | 80 AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {} |
| 80 | 81 |
| 81 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( | 82 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( |
| 82 const AsyncTexImage2DParams& tex_params, | 83 const AsyncTexImage2DParams& tex_params, |
| 83 const AsyncMemoryParams& mem_params, | 84 const AsyncMemoryParams& mem_params, |
| 84 const base::Closure& bind_callback) { | 85 const base::Closure& bind_callback) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 138 AsyncTexImage2DParams tex_params, | 139 AsyncTexImage2DParams tex_params, |
| 139 AsyncMemoryParams mem_params, | 140 AsyncMemoryParams mem_params, |
| 140 const base::Closure& bind_callback) { | 141 const base::Closure& bind_callback) { |
| 141 TRACE_EVENT2("gpu", "PerformAsyncTexImage2D", | 142 TRACE_EVENT2("gpu", "PerformAsyncTexImage2D", |
| 142 "width", tex_params.width, | 143 "width", tex_params.width, |
| 143 "height", tex_params.height); | 144 "height", tex_params.height); |
| 144 | 145 |
| 145 void* data = mem_params.GetDataAddress(); | 146 void* data = mem_params.GetDataAddress(); |
| 146 | 147 |
| 147 base::TimeTicks begin_time(base::TimeTicks::Now()); | 148 base::TimeTicks begin_time(base::TimeTicks::Now()); |
| 148 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); | 149 gfx::ScopedTextureBinder texture_binder(tex_params.target, |
| 150 texture_id_callback_.Run()); | |
| 149 | 151 |
| 150 { | 152 { |
| 151 TRACE_EVENT0("gpu", "glTexImage2D"); | 153 TRACE_EVENT0("gpu", "glTexImage2D"); |
| 152 glTexImage2D( | 154 glTexImage2D( |
| 153 tex_params.target, | 155 tex_params.target, |
| 154 tex_params.level, | 156 tex_params.level, |
| 155 tex_params.internal_format, | 157 tex_params.internal_format, |
| 156 tex_params.width, | 158 tex_params.width, |
| 157 tex_params.height, | 159 tex_params.height, |
| 158 tex_params.border, | 160 tex_params.border, |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 174 void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( | 176 void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( |
| 175 AsyncTexSubImage2DParams tex_params, | 177 AsyncTexSubImage2DParams tex_params, |
| 176 AsyncMemoryParams mem_params) { | 178 AsyncMemoryParams mem_params) { |
| 177 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", | 179 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", |
| 178 "width", tex_params.width, | 180 "width", tex_params.width, |
| 179 "height", tex_params.height); | 181 "height", tex_params.height); |
| 180 | 182 |
| 181 void* data = mem_params.GetDataAddress(); | 183 void* data = mem_params.GetDataAddress(); |
| 182 | 184 |
| 183 base::TimeTicks begin_time(base::TimeTicks::Now()); | 185 base::TimeTicks begin_time(base::TimeTicks::Now()); |
| 184 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); | 186 gfx::ScopedTextureBinder texture_binder(tex_params.target, |
| 187 texture_id_callback_.Run()); | |
| 185 | 188 |
| 186 if (shared_state_->use_teximage2d_over_texsubimage2d && | 189 if (shared_state_->use_teximage2d_over_texsubimage2d && |
| 187 tex_params.xoffset == 0 && | 190 tex_params.xoffset == 0 && |
| 188 tex_params.yoffset == 0 && | 191 tex_params.yoffset == 0 && |
| 189 tex_params.target == define_params_.target && | 192 tex_params.target == define_params_.target && |
| 190 tex_params.level == define_params_.level && | 193 tex_params.level == define_params_.level && |
| 191 tex_params.width == define_params_.width && | 194 tex_params.width == define_params_.width && |
| 192 tex_params.height == define_params_.height) { | 195 tex_params.height == define_params_.height) { |
| 193 TRACE_EVENT0("gpu", "glTexImage2D"); | 196 TRACE_EVENT0("gpu", "glTexImage2D"); |
| 194 glTexImage2D( | 197 glTexImage2D( |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 310 | 313 |
| 311 const Task& task = shared_state_.tasks.back(); | 314 const Task& task = shared_state_.tasks.back(); |
| 312 if (task.delegate) | 315 if (task.delegate) |
| 313 task.delegate->WaitForTransferCompletion(); | 316 task.delegate->WaitForTransferCompletion(); |
| 314 } | 317 } |
| 315 | 318 |
| 316 AsyncPixelTransferDelegate* | 319 AsyncPixelTransferDelegate* |
| 317 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( | 320 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( |
| 318 gles2::TextureRef* ref, | 321 gles2::TextureRef* ref, |
| 319 const AsyncTexImage2DParams& define_params) { | 322 const AsyncTexImage2DParams& define_params) { |
| 320 return new AsyncPixelTransferDelegateIdle(&shared_state_, | 323 return new AsyncPixelTransferDelegateIdle( |
| 321 ref->service_id(), | 324 &shared_state_, |
|
no sievers
2015/04/28 23:23:18
Can you put a comment why we are doing this instea
| |
| 322 define_params); | 325 base::Bind(&gles2::TextureRef::service_id, base::Unretained(ref)), |
|
no sievers
2015/04/28 23:23:18
Can you put a comment similar to the one in GLES2C
| |
| 326 define_params); | |
| 323 } | 327 } |
| 324 | 328 |
| 325 } // namespace gpu | 329 } // namespace gpu |
| OLD | NEW |