Index: gpu/command_buffer/client/cmd_buffer_helper.h |
diff --git a/gpu/command_buffer/client/cmd_buffer_helper.h b/gpu/command_buffer/client/cmd_buffer_helper.h |
index a50dc7bfe4e4e73e4bc4ce392bc1cb85e32182be..528695c04af764c014da18c6f90997af66c89ec4 100644 |
--- a/gpu/command_buffer/client/cmd_buffer_helper.h |
+++ b/gpu/command_buffer/client/cmd_buffer_helper.h |
@@ -83,6 +83,15 @@ class GPU_EXPORT CommandBufferHelper { |
// shutdown. |
int32 InsertToken(); |
+ // Returns true if the token has passed. |
+ // Parameters: |
+ // the value of the token to check whether it has passed |
+ bool HasTokenPassed(int32 token) const { |
+ if (token > token_) |
+ return true; // we wrapped |
+ return last_token_read() >= token; |
+ } |
+ |
// Waits until the token of a particular value has passed through the command |
// stream (i.e. commands inserted before that token have been executed). |
// NOTE: This will call Flush if it needs to block. |
@@ -90,6 +99,23 @@ class GPU_EXPORT CommandBufferHelper { |
// the value of the token to wait for. |
void WaitForToken(int32 token); |
+ // Returns true if the serial has passed. |
+ // |
+ // NOTE: This will detect wrapped serials by checking if the most significant |
+ // bit of serial to check is 1 but the last read is 0, i.e. the uint32 |
+ // wrapped. |
+ // |
+ // Parameters: |
+ // the value of the serial to check whether it has passed |
+ bool HasSerialPassed(uint32 serial) const { |
+ uint32 last_serial = last_serial_read(); |
+ if (serial <= last_serial) |
+ return true; |
+ if (serial & 0x80000000 && !(last_serial & 0x80000000)) |
+ return true; // we wrapped |
+ return false; |
+ } |
+ |
// Called prior to each command being issued. Waits for a certain amount of |
// space to be available. Returns address of space. |
CommandBufferEntry* GetSpace(uint32 entries); |
@@ -244,6 +270,11 @@ class GPU_EXPORT CommandBufferHelper { |
bool AllocateRingBuffer(); |
void FreeResources(); |
+ // Get the serial number last read by the command buffer. |
+ uint32 last_serial_read() const { |
+ return command_buffer_->GetLastState().serial; |
+ } |
+ |
CommandBuffer* command_buffer_; |
int32 ring_buffer_id_; |
int32 ring_buffer_size_; |