Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / gpu / command_buffer / service / cmd_parser.h
blobde2fe2977ff23a9d85fc432e7130c6159655c6bb
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
3 // found in the LICENSE file.
5 // This file contains the command parser class.
7 #ifndef GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_
8 #define GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_
10 #include "gpu/command_buffer/common/constants.h"
11 #include "gpu/command_buffer/common/cmd_buffer_common.h"
12 #include "gpu/gpu_export.h"
14 namespace gpu {
16 class AsyncAPIInterface;
18 // Command parser class. This class parses commands from a shared memory
19 // buffer, to implement some asynchronous RPC mechanism.
20 class GPU_EXPORT CommandParser {
21 public:
22 explicit CommandParser(AsyncAPIInterface* handler);
24 // Sets the buffer to read commands from.
25 void SetBuffer(
26 void* shm_address,
27 size_t shm_size,
28 ptrdiff_t offset,
29 size_t size);
31 // Gets the "get" pointer. The get pointer is an index into the command
32 // buffer considered as an array of CommandBufferEntry.
33 CommandBufferOffset get() const { return get_; }
35 // Sets the "get" pointer. The get pointer is an index into the command buffer
36 // considered as an array of CommandBufferEntry.
37 bool set_get(CommandBufferOffset get) {
38 if (get >= 0 && get < entry_count_) {
39 get_ = get;
40 return true;
42 return false;
45 // Sets the "put" pointer. The put pointer is an index into the command
46 // buffer considered as an array of CommandBufferEntry.
47 void set_put(CommandBufferOffset put) { put_ = put; }
49 // Gets the "put" pointer. The put pointer is an index into the command
50 // buffer considered as an array of CommandBufferEntry.
51 CommandBufferOffset put() const { return put_; }
53 // Checks whether there are commands to process.
54 bool IsEmpty() const { return put_ == get_; }
56 // Processes one command, updating the get pointer. This will return an error
57 // if there are no commands in the buffer.
58 error::Error ProcessCommand();
60 // Processes all commands until get == put.
61 error::Error ProcessAllCommands();
63 // Reports an error.
64 void ReportError(unsigned int command_id, error::Error result);
66 private:
67 CommandBufferOffset get_;
68 CommandBufferOffset put_;
69 CommandBufferEntry* buffer_;
70 int32 entry_count_;
71 AsyncAPIInterface* handler_;
74 // This class defines the interface for an asynchronous API handler, that
75 // is responsible for de-multiplexing commands and their arguments.
76 class AsyncAPIInterface {
77 public:
78 AsyncAPIInterface() {}
79 virtual ~AsyncAPIInterface() {}
81 // Executes a command.
82 // Parameters:
83 // command: the command index.
84 // arg_count: the number of CommandBufferEntry arguments.
85 // cmd_data: the command data.
86 // Returns:
87 // error::kNoError if no error was found, one of
88 // error::Error otherwise.
89 virtual error::Error DoCommand(
90 unsigned int command,
91 unsigned int arg_count,
92 const void* cmd_data) = 0;
94 // Returns a name for a command. Useful for logging / debuging.
95 virtual const char* GetCommandName(unsigned int command_id) const = 0;
98 } // namespace gpu
100 #endif // GPU_COMMAND_BUFFER_SERVICE_CMD_PARSER_H_