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

Unified Diff: gpu/command_buffer/tests/gl_manager.cc

Issue 1568563002: Added a way for sync point clients to issue out of order waits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Allow WaitOutOfOrder if no client order data Created 4 years, 11 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 | « gpu/command_buffer/tests/gl_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/tests/gl_manager.cc
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 86329147466b63f04755b5a0e502167d68d18f7a..812d8fd505e668e5b77066eafa5db46cb904cac3 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -21,6 +21,7 @@
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/common/constants.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/common/value_state.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/context_group.h"
@@ -122,6 +123,8 @@ GLManager::Options::Options()
GLManager::GLManager()
: sync_point_manager_(nullptr),
context_lost_allowed_(false),
+ pause_commands_(false),
+ paused_order_num_(0),
command_buffer_id_(g_next_command_buffer_id++),
next_fence_sync_release_(1) {
SetupBaseContext();
@@ -402,11 +405,25 @@ void GLManager::PumpCommands() {
uint32_t order_num = 0;
if (sync_point_manager_) {
// If sync point manager is supported, assign order numbers to commands.
- order_num = sync_point_order_data_->GenerateUnprocessedOrderNumber(
- sync_point_manager_);
+ if (paused_order_num_) {
+ // Was previous paused, continue to process the order number.
+ order_num = paused_order_num_;
+ paused_order_num_ = 0;
+ } else {
+ order_num = sync_point_order_data_->GenerateUnprocessedOrderNumber(
+ sync_point_manager_);
+ }
sync_point_order_data_->BeginProcessingOrderNumber(order_num);
}
+ if (pause_commands_) {
+ // Do not process commands, simply store the current order number.
+ paused_order_num_ = order_num;
+
+ sync_point_order_data_->PauseProcessingOrderNumber(order_num);
+ return;
+ }
+
gpu_scheduler_->PutChanged();
::gpu::CommandBuffer::State state = command_buffer_->GetLastState();
if (!context_lost_allowed_) {
@@ -533,7 +550,20 @@ bool GLManager::IsFenceSyncFlushReceived(uint64_t release) {
void GLManager::SignalSyncToken(const gpu::SyncToken& sync_token,
const base::Closure& callback) {
- NOTIMPLEMENTED();
+ if (sync_point_manager_) {
+ scoped_refptr<gpu::SyncPointClientState> release_state =
+ sync_point_manager_->GetSyncPointClientState(
+ sync_token.namespace_id(), sync_token.command_buffer_id());
+
+ if (release_state) {
+ sync_point_client_->WaitOutOfOrder(release_state.get(),
+ sync_token.release_count(), callback);
+ return;
+ }
+ }
+
+ // Something went wrong, just run the callback now.
+ callback.Run();
}
bool GLManager::CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) {
« no previous file with comments | « gpu/command_buffer/tests/gl_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698