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

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

Issue 8865008: Revert 113479 - Revert "Revert 113250 - Add CommandBuffer::SetGetBuffer" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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 // This file contains the implementation of the command buffer helper class. 5 // This file contains the implementation of the command buffer helper class.
6 6
7 #include "../client/cmd_buffer_helper.h" 7 #include "../client/cmd_buffer_helper.h"
8 #include "../common/command_buffer.h" 8 #include "../common/command_buffer.h"
9 #include "../common/trace_event.h" 9 #include "../common/trace_event.h"
10 10
11 namespace gpu { 11 namespace gpu {
12 12
13 namespace { 13 namespace {
14 const int kCommandsPerFlushCheck = 100; 14 const int kCommandsPerFlushCheck = 100;
15 const double kFlushDelay = 1.0 / (5.0 * 60.0); 15 const double kFlushDelay = 1.0 / (5.0 * 60.0);
16 } 16 }
17 17
18 CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer) 18 CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer)
19 : command_buffer_(command_buffer), 19 : command_buffer_(command_buffer),
20 ring_buffer_id_(-1),
21 ring_buffer_size_(0),
22 entries_(NULL), 20 entries_(NULL),
23 total_entry_count_(0), 21 total_entry_count_(0),
24 usable_entry_count_(0), 22 usable_entry_count_(0),
25 token_(0), 23 token_(0),
26 put_(0), 24 put_(0),
27 last_put_sent_(0), 25 last_put_sent_(0),
28 commands_issued_(0), 26 commands_issued_(0),
29 last_flush_time_(0) { 27 last_flush_time_(0) {
30 } 28 }
31 29
32 bool CommandBufferHelper::AllocateRingBuffer() { 30 bool CommandBufferHelper::Initialize(int32 ring_buffer_size) {
33 int32 id = command_buffer_->CreateTransferBuffer(ring_buffer_size_, -1); 31 ring_buffer_ = command_buffer_->GetRingBuffer();
34 if (id < 0) {
35 return false;
36 }
37
38 ring_buffer_ = command_buffer_->GetTransferBuffer(id);
39 if (!ring_buffer_.ptr) 32 if (!ring_buffer_.ptr)
40 return false; 33 return false;
41 34
42 ring_buffer_id_ = id;
43 command_buffer_->SetGetBuffer(id);
44
45 // TODO(gman): Do we really need to call GetState here? We know get & put = 0
46 // Also do we need to check state.num_entries?
47 CommandBuffer::State state = command_buffer_->GetState(); 35 CommandBuffer::State state = command_buffer_->GetState();
48 entries_ = static_cast<CommandBufferEntry*>(ring_buffer_.ptr); 36 entries_ = static_cast<CommandBufferEntry*>(ring_buffer_.ptr);
49 int32 num_ring_buffer_entries = 37 int32 num_ring_buffer_entries = ring_buffer_size / sizeof(CommandBufferEntry);
50 ring_buffer_size_ / sizeof(CommandBufferEntry);
51 if (num_ring_buffer_entries > state.num_entries) { 38 if (num_ring_buffer_entries > state.num_entries) {
52 return false; 39 return false;
53 } 40 }
54 41
55 const int32 kJumpEntries = 42 const int32 kJumpEntries =
56 sizeof(cmd::Jump) / sizeof(*entries_); // NOLINT 43 sizeof(cmd::Jump) / sizeof(*entries_); // NOLINT
57 44
58 total_entry_count_ = num_ring_buffer_entries; 45 total_entry_count_ = num_ring_buffer_entries;
59 usable_entry_count_ = total_entry_count_ - kJumpEntries; 46 usable_entry_count_ = total_entry_count_ - kJumpEntries;
60 put_ = state.put_offset; 47 put_ = state.put_offset;
61 return true; 48 return true;
62 } 49 }
63 50
64 bool CommandBufferHelper::Initialize(int32 ring_buffer_size) {
65 ring_buffer_size_ = ring_buffer_size;
66 return AllocateRingBuffer();
67 }
68
69 CommandBufferHelper::~CommandBufferHelper() { 51 CommandBufferHelper::~CommandBufferHelper() {
70 } 52 }
71 53
72 bool CommandBufferHelper::FlushSync() { 54 bool CommandBufferHelper::FlushSync() {
73 last_flush_time_ = clock(); 55 last_flush_time_ = clock();
74 last_put_sent_ = put_; 56 last_put_sent_ = put_;
75 CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset()); 57 CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset());
76 return state.error == error::kNoError; 58 return state.error == error::kNoError;
77 } 59 }
78 60
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 } 181 }
200 return space; 182 return space;
201 } 183 }
202 184
203 error::Error CommandBufferHelper::GetError() { 185 error::Error CommandBufferHelper::GetError() {
204 CommandBuffer::State state = command_buffer_->GetState(); 186 CommandBuffer::State state = command_buffer_->GetState();
205 return static_cast<error::Error>(state.error); 187 return static_cast<error::Error>(state.error);
206 } 188 }
207 189
208 } // namespace gpu 190 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/cmd_buffer_helper.h ('k') | gpu/command_buffer/client/cmd_buffer_helper_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698