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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 116863003: gpu: Reuse transfer buffers more aggresively (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Async upload token part of existing Async command; use separate shared memory to sync async upload … Created 6 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
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index f913c4883d5ebdb892dd908c2d97842b026ba4fc..aeaad45ca608785ef6bcebd631aa07b0b56d20b1 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -15,6 +15,7 @@
#include "base/at_exit.h"
#include "base/bind.h"
+#include "base/callback_helpers.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/debug/trace_event_synthetic_delay.h"
@@ -10290,6 +10291,13 @@ bool GLES2DecoderImpl::ValidateAsyncTransfer(
return true;
}
+namespace {
+void UpdateAsyncUploadToken(AsyncUploadSync* sync, uint32 async_upload_token) {
+ base::subtle::MemoryBarrier();
epennerAtGoogle 2014/02/07 20:43:58 See my other comment on MemoryBarriers. Wouldn't h
+ sync->async_token = async_upload_token;
+}
+}
+
error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
uint32 immediate_data_size, const cmds::AsyncTexImage2DCHROMIUM& c) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM");
@@ -10306,6 +10314,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id);
uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset);
uint32 pixels_size;
+ uint32 async_upload_token = static_cast<uint32>(c.async_upload_token);
+ uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id);
+ uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
+
+ base::ScopedClosureRunner scoped_completion_callback;
+ if (async_upload_token) {
+ AsyncUploadSync* sync = GetSharedMemoryAs<AsyncUploadSync*>(
+ sync_data_shm_id, sync_data_shm_offset, sizeof(*sync));
piman 2014/02/07 22:58:20 The shared memory backing the AsyncUploadSync coul
jadahl 2014/02/08 09:18:25 As epenner replied elsewhere, SafeSharedMemoryPool
epennerAtGoogle 2014/02/10 23:12:06 Bug for reference counting SharedMemory: https://c
+ scoped_completion_callback.Reset(base::Bind(
+ &AsyncPixelTransferManager::AsyncRun,
+ base::Unretained(GetAsyncPixelTransferManager()),
+ base::Bind(&UpdateAsyncUploadToken,
+ sync,
+ async_upload_token)));
+ }
// TODO(epenner): Move this and copies of this memory validation
// into ValidateTexImage2D step.
@@ -10400,6 +10423,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM(
GLsizei height = static_cast<GLsizei>(c.height);
GLenum format = static_cast<GLenum>(c.format);
GLenum type = static_cast<GLenum>(c.type);
+ uint32 async_upload_token = static_cast<uint32>(c.async_upload_token);
+ uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id);
+ uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
+
+ base::ScopedClosureRunner scoped_completion_callback;
+ if (async_upload_token) {
+ AsyncUploadSync* sync = GetSharedMemoryAs<AsyncUploadSync*>(
+ sync_data_shm_id, sync_data_shm_offset, sizeof(*sync));
+ scoped_completion_callback.Reset(base::Bind(
+ &AsyncPixelTransferManager::AsyncRun,
+ base::Unretained(GetAsyncPixelTransferManager()),
+ base::Bind(&UpdateAsyncUploadToken,
+ sync,
+ async_upload_token)));
+ }
// TODO(epenner): Move this and copies of this memory validation
// into ValidateTexSubImage2D step.

Powered by Google App Engine
This is Rietveld 408576698