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

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

Issue 8827005: 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
« 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
35 virtual void SetUp() { 33 virtual void SetUp() {
36 shared_memory_.reset(new ::base::SharedMemory); 34 shared_memory_.reset(new ::base::SharedMemory);
37 shared_memory_->CreateAndMapAnonymous(kRingBufferSize); 35 shared_memory_->CreateAndMapAnonymous(kRingBufferSize);
38 buffer_ = static_cast<int32*>(shared_memory_->memory()); 36 buffer_ = static_cast<int32*>(shared_memory_->memory());
39 shared_memory_buffer_.ptr = buffer_; 37 shared_memory_buffer_.ptr = buffer_;
40 shared_memory_buffer_.size = kRingBufferSize; 38 shared_memory_buffer_.size = kRingBufferSize;
41 memset(buffer_, 0, kRingBufferSize); 39 memset(buffer_, 0, kRingBufferSize);
42 40
43 command_buffer_.reset(new MockCommandBuffer); 41 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
50 decoder_.reset(new gles2::MockGLES2Decoder()); 52 decoder_.reset(new gles2::MockGLES2Decoder());
53
54 parser_ = new CommandParser(buffer_,
55 kRingBufferEntries,
56 0,
57 kRingBufferEntries,
58 0,
59 async_api_.get());
60
51 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), 61 scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(),
52 decoder_.get(), 62 decoder_.get(),
53 NULL)); 63 parser_));
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));
59 } 64 }
60 65
61 virtual void TearDown() { 66 virtual void TearDown() {
62 // Ensure that any unexpected tasks posted by the GPU scheduler are executed 67 // Ensure that any unexpected tasks posted by the GPU scheduler are executed
63 // in order to fail the test. 68 // in order to fail the test.
64 MessageLoop::current()->RunAllPending(); 69 MessageLoop::current()->RunAllPending();
65 } 70 }
66 71
67 error::Error GetError() { 72 error::Error GetError() {
68 return command_buffer_->GetState().error; 73 return command_buffer_->GetState().error;
69 } 74 }
70 75
71 #if defined(OS_MACOSX) 76 #if defined(OS_MACOSX)
72 base::mac::ScopedNSAutoreleasePool autorelease_pool_; 77 base::mac::ScopedNSAutoreleasePool autorelease_pool_;
73 #endif 78 #endif
74 MessageLoop message_loop; 79 MessageLoop message_loop;
75 scoped_ptr<MockCommandBuffer> command_buffer_; 80 scoped_ptr<MockCommandBuffer> command_buffer_;
76 scoped_ptr<base::SharedMemory> shared_memory_; 81 scoped_ptr<base::SharedMemory> shared_memory_;
77 Buffer shared_memory_buffer_; 82 Buffer shared_memory_buffer_;
78 int32* buffer_; 83 int32* buffer_;
79 scoped_ptr<gles2::MockGLES2Decoder> decoder_; 84 scoped_ptr<gles2::MockGLES2Decoder> decoder_;
85 CommandParser* parser_;
86 scoped_ptr<AsyncAPIMock> async_api_;
80 scoped_ptr<GpuScheduler> scheduler_; 87 scoped_ptr<GpuScheduler> scheduler_;
81 }; 88 };
82 89
83 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) { 90 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) {
84 CommandBuffer::State state; 91 CommandBuffer::State state;
85 92
86 state.put_offset = 0; 93 state.put_offset = 0;
87 EXPECT_CALL(*command_buffer_, GetState()) 94 EXPECT_CALL(*command_buffer_, GetState())
88 .WillRepeatedly(Return(state)); 95 .WillRepeatedly(Return(state));
89 96
90 EXPECT_CALL(*command_buffer_, SetParseError(_)) 97 EXPECT_CALL(*command_buffer_, SetParseError(_))
91 .Times(0); 98 .Times(0);
92 99
93 scheduler_->PutChanged(); 100 scheduler_->PutChanged();
94 } 101 }
95 102
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
115 TEST_F(GpuSchedulerTest, ProcessesOneCommand) { 103 TEST_F(GpuSchedulerTest, ProcessesOneCommand) {
116 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 104 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
117 header[0].command = 7; 105 header[0].command = 7;
118 header[0].size = 2; 106 header[0].size = 2;
119 buffer_[1] = 123; 107 buffer_[1] = 123;
120 108
121 CommandBuffer::State state; 109 CommandBuffer::State state;
122 110
123 state.put_offset = 2; 111 state.put_offset = 2;
124 EXPECT_CALL(*command_buffer_, GetState()) 112 EXPECT_CALL(*command_buffer_, GetState())
125 .WillRepeatedly(Return(state)); 113 .WillRepeatedly(Return(state));
126 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 114 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
127 115
128 EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) 116 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
129 .WillOnce(Return(error::kNoError)); 117 .WillOnce(Return(error::kNoError));
130 118
131 EXPECT_CALL(*command_buffer_, SetParseError(_)) 119 EXPECT_CALL(*command_buffer_, SetParseError(_))
132 .Times(0); 120 .Times(0);
133 121
134 scheduler_->PutChanged(); 122 scheduler_->PutChanged();
135 } 123 }
136 124
137 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) { 125 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) {
138 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 126 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
139 header[0].command = 7; 127 header[0].command = 7;
140 header[0].size = 2; 128 header[0].size = 2;
141 buffer_[1] = 123; 129 buffer_[1] = 123;
142 header[2].command = 8; 130 header[2].command = 8;
143 header[2].size = 1; 131 header[2].size = 1;
144 132
145 CommandBuffer::State state; 133 CommandBuffer::State state;
146 134
147 state.put_offset = 3; 135 state.put_offset = 3;
148 EXPECT_CALL(*command_buffer_, GetState()) 136 EXPECT_CALL(*command_buffer_, GetState())
149 .WillRepeatedly(Return(state)); 137 .WillRepeatedly(Return(state));
150 138
151 EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) 139 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
152 .WillOnce(Return(error::kNoError)); 140 .WillOnce(Return(error::kNoError));
153 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 141 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
154 142
155 EXPECT_CALL(*decoder_, DoCommand(8, 0, &buffer_[2])) 143 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2]))
156 .WillOnce(Return(error::kNoError)); 144 .WillOnce(Return(error::kNoError));
157 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 145 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
158 146
159 scheduler_->PutChanged(); 147 scheduler_->PutChanged();
160 } 148 }
161 149
162 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) { 150 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) {
163 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 151 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
164 header[0].command = 7; 152 header[0].command = 7;
165 header[0].size = 1; 153 header[0].size = 1;
166 154
167 CommandBuffer::State state; 155 CommandBuffer::State state;
168 156
169 state.put_offset = 1; 157 state.put_offset = 1;
170 EXPECT_CALL(*command_buffer_, GetState()) 158 EXPECT_CALL(*command_buffer_, GetState())
171 .WillRepeatedly(Return(state)); 159 .WillRepeatedly(Return(state));
172 160
173 EXPECT_CALL(*decoder_, DoCommand(7, 0, &buffer_[0])) 161 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0]))
174 .WillOnce(Return( 162 .WillOnce(Return(
175 error::kUnknownCommand)); 163 error::kUnknownCommand));
176 EXPECT_CALL(*command_buffer_, SetGetOffset(1)); 164 EXPECT_CALL(*command_buffer_, SetGetOffset(1));
177 165
178 EXPECT_CALL(*command_buffer_, SetContextLostReason(_));
179 EXPECT_CALL(*decoder_, GetContextLostReason()) 166 EXPECT_CALL(*decoder_, GetContextLostReason())
180 .WillOnce(Return(error::kUnknown)); 167 .WillOnce(Return(error::kUnknown));
181 EXPECT_CALL(*command_buffer_, 168 EXPECT_CALL(*command_buffer_,
182 SetParseError(error::kUnknownCommand)); 169 SetParseError(error::kUnknownCommand));
183 170
184 scheduler_->PutChanged(); 171 scheduler_->PutChanged();
185 } 172 }
186 173
187 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) { 174 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) {
188 CommandBuffer::State state; 175 CommandBuffer::State state;
(...skipping 22 matching lines...) Expand all
211 198
212 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size); 199 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size);
213 } 200 }
214 201
215 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) { 202 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) {
216 EXPECT_CALL(*command_buffer_, SetToken(7)); 203 EXPECT_CALL(*command_buffer_, SetToken(7));
217 scheduler_->set_token(7); 204 scheduler_->set_token(7);
218 } 205 }
219 206
220 } // namespace gpu 207 } // 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