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

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