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

Side by Side Diff: gpu/command_buffer/common/command_buffer.h

Issue 6883179: Rework FlushSync to return early if commands have been processed since the last update (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style Created 9 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ 5 #ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_
6 #define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ 6 #define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_
7 7
8 #include "../common/buffer.h" 8 #include "../common/buffer.h"
9 #include "../common/constants.h" 9 #include "../common/constants.h"
10 10
11 namespace base { 11 namespace base {
12 class SharedMemory; 12 class SharedMemory;
13 } 13 }
14 14
15 namespace gpu { 15 namespace gpu {
16 16
17 // Common interface for CommandBuffer implementations. 17 // Common interface for CommandBuffer implementations.
18 class CommandBuffer { 18 class CommandBuffer {
19 public: 19 public:
20 enum { 20 enum {
21 kMaxCommandBufferSize = 4 * 1024 * 1024 21 kMaxCommandBufferSize = 4 * 1024 * 1024
22 }; 22 };
23 23
24 struct State { 24 struct State {
25 State() 25 State()
26 : num_entries(0), 26 : num_entries(0),
27 get_offset(0), 27 get_offset(0),
28 put_offset(0), 28 put_offset(0),
29 token(-1), 29 token(-1),
30 error(error::kNoError) { 30 error(error::kNoError),
31 generation(0) {
31 } 32 }
32 33
33 // Size of the command buffer in command buffer entries. 34 // Size of the command buffer in command buffer entries.
34 int32 num_entries; 35 int32 num_entries;
35 36
36 // The offset (in entries) from which the reader is reading. 37 // The offset (in entries) from which the reader is reading.
37 int32 get_offset; 38 int32 get_offset;
38 39
39 // The offset (in entries) at which the writer is writing. 40 // The offset (in entries) at which the writer is writing.
40 int32 put_offset; 41 int32 put_offset;
41 42
42 // The current token value. This is used by the writer to defer 43 // The current token value. This is used by the writer to defer
43 // changes to shared memory objects until the reader has reached a certain 44 // changes to shared memory objects until the reader has reached a certain
44 // point in the command buffer. The reader is responsible for updating the 45 // point in the command buffer. The reader is responsible for updating the
45 // token value, for example in response to an asynchronous set token command 46 // token value, for example in response to an asynchronous set token command
46 // embedded in the command buffer. The default token value is zero. 47 // embedded in the command buffer. The default token value is zero.
47 int32 token; 48 int32 token;
48 49
49 // Error status. 50 // Error status.
50 error::Error error; 51 error::Error error;
52
53 // Generation index of this state. The generation index is incremented every
54 // time a new state is retrieved from the command processor, so that
55 // consistency can be kept even if IPC messages are processed out-of-order.
56 uint32 generation;
51 }; 57 };
52 58
53 CommandBuffer() { 59 CommandBuffer() {
54 } 60 }
55 61
56 virtual ~CommandBuffer() { 62 virtual ~CommandBuffer() {
57 } 63 }
58 64
59 // Initialize the command buffer with the given size. 65 // Initialize the command buffer with the given size.
60 virtual bool Initialize(int32 size) = 0; 66 virtual bool Initialize(int32 size) = 0;
61 67
62 // Initialize the command buffer using the given preallocated buffer. 68 // Initialize the command buffer using the given preallocated buffer.
63 virtual bool Initialize(base::SharedMemory* buffer, int32 size) = 0; 69 virtual bool Initialize(base::SharedMemory* buffer, int32 size) = 0;
64 70
65 // Gets the ring buffer for the command buffer. 71 // Gets the ring buffer for the command buffer.
66 virtual Buffer GetRingBuffer() = 0; 72 virtual Buffer GetRingBuffer() = 0;
67 73
68 // Returns the current status. 74 // Returns the current status.
69 virtual State GetState() = 0; 75 virtual State GetState() = 0;
70 76
71 // The writer calls this to update its put offset. This ensures the reader 77 // The writer calls this to update its put offset. This ensures the reader
72 // sees the latest added commands, and will eventually process them. 78 // sees the latest added commands, and will eventually process them.
73 virtual void Flush(int32 put_offset) = 0; 79 virtual void Flush(int32 put_offset) = 0;
74 80
75 // The writer calls this to update its put offset. This function returns the 81 // The writer calls this to update its put offset. This function returns the
76 // reader's most recent get offset. Does not return until after the put offset 82 // reader's most recent get offset. Does not return until after the put offset
77 // change callback has been invoked. Returns -1 if the put offset is invalid. 83 // change callback has been invoked. Returns -1 if the put offset is invalid.
78 // As opposed to Flush(), this function guarantees that the reader has 84 // If last_known_get is different from the reader's current get pointer, this
79 // processed some commands before returning (assuming the command buffer isn't 85 // function will return immediately, otherwise it guarantees that the reader
80 // empty and there is no error). 86 // has processed some commands before returning (assuming the command buffer
81 virtual State FlushSync(int32 put_offset) = 0; 87 // isn't empty and there is no error).
88 virtual State FlushSync(int32 put_offset, int32 last_known_get) = 0;
82 89
83 // Sets the current get offset. This can be called from any thread. 90 // Sets the current get offset. This can be called from any thread.
84 virtual void SetGetOffset(int32 get_offset) = 0; 91 virtual void SetGetOffset(int32 get_offset) = 0;
85 92
86 // Create a transfer buffer and return a handle that uniquely 93 // Create a transfer buffer and return a handle that uniquely
87 // identifies it or -1 on error. id_request lets the caller request a 94 // identifies it or -1 on error. id_request lets the caller request a
88 // specific id for the transfer buffer, or -1 if the caller does not care. 95 // specific id for the transfer buffer, or -1 if the caller does not care.
89 // If the requested id can not be fulfilled, a different id will be returned. 96 // If the requested id can not be fulfilled, a different id will be returned.
90 // id_request must be either -1 or between 0 and 100. 97 // id_request must be either -1 or between 0 and 100.
91 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) = 0; 98 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) = 0;
(...skipping 20 matching lines...) Expand all
112 // Allows the reader to set the current parse error. 119 // Allows the reader to set the current parse error.
113 virtual void SetParseError(error::Error) = 0; 120 virtual void SetParseError(error::Error) = 0;
114 121
115 private: 122 private:
116 DISALLOW_COPY_AND_ASSIGN(CommandBuffer); 123 DISALLOW_COPY_AND_ASSIGN(CommandBuffer);
117 }; 124 };
118 125
119 } // namespace gpu 126 } // namespace gpu
120 127
121 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ 128 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/ring_buffer_test.cc ('k') | gpu/command_buffer/common/command_buffer_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698