Index: ui/gl/async_pixel_transfer_delegate_android.cc |
diff --git a/ui/gl/async_pixel_transfer_delegate_android.cc b/ui/gl/async_pixel_transfer_delegate_android.cc |
index a594c9468e341848f22f4bd2c7a1c5326d2a7247..7e603ba4ebaaf8a96fd9fdded4c38c6b0fb82b7d 100644 |
--- a/ui/gl/async_pixel_transfer_delegate_android.cc |
+++ b/ui/gl/async_pixel_transfer_delegate_android.cc |
@@ -13,6 +13,7 @@ |
#include "base/memory/ref_counted.h" |
#include "base/process_util.h" |
#include "base/shared_memory.h" |
+#include "base/synchronization/waitable_event.h" |
#include "base/threading/thread.h" |
#include "build/build_config.h" |
#include "ui/gl/async_pixel_transfer_delegate.h" |
@@ -198,6 +199,9 @@ SafeSharedMemoryPool* safe_shared_memory_pool() { |
return g_transfer_thread.Pointer()->safe_shared_memory_pool(); |
} |
+void SignalCompletion(base::WaitableEvent* completion) { |
+ completion->Signal(); |
+} |
} // namespace |
@@ -380,6 +384,7 @@ class AsyncPixelTransferDelegateAndroid |
virtual void AsyncNotifyCompletion( |
const AsyncMemoryParams& mem_params, |
const CompletionCallback& callback) OVERRIDE; |
+ virtual void WaitOnUploadCompletion() OVERRIDE; |
virtual void AsyncTexImage2D( |
AsyncPixelTransferState* state, |
const AsyncTexImage2DParams& tex_params, |
@@ -504,6 +509,26 @@ void AsyncPixelTransferDelegateAndroid::AsyncNotifyCompletion( |
callback)); |
} |
+void AsyncPixelTransferDelegateAndroid::WaitOnUploadCompletion() { |
+ // TODO(epenner): Move thread priorities to base. (crbug.com/170549) |
+ int default_nice_value = 0; // Default priority. |
+ int idle_nice_value = 10; // Idle priority. |
+ setpriority(PRIO_PROCESS, |
+ g_transfer_thread.Pointer()->thread_id(), |
+ default_nice_value); |
+ |
+ base::WaitableEvent completion(true, false); |
+ transfer_message_loop_proxy()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&SignalCompletion, &completion)); |
+ completion.Wait(); |
+ |
+ // TODO(epenner): Move thread priorities to base. (crbug.com/170549) |
+ setpriority(PRIO_PROCESS, |
+ g_transfer_thread.Pointer()->thread_id(), |
+ idle_nice_value); |
+} |
+ |
void AsyncPixelTransferDelegateAndroid::AsyncTexImage2D( |
AsyncPixelTransferState* transfer_state, |
const AsyncTexImage2DParams& tex_params, |