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

Side by Side Diff: gpu/command_buffer/service/gpu_scheduler_unittest.cc

Issue 8566059: Add CommandBuffer::SetGetBuffer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase part 2 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
« no previous file with comments | « gpu/command_buffer/service/gpu_scheduler.cc ('k') | gpu/demos/framework/window.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "base/message_loop.h" 5 #include "base/message_loop.h"
6 #include "gpu/command_buffer/common/command_buffer_mock.h" 6 #include "gpu/command_buffer/common/command_buffer_mock.h"
7 #include "gpu/command_buffer/service/gpu_scheduler.h" 7 #include "gpu/command_buffer/service/gpu_scheduler.h"
8 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 8 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" 9 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
10 #include "gpu/command_buffer/service/mocks.h" 10 #include "gpu/command_buffer/service/mocks.h"
(...skipping 12 matching lines...) Expand all
23 using testing::SetArgumentPointee; 23 using testing::SetArgumentPointee;
24 using testing::StrictMock; 24 using testing::StrictMock;
25 25
26 namespace gpu { 26 namespace gpu {
27 27
28 const size_t kRingBufferSize = 1024; 28 const size_t kRingBufferSize = 1024;
29 const size_t kRingBufferEntries = kRingBufferSize / sizeof(CommandBufferEntry); 29 const size_t kRingBufferEntries = kRingBufferSize / sizeof(CommandBufferEntry);
30 30
31 class GpuSchedulerTest : public testing::Test { 31 class GpuSchedulerTest : public testing::Test {
32 protected: 32 protected:
33 static const int32 kTransferBufferId = 123;
34
33 virtual void SetUp() { 35 virtual void SetUp() {
34 shared_memory_.reset(new ::base::SharedMemory); 36 shared_memory_.reset(new ::base::SharedMemory);
35 shared_memory_->CreateAndMapAnonymous(kRingBufferSize); 37 shared_memory_->CreateAndMapAnonymous(kRingBufferSize);
36 buffer_ = static_cast<int32*>(shared_memory_->memory()); 38 buffer_ = static_cast<int32*>(shared_memory_->memory());
37 shared_memory_buffer_.ptr = buffer_; 39 shared_memory_buffer_.ptr = buffer_;
38 shared_memory_buffer_.size = kRingBufferSize; 40 shared_memory_buffer_.size = kRingBufferSize;
39 memset(buffer_, 0, kRingBufferSize); 41 memset(buffer_, 0, kRingBufferSize);
40 42
41 command_buffer_.reset(new MockCommandBuffer); 43 command_buffer_.reset(new MockCommandBuffer);
42 ON_CALL(*command_buffer_.get(), GetRingBuffer())
43 .WillByDefault(Return(shared_memory_buffer_));
44 44
45 CommandBuffer::State default_state; 45 CommandBuffer::State default_state;
46 default_state.num_entries = kRingBufferEntries; 46 default_state.num_entries = kRingBufferEntries;
47 ON_CALL(*command_buffer_.get(), GetState()) 47 ON_CALL(*command_buffer_.get(), GetState())
48 .WillByDefault(Return(default_state)); 48 .WillByDefault(Return(default_state));
49 49
50 async_api_.reset(new StrictMock<AsyncAPIMock>);
51
52 decoder_.reset(new gles2::MockGLES2Decoder()); 50 decoder_.reset(new gles2::MockGLES2Decoder());
53
54 parser_ = new CommandParser(buffer_,
55 kRingBufferEntries,
56 0,
57 kRingBufferEntries,
58 0,
59 async_api_.get());
60
61 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), 51 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(),
62 decoder_.get(), 52 decoder_.get(),
63 parser_)); 53 NULL));
54 EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId))
55 .WillOnce(Return(shared_memory_buffer_));
56 EXPECT_CALL(*command_buffer_, SetGetBuffer(kTransferBufferId));
57 EXPECT_CALL(*command_buffer_, SetGetOffset(0));
58 EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId));
64 } 59 }
65 60
66 virtual void TearDown() { 61 virtual void TearDown() {
67 // Ensure that any unexpected tasks posted by the GPU scheduler are executed 62 // Ensure that any unexpected tasks posted by the GPU scheduler are executed
68 // in order to fail the test. 63 // in order to fail the test.
69 MessageLoop::current()->RunAllPending(); 64 MessageLoop::current()->RunAllPending();
70 } 65 }
71 66
72 error::Error GetError() { 67 error::Error GetError() {
73 return command_buffer_->GetState().error; 68 return command_buffer_->GetState().error;
74 } 69 }
75 70
76 #if defined(OS_MACOSX) 71 #if defined(OS_MACOSX)
77 base::mac::ScopedNSAutoreleasePool autorelease_pool_; 72 base::mac::ScopedNSAutoreleasePool autorelease_pool_;
78 #endif 73 #endif
79 MessageLoop message_loop; 74 MessageLoop message_loop;
80 scoped_ptr<MockCommandBuffer> command_buffer_; 75 scoped_ptr<MockCommandBuffer> command_buffer_;
81 scoped_ptr<base::SharedMemory> shared_memory_; 76 scoped_ptr<base::SharedMemory> shared_memory_;
82 Buffer shared_memory_buffer_; 77 Buffer shared_memory_buffer_;
83 int32* buffer_; 78 int32* buffer_;
84 scoped_ptr<gles2::MockGLES2Decoder> decoder_; 79 scoped_ptr<gles2::MockGLES2Decoder> decoder_;
85 CommandParser* parser_;
86 scoped_ptr<AsyncAPIMock> async_api_;
87 scoped_ptr<GpuScheduler> scheduler_; 80 scoped_ptr<GpuScheduler> scheduler_;
88 }; 81 };
89 82
90 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) { 83 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) {
91 CommandBuffer::State state; 84 CommandBuffer::State state;
92 85
93 state.put_offset = 0; 86 state.put_offset = 0;
94 EXPECT_CALL(*command_buffer_, GetState()) 87 EXPECT_CALL(*command_buffer_, GetState())
95 .WillRepeatedly(Return(state)); 88 .WillRepeatedly(Return(state));
96 89
97 EXPECT_CALL(*command_buffer_, SetParseError(_)) 90 EXPECT_CALL(*command_buffer_, SetParseError(_))
98 .Times(0); 91 .Times(0);
99 92
100 scheduler_->PutChanged(); 93 scheduler_->PutChanged();
101 } 94 }
102 95
96 TEST_F(GpuSchedulerTest, GetSetBuffer) {
97 CommandBuffer::State state;
98
99 // Set the get offset to something not 0.
100 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
101 scheduler_->SetGetOffset(2);
102 EXPECT_EQ(2, scheduler_->GetGetOffset());
103
104 // Set the buffer.
105 EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId))
106 .WillOnce(Return(shared_memory_buffer_));
107 EXPECT_CALL(*command_buffer_, SetGetBuffer(kTransferBufferId));
108 EXPECT_CALL(*command_buffer_, SetGetOffset(0));
109 EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId));
110
111 // Check the get offset was reset.
112 EXPECT_EQ(0, scheduler_->GetGetOffset());
113 }
114
103 TEST_F(GpuSchedulerTest, ProcessesOneCommand) { 115 TEST_F(GpuSchedulerTest, ProcessesOneCommand) {
104 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 116 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
105 header[0].command = 7; 117 header[0].command = 7;
106 header[0].size = 2; 118 header[0].size = 2;
107 buffer_[1] = 123; 119 buffer_[1] = 123;
108 120
109 CommandBuffer::State state; 121 CommandBuffer::State state;
110 122
111 state.put_offset = 2; 123 state.put_offset = 2;
112 EXPECT_CALL(*command_buffer_, GetState()) 124 EXPECT_CALL(*command_buffer_, GetState())
113 .WillRepeatedly(Return(state)); 125 .WillRepeatedly(Return(state));
114 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 126 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
115 127
116 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 128 EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0]))
117 .WillOnce(Return(error::kNoError)); 129 .WillOnce(Return(error::kNoError));
118 130
119 EXPECT_CALL(*command_buffer_, SetParseError(_)) 131 EXPECT_CALL(*command_buffer_, SetParseError(_))
120 .Times(0); 132 .Times(0);
121 133
122 scheduler_->PutChanged(); 134 scheduler_->PutChanged();
123 } 135 }
124 136
125 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) { 137 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) {
126 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 138 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
127 header[0].command = 7; 139 header[0].command = 7;
128 header[0].size = 2; 140 header[0].size = 2;
129 buffer_[1] = 123; 141 buffer_[1] = 123;
130 header[2].command = 8; 142 header[2].command = 8;
131 header[2].size = 1; 143 header[2].size = 1;
132 144
133 CommandBuffer::State state; 145 CommandBuffer::State state;
134 146
135 state.put_offset = 3; 147 state.put_offset = 3;
136 EXPECT_CALL(*command_buffer_, GetState()) 148 EXPECT_CALL(*command_buffer_, GetState())
137 .WillRepeatedly(Return(state)); 149 .WillRepeatedly(Return(state));
138 150
139 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 151 EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0]))
140 .WillOnce(Return(error::kNoError)); 152 .WillOnce(Return(error::kNoError));
141 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 153 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
142 154
143 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) 155 EXPECT_CALL(*decoder_, DoCommand(8, 0, &buffer_[2]))
144 .WillOnce(Return(error::kNoError)); 156 .WillOnce(Return(error::kNoError));
145 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 157 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
146 158
147 scheduler_->PutChanged(); 159 scheduler_->PutChanged();
148 } 160 }
149 161
150 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) { 162 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) {
151 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 163 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
152 header[0].command = 7; 164 header[0].command = 7;
153 header[0].size = 1; 165 header[0].size = 1;
154 166
155 CommandBuffer::State state; 167 CommandBuffer::State state;
156 168
157 state.put_offset = 1; 169 state.put_offset = 1;
158 EXPECT_CALL(*command_buffer_, GetState()) 170 EXPECT_CALL(*command_buffer_, GetState())
159 .WillRepeatedly(Return(state)); 171 .WillRepeatedly(Return(state));
160 172
161 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) 173 EXPECT_CALL(*decoder_, DoCommand(7, 0, &buffer_[0]))
162 .WillOnce(Return( 174 .WillOnce(Return(
163 error::kUnknownCommand)); 175 error::kUnknownCommand));
164 EXPECT_CALL(*command_buffer_, SetGetOffset(1)); 176 EXPECT_CALL(*command_buffer_, SetGetOffset(1));
165 177
178 EXPECT_CALL(*command_buffer_, SetContextLostReason(_));
166 EXPECT_CALL(*decoder_, GetContextLostReason()) 179 EXPECT_CALL(*decoder_, GetContextLostReason())
167 .WillOnce(Return(error::kUnknown)); 180 .WillOnce(Return(error::kUnknown));
168 EXPECT_CALL(*command_buffer_, 181 EXPECT_CALL(*command_buffer_,
169 SetParseError(error::kUnknownCommand)); 182 SetParseError(error::kUnknownCommand));
170 183
171 scheduler_->PutChanged(); 184 scheduler_->PutChanged();
172 } 185 }
173 186
174 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) { 187 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) {
175 CommandBuffer::State state; 188 CommandBuffer::State state;
(...skipping 22 matching lines...) Expand all
198 211
199 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size); 212 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size);
200 } 213 }
201 214
202 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) { 215 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) {
203 EXPECT_CALL(*command_buffer_, SetToken(7)); 216 EXPECT_CALL(*command_buffer_, SetToken(7));
204 scheduler_->set_token(7); 217 scheduler_->set_token(7);
205 } 218 }
206 219
207 } // namespace gpu 220 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gpu_scheduler.cc ('k') | gpu/demos/framework/window.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698