| Index: ui/gl/async_pixel_transfer_delegate_android.cc
|
| ===================================================================
|
| --- ui/gl/async_pixel_transfer_delegate_android.cc (revision 182062)
|
| +++ ui/gl/async_pixel_transfer_delegate_android.cc (working copy)
|
| @@ -159,7 +159,8 @@
|
| // Class which holds async pixel transfers state (EGLImage).
|
| // The EGLImage is accessed by either thread, but everything
|
| // else accessed only on the main thread.
|
| -class TransferStateInternal : public base::RefCounted<TransferStateInternal> {
|
| +class TransferStateInternal
|
| + : public base::RefCountedThreadSafe<TransferStateInternal> {
|
| public:
|
| explicit TransferStateInternal(GLuint texture_id,
|
| bool wait_for_uploads,
|
| @@ -250,7 +251,7 @@
|
| }
|
|
|
| protected:
|
| - friend class base::RefCounted<TransferStateInternal>;
|
| + friend class base::RefCountedThreadSafe<TransferStateInternal>;
|
| friend class AsyncPixelTransferDelegateAndroid;
|
|
|
| static void DeleteTexture(GLuint id) {
|
| @@ -329,8 +330,7 @@
|
|
|
| // implement AsyncPixelTransferDelegate:
|
| virtual void AsyncNotifyCompletion(
|
| - const AsyncMemoryParams& mem_params,
|
| - const CompletionCallback& callback) OVERRIDE;
|
| + const base::Closure& task) OVERRIDE;
|
| virtual void AsyncTexImage2D(
|
| AsyncPixelTransferState* state,
|
| const AsyncTexImage2DParams& tex_params,
|
| @@ -360,12 +360,6 @@
|
| AsyncTexSubImage2DParams tex_params,
|
| base::SharedMemory* shared_memory,
|
| uint32 shared_memory_data_offset);
|
| - static void PerformNotifyCompletion(
|
| - base::SharedMemory* shared_memory,
|
| - uint32 shared_memory_size,
|
| - uint32 shared_memory_data_offset,
|
| - uint32 shared_memory_data_size,
|
| - const CompletionCallback& callback);
|
|
|
| // Returns true if a work-around was used.
|
| bool WorkAroundAsyncTexImage2D(
|
| @@ -450,23 +444,19 @@
|
| use_image_preserved));
|
| }
|
|
|
| +namespace {
|
| +// Dummy function to measure completion on
|
| +// the upload thread.
|
| +void NoOp() {}
|
| +} // namespace
|
| +
|
| void AsyncPixelTransferDelegateAndroid::AsyncNotifyCompletion(
|
| - const AsyncMemoryParams& mem_params,
|
| - const CompletionCallback& callback) {
|
| - DCHECK(mem_params.shared_memory);
|
| - DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
|
| - mem_params.shm_size);
|
| - // Post a PerformNotifyCompletion task to the upload thread. This task
|
| - // will run after all async transfers are complete.
|
| - transfer_message_loop_proxy()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&AsyncPixelTransferDelegateAndroid::PerformNotifyCompletion,
|
| - base::Owned(DuplicateSharedMemory(mem_params.shared_memory,
|
| - mem_params.shm_size)),
|
| - mem_params.shm_size,
|
| - mem_params.shm_data_offset,
|
| - mem_params.shm_data_size,
|
| - callback));
|
| + const base::Closure& task) {
|
| + // Post a no-op task to the upload thread followed
|
| + // by a reply to the callback. The reply will then occur after
|
| + // all async transfers are complete.
|
| + transfer_message_loop_proxy()->PostTaskAndReply(FROM_HERE,
|
| + base::Bind(&NoOp), task);
|
| }
|
|
|
| void AsyncPixelTransferDelegateAndroid::AsyncTexImage2D(
|
| @@ -670,20 +660,6 @@
|
| state->last_transfer_time_ = base::TimeTicks::HighResNow() - begin_time;
|
| }
|
|
|
| -void AsyncPixelTransferDelegateAndroid::PerformNotifyCompletion(
|
| - base::SharedMemory* shared_memory,
|
| - uint32 shared_memory_size,
|
| - uint32 shared_memory_data_offset,
|
| - uint32 shared_memory_data_size,
|
| - const CompletionCallback& callback) {
|
| - TRACE_EVENT0("gpu", "PerformNotifyCompletion");
|
| - gfx::AsyncMemoryParams mem_params;
|
| - mem_params.shared_memory = shared_memory;
|
| - mem_params.shm_size = shared_memory_size;
|
| - mem_params.shm_data_offset = shared_memory_data_offset;
|
| - mem_params.shm_data_size = shared_memory_data_size;
|
| - callback.Run(mem_params);
|
| -}
|
|
|
| namespace {
|
| bool IsPowerOfTwo (unsigned int x) {
|
|
|