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

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

Issue 83183005: Add synthetic delay points for latency testing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/async_pixel_transfer_manager_egl.cc
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
index 7e0d515e49c172b1ede3739bdceeca60b1947758..620127b9a0526b2266fe53897beaa9fc4c848539 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
@@ -237,7 +238,9 @@ class TransferStateInternal
transfer_completion_.Reset();
}
- void MarkAsCompleted() {
+ void MarkAsCompleted(base::AtomicRefCount* pending_uploads) {
+ if (!base::AtomicRefCountDec(pending_uploads))
+ TRACE_EVENT_SYNTHETIC_DELAY_APPLY("gpu.AsyncTexImage");
transfer_completion_.Signal();
}
@@ -252,17 +255,19 @@ class TransferStateInternal
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
ScopedSafeSharedMemory* safe_shared_memory,
- scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
+ scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats,
+ base::AtomicRefCount* pending_uploads) {
TRACE_EVENT2("gpu",
"PerformAsyncTexImage",
"width",
tex_params.width,
"height",
tex_params.height);
+ TRACE_EVENT_SYNTHETIC_DELAY_ACTIVATE("gpu.AsyncTexImage");
DCHECK(!thread_texture_id_);
DCHECK_EQ(0, tex_params.level);
if (EGL_NO_IMAGE_KHR != egl_image_) {
- MarkAsCompleted();
+ MarkAsCompleted(pending_uploads);
return;
}
@@ -302,7 +307,7 @@ class TransferStateInternal
}
WaitForLastUpload();
- MarkAsCompleted();
+ MarkAsCompleted(pending_uploads);
DCHECK(CHECK_GL());
if (texture_upload_stats.get()) {
@@ -315,13 +320,15 @@ class TransferStateInternal
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
ScopedSafeSharedMemory* safe_shared_memory,
- scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
+ scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats,
+ base::AtomicRefCount* pending_uploads ) {
TRACE_EVENT2("gpu",
"PerformAsyncTexSubImage2D",
"width",
tex_params.width,
"height",
tex_params.height);
+ TRACE_EVENT_SYNTHETIC_DELAY_ACTIVATE("gpu.AsyncTexImage");
DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_);
DCHECK_EQ(0, tex_params.level);
@@ -348,7 +355,7 @@ class TransferStateInternal
DoTexSubImage2D(tex_params, data);
}
WaitForLastUpload();
- MarkAsCompleted();
+ MarkAsCompleted(pending_uploads);
DCHECK(CHECK_GL());
if (texture_upload_stats.get()) {
@@ -520,6 +527,7 @@ void AsyncPixelTransferDelegateEGL::AsyncTexImage2D(
state_->bind_callback_ = bind_callback;
// Mark the transfer in progress.
+ base::AtomicRefCountInc(&shared_state_->pending_uploads);
state_->MarkAsTransferIsInProgress();
// Duplicate the shared memory so there is no way we can get
@@ -533,7 +541,8 @@ void AsyncPixelTransferDelegateEGL::AsyncTexImage2D(
base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
mem_params.shared_memory,
mem_params.shm_size)),
- shared_state_->texture_upload_stats));
+ shared_state_->texture_upload_stats,
+ &shared_state_->pending_uploads));
DCHECK(CHECK_GL());
}
@@ -554,6 +563,7 @@ void AsyncPixelTransferDelegateEGL::AsyncTexSubImage2D(
DCHECK_EQ(tex_params.level, 0);
// Mark the transfer in progress.
+ base::AtomicRefCountInc(&shared_state_->pending_uploads);
state_->MarkAsTransferIsInProgress();
// If this wasn't async allocated, we don't have an EGLImage yet.
@@ -571,7 +581,8 @@ void AsyncPixelTransferDelegateEGL::AsyncTexSubImage2D(
base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
mem_params.shared_memory,
mem_params.shm_size)),
- shared_state_->texture_upload_stats));
+ shared_state_->texture_upload_stats,
+ &shared_state_->pending_uploads));
DCHECK(CHECK_GL());
}
@@ -690,7 +701,8 @@ bool AsyncPixelTransferDelegateEGL::WorkAroundAsyncTexSubImage2D(
AsyncPixelTransferManagerEGL::SharedState::SharedState()
// TODO(reveman): Skip this if --enable-gpu-benchmarking is not present.
- : texture_upload_stats(new AsyncPixelTransferUploadStats) {
+ : texture_upload_stats(new AsyncPixelTransferUploadStats),
+ pending_uploads(0) {
std::string vendor;
vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
is_imagination = vendor.find("Imagination") != std::string::npos;

Powered by Google App Engine
This is Rietveld 408576698