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

Side by Side Diff: command_buffer/client/cross/cmd_buffer_helper.cc

Issue 212018: Change command buffer client code to use structures.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 3 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 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 25 matching lines...) Expand all
36 36
37 namespace o3d { 37 namespace o3d {
38 namespace command_buffer { 38 namespace command_buffer {
39 39
40 CommandBufferHelper::CommandBufferHelper(BufferSyncInterface *interface) 40 CommandBufferHelper::CommandBufferHelper(BufferSyncInterface *interface)
41 : interface_(interface), 41 : interface_(interface),
42 entries_(NULL), 42 entries_(NULL),
43 entry_count_(0), 43 entry_count_(0),
44 token_(0) { 44 token_(0) {
45 // The interface should be connected already. 45 // The interface should be connected already.
46 DCHECK_NE(BufferSyncInterface::NOT_CONNECTED, interface_->GetStatus()); 46 DCHECK_NE(BufferSyncInterface::kNotConnected, interface_->GetStatus());
47 } 47 }
48 48
49 bool CommandBufferHelper::Init(unsigned int entry_count) { 49 bool CommandBufferHelper::Init(unsigned int entry_count) {
50 if (entry_count == 0) 50 if (entry_count == 0)
51 return false; 51 return false;
52 size_t size = entry_count * sizeof(CommandBufferEntry); // NOLINT 52 size_t size = entry_count * sizeof(CommandBufferEntry); // NOLINT
53 shm_handle_ = CreateShm(size); 53 shm_handle_ = CreateShm(size);
54 if (shm_handle_ == kRPCInvalidHandle) 54 if (shm_handle_ == kRPCInvalidHandle)
55 return false; 55 return false;
56 void *address = MapShm(shm_handle_, size); 56 void *address = MapShm(shm_handle_, size);
(...skipping 30 matching lines...) Expand all
87 } 87 }
88 88
89 // Inserts a new token into the command stream. It uses an increasing value 89 // Inserts a new token into the command stream. It uses an increasing value
90 // scheme so that we don't lose tokens (a token has passed if the current token 90 // scheme so that we don't lose tokens (a token has passed if the current token
91 // value is higher than that token). Calls Finish() if the token value wraps, 91 // value is higher than that token). Calls Finish() if the token value wraps,
92 // which will be rare. 92 // which will be rare.
93 unsigned int CommandBufferHelper::InsertToken() { 93 unsigned int CommandBufferHelper::InsertToken() {
94 ++token_; 94 ++token_;
95 CommandBufferEntry args; 95 CommandBufferEntry args;
96 args.value_uint32 = token_; 96 args.value_uint32 = token_;
97 AddCommand(SET_TOKEN, 1, &args); 97 AddCommand(command_buffer::kSetToken, 1, &args);
98 if (token_ == 0) { 98 if (token_ == 0) {
99 // we wrapped 99 // we wrapped
100 Finish(); 100 Finish();
101 last_token_read_ = interface_->GetToken(); 101 last_token_read_ = interface_->GetToken();
102 DCHECK_EQ(token_, last_token_read_); 102 DCHECK_EQ(token_, last_token_read_);
103 } 103 }
104 return token_; 104 return token_;
105 } 105 }
106 106
107 // Waits until the current token value is greater or equal to the value passed 107 // Waits until the current token value is greater or equal to the value passed
(...skipping 14 matching lines...) Expand all
122 } 122 }
123 123
124 // Waits for get to change. In case get doesn't change or becomes invalid, 124 // Waits for get to change. In case get doesn't change or becomes invalid,
125 // check for an error. 125 // check for an error.
126 void CommandBufferHelper::WaitForGetChange() { 126 void CommandBufferHelper::WaitForGetChange() {
127 CommandBufferOffset new_get = interface_->WaitGetChanges(get_); 127 CommandBufferOffset new_get = interface_->WaitGetChanges(get_);
128 if (new_get == get_ || new_get == -1) { 128 if (new_get == get_ || new_get == -1) {
129 // If get_ didn't change or is invalid (-1), it means an error may have 129 // If get_ didn't change or is invalid (-1), it means an error may have
130 // occured. Check that. 130 // occured. Check that.
131 BufferSyncInterface::ParserStatus status = interface_->GetStatus(); 131 BufferSyncInterface::ParserStatus status = interface_->GetStatus();
132 if (status != BufferSyncInterface::PARSING) { 132 if (status != BufferSyncInterface::kParsing) {
133 switch (status) { 133 switch (status) {
134 case BufferSyncInterface::NOT_CONNECTED: 134 case BufferSyncInterface::kNotConnected:
135 LOG(FATAL) << "Service disconnected."; 135 LOG(FATAL) << "Service disconnected.";
136 return; 136 return;
137 case BufferSyncInterface::NO_BUFFER: 137 case BufferSyncInterface::kNoBuffer:
138 LOG(FATAL) << "Service doesn't have a buffer set."; 138 LOG(FATAL) << "Service doesn't have a buffer set.";
139 return; 139 return;
140 case BufferSyncInterface::PARSE_ERROR: { 140 case BufferSyncInterface::kParseError: {
141 BufferSyncInterface::ParseError error = interface_->GetParseError(); 141 BufferSyncInterface::ParseError error = interface_->GetParseError();
142 LOG(WARNING) << "Parse error: " << error; 142 LOG(WARNING) << "Parse error: " << error;
143 return; 143 return;
144 } 144 }
145 case BufferSyncInterface::PARSING: 145 case BufferSyncInterface::kParsing:
146 break; 146 break;
147 } 147 }
148 } 148 }
149 } 149 }
150 get_ = new_get; 150 get_ = new_get;
151 } 151 }
152 152
153 // Waits for available entries, basically waiting until get >= put + count + 1. 153 // Waits for available entries, basically waiting until get >= put + count + 1.
154 // It actually waits for contiguous entries, so it may need to wrap the buffer 154 // It actually waits for contiguous entries, so it may need to wrap the buffer
155 // around, adding noops. Thus this function may change the value of put_. 155 // around, adding noops. Thus this function may change the value of put_.
(...skipping 18 matching lines...) Expand all
174 } 174 }
175 put_ = 0; 175 put_ = 0;
176 } 176 }
177 // If we have enough room, return immediatly. 177 // If we have enough room, return immediatly.
178 if (count <= AvailableEntries()) return; 178 if (count <= AvailableEntries()) return;
179 // Otherwise flush, and wait until we do have enough room. 179 // Otherwise flush, and wait until we do have enough room.
180 Flush(); 180 Flush();
181 while (AvailableEntries() < count) WaitForGetChange(); 181 while (AvailableEntries() < count) WaitForGetChange();
182 } 182 }
183 183
184 CommandBufferEntry* CommandBufferHelper::GetSpace(uint32 entries) {
185 WaitForAvailableEntries(entries);
186 CommandBufferEntry* space = &entries_[put_];
187 put_ += entries;
188 return space;
189 }
190
184 } // namespace command_buffer 191 } // namespace command_buffer
185 } // namespace o3d 192 } // namespace o3d
OLDNEW
« no previous file with comments | « command_buffer/client/cross/cmd_buffer_helper.h ('k') | command_buffer/client/cross/cmd_buffer_helper_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698