summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc126
1 files changed, 43 insertions, 83 deletions
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
index acf33ef..aa6cd67 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
@@ -34,51 +34,13 @@ void PerformNotifyCompletion(
callback.Run(safe_mem_params);
}
-// TODO(backer): Merge this with Delegate in follow-up CL. It serves no purpose.
-class AsyncPixelTransferState
- : public base::SupportsWeakPtr<AsyncPixelTransferState> {
- public:
- typedef base::Callback<void(GLuint)> TransferCallback;
-
- explicit AsyncPixelTransferState(GLuint texture_id)
- : id_(g_next_pixel_transfer_state_id++),
- texture_id_(texture_id),
- transfer_in_progress_(false) {
- }
-
- virtual ~AsyncPixelTransferState() {}
-
- bool TransferIsInProgress() {
- return transfer_in_progress_;
- }
-
- uint64 id() const { return id_; }
-
- void set_transfer_in_progress(bool transfer_in_progress) {
- transfer_in_progress_ = transfer_in_progress;
- }
-
- void PerformTransfer(const TransferCallback& callback) {
- DCHECK(texture_id_);
- DCHECK(transfer_in_progress_);
- callback.Run(texture_id_);
- transfer_in_progress_ = false;
- }
-
- private:
- uint64 id_;
- GLuint texture_id_;
- bool transfer_in_progress_;
-
- DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferState);
-};
-
} // namespace
// Class which handles async pixel transfers in a platform
// independent way.
-class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate,
- public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> {
+class AsyncPixelTransferDelegateIdle
+ : public AsyncPixelTransferDelegate,
+ public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> {
public:
AsyncPixelTransferDelegateIdle(
AsyncPixelTransferManagerIdle::SharedState* state,
@@ -101,18 +63,19 @@ class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate,
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
const base::Closure& bind_callback,
- ScopedSafeSharedMemory* safe_shared_memory,
- GLuint texture_id);
+ ScopedSafeSharedMemory* safe_shared_memory);
void PerformAsyncTexSubImage2D(
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
- GLuint texture_id);
+ ScopedSafeSharedMemory* safe_shared_memory);
+
+ uint64 id_;
+ GLuint texture_id_;
+ bool transfer_in_progress_;
// Safe to hold a raw pointer because SharedState is owned by the Manager
// which owns the Delegate.
AsyncPixelTransferManagerIdle::SharedState* shared_state_;
- scoped_ptr<AsyncPixelTransferState> state_;
DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle);
};
@@ -120,8 +83,10 @@ class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate,
AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle(
AsyncPixelTransferManagerIdle::SharedState* shared_state,
GLuint texture_id)
- : shared_state_(shared_state),
- state_(new AsyncPixelTransferState(texture_id)) {}
+ : id_(g_next_pixel_transfer_state_id++),
+ texture_id_(texture_id),
+ transfer_in_progress_(false),
+ shared_state_(shared_state) {}
AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {}
@@ -135,21 +100,18 @@ void AsyncPixelTransferDelegateIdle::AsyncTexImage2D(
mem_params.shm_size);
shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
- state_->id(),
+ id_,
base::Bind(
- &AsyncPixelTransferState::PerformTransfer,
- state_->AsWeakPtr(),
- base::Bind(
- &AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D,
- AsWeakPtr(),
- tex_params,
- mem_params,
- bind_callback,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size))))));
-
- state_->set_transfer_in_progress(true);
+ &AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D,
+ AsWeakPtr(),
+ tex_params,
+ mem_params,
+ bind_callback,
+ base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
+ mem_params.shared_memory,
+ mem_params.shm_size)))));
+
+ transfer_in_progress_ = true;
}
void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D(
@@ -161,24 +123,21 @@ void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D(
mem_params.shm_size);
shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
- state_->id(),
+ id_,
base::Bind(
- &AsyncPixelTransferState::PerformTransfer,
- state_->AsWeakPtr(),
- base::Bind(
- &AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D,
- AsWeakPtr(),
- tex_params,
- mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size))))));
-
- state_->set_transfer_in_progress(true);
+ &AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D,
+ AsWeakPtr(),
+ tex_params,
+ mem_params,
+ base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
+ mem_params.shared_memory,
+ mem_params.shm_size)))));
+
+ transfer_in_progress_ = true;
}
bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() {
- return state_->TransferIsInProgress();
+ return transfer_in_progress_;
}
void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() {
@@ -186,7 +145,7 @@ void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() {
shared_state_->tasks.begin();
iter != shared_state_->tasks.end();
++iter) {
- if (iter->transfer_id != state_->id())
+ if (iter->transfer_id != id_)
continue;
(*iter).task.Run();
@@ -201,15 +160,14 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
const base::Closure& bind_callback,
- ScopedSafeSharedMemory* safe_shared_memory,
- GLuint texture_id) {
+ ScopedSafeSharedMemory* safe_shared_memory) {
TRACE_EVENT2("gpu", "PerformAsyncTexImage2D",
"width", tex_params.width,
"height", tex_params.height);
void* data = GetAddress(safe_shared_memory, mem_params);
- gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id);
+ gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
{
TRACE_EVENT0("gpu", "glTexImage2D");
@@ -225,6 +183,8 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
data);
}
+ transfer_in_progress_ = false;
+
// The texture is already fully bound so just call it now.
bind_callback.Run();
}
@@ -232,8 +192,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
- GLuint texture_id) {
+ ScopedSafeSharedMemory* safe_shared_memory) {
TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D",
"width", tex_params.width,
"height", tex_params.height);
@@ -241,7 +200,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
void* data = GetAddress(safe_shared_memory, mem_params);
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
- gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id);
+ gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
{
TRACE_EVENT0("gpu", "glTexSubImage2D");
@@ -257,6 +216,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
data);
}
+ transfer_in_progress_ = false;
shared_state_->texture_upload_count++;
shared_state_->total_texture_upload_time +=
base::TimeTicks::HighResNow() - begin_time;