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 |