Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: ui/gl/async_pixel_transfer_delegate_android.cc

Issue 12213073: Re-land: Mark async texture uploads as completed from the upload thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gl/async_pixel_transfer_delegate.h ('k') | ui/gl/async_pixel_transfer_delegate_stub.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cd934a563b6029fd4d6ee6237f3ff83b9740a443..98ac32e6a937ad8f4c8a01c3b8212cfce06db5af 100644
--- a/ui/gl/async_pixel_transfer_delegate_android.cc
+++ b/ui/gl/async_pixel_transfer_delegate_android.cc
@@ -148,8 +148,7 @@ SafeSharedMemoryPool* safe_shared_memory_pool() {
// 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::RefCountedThreadSafe<TransferStateInternal> {
+class TransferStateInternal : public base::RefCounted<TransferStateInternal> {
public:
explicit TransferStateInternal(GLuint texture_id,
bool wait_for_uploads,
@@ -239,7 +238,7 @@ class TransferStateInternal
}
protected:
- friend class base::RefCountedThreadSafe<TransferStateInternal>;
+ friend class base::RefCounted<TransferStateInternal>;
friend class AsyncPixelTransferDelegateAndroid;
static void DeleteTexture(GLuint id) {
@@ -318,7 +317,8 @@ class AsyncPixelTransferDelegateAndroid
// implement AsyncPixelTransferDelegate:
virtual void AsyncNotifyCompletion(
- const base::Closure& task) OVERRIDE;
+ const AsyncMemoryParams& mem_params,
+ const CompletionCallback& callback) OVERRIDE;
virtual void AsyncTexImage2D(
AsyncPixelTransferState* state,
const AsyncTexImage2DParams& tex_params,
@@ -338,6 +338,10 @@ class AsyncPixelTransferDelegateAndroid
void AsyncTexImage2DCompleted(scoped_refptr<TransferStateInternal> state);
void AsyncTexSubImage2DCompleted(scoped_refptr<TransferStateInternal> state);
+ static void PerformNotifyCompletion(
+ AsyncMemoryParams mem_params,
+ ScopedSafeSharedMemory* safe_shared_memory,
+ const CompletionCallback& callback);
static void PerformAsyncTexImage2D(
TransferStateInternal* state,
AsyncTexImage2DParams tex_params,
@@ -406,7 +410,7 @@ AsyncPixelTransferState*
CreateRawPixelTransferState(GLuint texture_id) {
// We can't wait on uploads on imagination (it can take 200ms+).
- // In practice, they are complete when the CPU glSubTexImage2D completes.
+ // In practice, they are complete when the CPU glTexSubImage2D completes.
bool wait_for_uploads = !is_imagination_;
// Qualcomm has a race when using image_preserved=FALSE,
@@ -422,19 +426,23 @@ AsyncPixelTransferState*
use_image_preserved));
}
-namespace {
-// Dummy function to measure completion on
-// the upload thread.
-void NoOp() {}
-} // namespace
-
void AsyncPixelTransferDelegateAndroid::AsyncNotifyCompletion(
- 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);
+ 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,
+ mem_params,
+ base::Owned(
+ new ScopedSafeSharedMemory(safe_shared_memory_pool(),
+ mem_params.shared_memory,
+ mem_params.shm_size)),
+ callback));
}
void AsyncPixelTransferDelegateAndroid::AsyncTexImage2D(
@@ -558,6 +566,16 @@ void SetGlParametersForEglImageTexture() {
}
} // namespace
+void AsyncPixelTransferDelegateAndroid::PerformNotifyCompletion(
+ AsyncMemoryParams mem_params,
+ ScopedSafeSharedMemory* safe_shared_memory,
+ const CompletionCallback& callback) {
+ TRACE_EVENT0("gpu", "PerformNotifyCompletion");
+ gfx::AsyncMemoryParams safe_mem_params = mem_params;
+ safe_mem_params.shared_memory = safe_shared_memory->shared_memory();
+ callback.Run(safe_mem_params);
+}
+
void AsyncPixelTransferDelegateAndroid::PerformAsyncTexImage2D(
TransferStateInternal* state,
AsyncTexImage2DParams tex_params,
@@ -642,7 +660,6 @@ void AsyncPixelTransferDelegateAndroid::PerformAsyncTexSubImage2D(
state->last_transfer_time_ = base::TimeTicks::HighResNow() - begin_time;
}
-
namespace {
bool IsPowerOfTwo (unsigned int x) {
return ((x != 0) && !(x & (x - 1)));
« no previous file with comments | « ui/gl/async_pixel_transfer_delegate.h ('k') | ui/gl/async_pixel_transfer_delegate_stub.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698