| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // This file contains the command parser class. | 5 // This file contains the command parser class. |
| 6 | 6 |
| 7 #ifndef GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ | 7 #ifndef GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ |
| 8 #define GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ | 8 #define GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ |
| 9 | 9 |
| 10 #include "gpu/command_buffer/common/constants.h" | 10 #include "gpu/command_buffer/common/constants.h" |
| 11 #include "gpu/command_buffer/common/cmd_buffer_common.h" | 11 #include "gpu/command_buffer/common/cmd_buffer_common.h" |
| 12 #include "gpu/gpu_export.h" | 12 #include "gpu/gpu_export.h" |
| 13 | 13 |
| 14 namespace gpu { | 14 namespace gpu { |
| 15 | 15 |
| 16 class AsyncAPIInterface; | 16 class AsyncAPIInterface; |
| 17 | 17 |
| 18 // Command parser class. This class parses commands from a shared memory | 18 // Command parser class. This class parses commands from a shared memory |
| 19 // buffer, to implement some asynchronous RPC mechanism. | 19 // buffer, to implement some asynchronous RPC mechanism. |
| 20 class GPU_EXPORT CommandParser { | 20 class GPU_EXPORT CommandParser { |
| 21 public: | 21 public: |
| 22 static const int kParseCommandsSlice = 20; |
| 23 |
| 22 explicit CommandParser(AsyncAPIInterface* handler); | 24 explicit CommandParser(AsyncAPIInterface* handler); |
| 23 | 25 |
| 24 // Sets the buffer to read commands from. | 26 // Sets the buffer to read commands from. |
| 25 void SetBuffer( | 27 void SetBuffer( |
| 26 void* shm_address, | 28 void* shm_address, |
| 27 size_t shm_size, | 29 size_t shm_size, |
| 28 ptrdiff_t offset, | 30 ptrdiff_t offset, |
| 29 size_t size); | 31 size_t size); |
| 30 | 32 |
| 31 // Gets the "get" pointer. The get pointer is an index into the command | 33 // Gets the "get" pointer. The get pointer is an index into the command |
| (...skipping 16 matching lines...) Expand all Loading... |
| 48 | 50 |
| 49 // Gets the "put" pointer. The put pointer is an index into the command | 51 // Gets the "put" pointer. The put pointer is an index into the command |
| 50 // buffer considered as an array of CommandBufferEntry. | 52 // buffer considered as an array of CommandBufferEntry. |
| 51 CommandBufferOffset put() const { return put_; } | 53 CommandBufferOffset put() const { return put_; } |
| 52 | 54 |
| 53 // Checks whether there are commands to process. | 55 // Checks whether there are commands to process. |
| 54 bool IsEmpty() const { return put_ == get_; } | 56 bool IsEmpty() const { return put_ == get_; } |
| 55 | 57 |
| 56 // Processes one command, updating the get pointer. This will return an error | 58 // Processes one command, updating the get pointer. This will return an error |
| 57 // if there are no commands in the buffer. | 59 // if there are no commands in the buffer. |
| 58 error::Error ProcessCommand(); | 60 error::Error ProcessCommands(int num_commands); |
| 59 | 61 |
| 60 // Processes all commands until get == put. | 62 // Processes all commands until get == put. |
| 61 error::Error ProcessAllCommands(); | 63 error::Error ProcessAllCommands(); |
| 62 | 64 |
| 63 // Reports an error. | 65 // Reports an error. |
| 64 void ReportError(unsigned int command_id, error::Error result); | 66 void ReportError(unsigned int command_id, error::Error result); |
| 65 | 67 |
| 66 private: | 68 private: |
| 67 CommandBufferOffset get_; | 69 CommandBufferOffset get_; |
| 68 CommandBufferOffset put_; | 70 CommandBufferOffset put_; |
| 69 CommandBufferEntry* buffer_; | 71 CommandBufferEntry* buffer_; |
| 70 int32 entry_count_; | 72 int32 entry_count_; |
| 71 AsyncAPIInterface* handler_; | 73 AsyncAPIInterface* handler_; |
| 72 }; | 74 }; |
| 73 | 75 |
| 74 // This class defines the interface for an asynchronous API handler, that | 76 // This class defines the interface for an asynchronous API handler, that |
| 75 // is responsible for de-multiplexing commands and their arguments. | 77 // is responsible for de-multiplexing commands and their arguments. |
| 76 class AsyncAPIInterface { | 78 class AsyncAPIInterface { |
| 77 public: | 79 public: |
| 78 AsyncAPIInterface() {} | 80 AsyncAPIInterface() {} |
| 79 virtual ~AsyncAPIInterface() {} | 81 virtual ~AsyncAPIInterface() {} |
| 80 | 82 |
| 81 // Executes a command. | 83 // Executes a single command. |
| 82 // Parameters: | 84 // Parameters: |
| 83 // command: the command index. | 85 // command: the command index. |
| 84 // arg_count: the number of CommandBufferEntry arguments. | 86 // arg_count: the number of CommandBufferEntry arguments. |
| 85 // cmd_data: the command data. | 87 // cmd_data: the command data. |
| 86 // Returns: | 88 // Returns: |
| 87 // error::kNoError if no error was found, one of | 89 // error::kNoError if no error was found, one of |
| 88 // error::Error otherwise. | 90 // error::Error otherwise. |
| 89 virtual error::Error DoCommand( | 91 virtual error::Error DoCommand( |
| 90 unsigned int command, | 92 unsigned int command, |
| 91 unsigned int arg_count, | 93 unsigned int arg_count, |
| 92 const void* cmd_data) = 0; | 94 const void* cmd_data) = 0; |
| 93 | 95 |
| 96 // Executes multiple commands. |
| 97 // Parameters: |
| 98 // todo... |
| 99 virtual error::Error DoCommands(unsigned int num_commands, |
| 100 const void* buffer, |
| 101 int num_entries, |
| 102 int* entries_processed); |
| 103 |
| 94 // Returns a name for a command. Useful for logging / debuging. | 104 // Returns a name for a command. Useful for logging / debuging. |
| 95 virtual const char* GetCommandName(unsigned int command_id) const = 0; | 105 virtual const char* GetCommandName(unsigned int command_id) const = 0; |
| 96 }; | 106 }; |
| 97 | 107 |
| 98 } // namespace gpu | 108 } // namespace gpu |
| 99 | 109 |
| 100 #endif // GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ | 110 #endif // GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_ |
| OLD | NEW |