OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/thread.h" | 5 #include "base/thread.h" |
6 #include "o3d/gpu_plugin/command_buffer.h" | 6 #include "o3d/gpu_plugin/command_buffer.h" |
7 #include "o3d/gpu_plugin/np_utils/dynamic_np_object.h" | 7 #include "o3d/gpu_plugin/np_utils/dynamic_np_object.h" |
8 #include "o3d/gpu_plugin/np_utils/np_browser_mock.h" | 8 #include "o3d/gpu_plugin/np_utils/np_browser_mock.h" |
9 #include "o3d/gpu_plugin/np_utils/np_object_mock.h" | 9 #include "o3d/gpu_plugin/np_utils/np_object_mock.h" |
10 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" | 10 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" |
11 #include "o3d/gpu_plugin/system_services/shared_memory_mock.h" | 11 #include "o3d/gpu_plugin/system_services/shared_memory_mock.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 | 14 |
15 using testing::_; | 15 using testing::_; |
16 using testing::DoAll; | 16 using testing::DoAll; |
17 using testing::Return; | 17 using testing::Return; |
18 using testing::SetArgumentPointee; | 18 using testing::SetArgumentPointee; |
19 using testing::StrictMock; | 19 using testing::StrictMock; |
20 | 20 |
21 namespace o3d { | 21 namespace o3d { |
22 namespace gpu_plugin { | 22 namespace gpu_plugin { |
23 | 23 |
24 class MockSystemNPObject : public DefaultNPObject<NPObject> { | 24 class MockSystemNPObject : public DefaultNPObject<NPObject> { |
25 public: | 25 public: |
26 explicit MockSystemNPObject(NPP npp) { | 26 explicit MockSystemNPObject(NPP npp) { |
27 } | 27 } |
28 | 28 |
29 MOCK_METHOD1(CreateSharedMemory, NPObjectPointer<NPObject>(int32)); | 29 MOCK_METHOD1(CreateSharedMemory, NPObjectPointer<NPObject>(int32 size)); |
30 | 30 |
31 NP_UTILS_BEGIN_DISPATCHER_CHAIN(MockSystemNPObject, DefaultNPObject<NPObject>) | 31 NP_UTILS_BEGIN_DISPATCHER_CHAIN(MockSystemNPObject, DefaultNPObject<NPObject>) |
32 NP_UTILS_DISPATCHER(CreateSharedMemory, NPObjectPointer<NPObject>(int32)) | 32 NP_UTILS_DISPATCHER(CreateSharedMemory, |
| 33 NPObjectPointer<NPObject>(int32 size)) |
33 NP_UTILS_END_DISPATCHER_CHAIN | 34 NP_UTILS_END_DISPATCHER_CHAIN |
34 | 35 |
35 private: | 36 private: |
36 DISALLOW_COPY_AND_ASSIGN(MockSystemNPObject); | 37 DISALLOW_COPY_AND_ASSIGN(MockSystemNPObject); |
37 }; | 38 }; |
38 | 39 |
39 class CommandBufferTest : public testing::Test { | 40 class CommandBufferTest : public testing::Test { |
40 protected: | 41 protected: |
41 virtual void SetUp() { | 42 virtual void SetUp() { |
42 command_buffer_ = NPCreateObject<CommandBuffer>(NULL); | 43 command_buffer_ = NPCreateObject<CommandBuffer>(NULL); |
(...skipping 25 matching lines...) Expand all Loading... |
68 | 69 |
69 NPObjectPointer<MockSharedMemory> expected_shared_memory = | 70 NPObjectPointer<MockSharedMemory> expected_shared_memory = |
70 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); | 71 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); |
71 | 72 |
72 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) | 73 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) |
73 .WillOnce(Return(expected_shared_memory)); | 74 .WillOnce(Return(expected_shared_memory)); |
74 | 75 |
75 EXPECT_CALL(*expected_shared_memory.Get(), Map()) | 76 EXPECT_CALL(*expected_shared_memory.Get(), Map()) |
76 .WillOnce(Return(true)); | 77 .WillOnce(Return(true)); |
77 | 78 |
78 EXPECT_TRUE(command_buffer_->Initialize(1024)); | 79 EXPECT_TRUE(command_buffer_->Initialize(256)); |
79 EXPECT_EQ(expected_shared_memory, command_buffer_->GetRingBuffer()); | 80 EXPECT_EQ(expected_shared_memory, command_buffer_->GetRingBuffer()); |
80 | 81 |
81 // Cannot reinitialize. | 82 // Cannot reinitialize. |
82 EXPECT_FALSE(command_buffer_->Initialize(1024)); | 83 EXPECT_FALSE(command_buffer_->Initialize(256)); |
83 EXPECT_EQ(expected_shared_memory, command_buffer_->GetRingBuffer()); | 84 EXPECT_EQ(expected_shared_memory, command_buffer_->GetRingBuffer()); |
84 } | 85 } |
85 | 86 |
| 87 TEST_F(CommandBufferTest, InitializeFailsIfSizeIsTooBig) { |
| 88 EXPECT_FALSE(command_buffer_->Initialize(0x40000000)); |
| 89 } |
| 90 |
86 TEST_F(CommandBufferTest, InitializeFailsIfCannotCreateSharedMemory) { | 91 TEST_F(CommandBufferTest, InitializeFailsIfCannotCreateSharedMemory) { |
87 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) | 92 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) |
88 .WillOnce(Return(window_object_.ToReturned())); | 93 .WillOnce(Return(window_object_.ToReturned())); |
89 | 94 |
90 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) | 95 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) |
91 .WillOnce(Return(NPObjectPointer<NPObject>())); | 96 .WillOnce(Return(NPObjectPointer<NPObject>())); |
92 | 97 |
93 EXPECT_FALSE(command_buffer_->Initialize(1024)); | 98 EXPECT_FALSE(command_buffer_->Initialize(256)); |
94 EXPECT_EQ(NPObjectPointer<NPObject>(), | 99 EXPECT_EQ(NPObjectPointer<NPObject>(), |
95 command_buffer_->GetRingBuffer()); | 100 command_buffer_->GetRingBuffer()); |
96 } | 101 } |
97 | 102 |
98 TEST_F(CommandBufferTest, InitializeFailsIfCannotMapSharedMemory) { | 103 TEST_F(CommandBufferTest, InitializeFailsIfCannotMapSharedMemory) { |
99 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) | 104 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) |
100 .WillOnce(Return(window_object_.ToReturned())); | 105 .WillOnce(Return(window_object_.ToReturned())); |
101 | 106 |
102 NPObjectPointer<MockSharedMemory> expected_shared_memory = | 107 NPObjectPointer<MockSharedMemory> expected_shared_memory = |
103 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); | 108 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); |
104 | 109 |
105 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) | 110 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) |
106 .WillOnce(Return(expected_shared_memory)); | 111 .WillOnce(Return(expected_shared_memory)); |
107 | 112 |
108 EXPECT_CALL(*expected_shared_memory.Get(), Map()) | 113 EXPECT_CALL(*expected_shared_memory.Get(), Map()) |
109 .WillOnce(Return(false)); | 114 .WillOnce(Return(false)); |
110 | 115 |
111 EXPECT_FALSE(command_buffer_->Initialize(1024)); | 116 EXPECT_FALSE(command_buffer_->Initialize(256)); |
112 EXPECT_EQ(NPObjectPointer<NPObject>(), | 117 EXPECT_EQ(NPObjectPointer<NPObject>(), |
113 command_buffer_->GetRingBuffer()); | 118 command_buffer_->GetRingBuffer()); |
114 } | 119 } |
115 | 120 |
116 TEST_F(CommandBufferTest, GetAndPutOffsetsDefaultToZero) { | 121 TEST_F(CommandBufferTest, GetAndPutOffsetsDefaultToZero) { |
117 EXPECT_EQ(0, command_buffer_->GetGetOffset()); | 122 EXPECT_EQ(0, command_buffer_->GetGetOffset()); |
118 EXPECT_EQ(0, command_buffer_->GetPutOffset()); | 123 EXPECT_EQ(0, command_buffer_->GetPutOffset()); |
119 } | 124 } |
120 | 125 |
121 class MockCallback : public CallbackRunner<Tuple0> { | 126 class MockCallback : public CallbackRunner<Tuple0> { |
122 public: | 127 public: |
123 MOCK_METHOD1(RunWithParams, void(const Tuple0&)); | 128 MOCK_METHOD1(RunWithParams, void(const Tuple0&)); |
124 }; | 129 }; |
125 | 130 |
126 TEST_F(CommandBufferTest, CanSyncGetAndPutOffset) { | 131 TEST_F(CommandBufferTest, CanSyncGetAndPutOffset) { |
127 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) | 132 EXPECT_CALL(mock_browser_, GetWindowNPObject(NULL)) |
128 .WillOnce(Return(window_object_.ToReturned())); | 133 .WillOnce(Return(window_object_.ToReturned())); |
129 | 134 |
130 NPObjectPointer<MockSharedMemory> expected_shared_memory = | 135 NPObjectPointer<MockSharedMemory> expected_shared_memory = |
131 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); | 136 NPCreateObject<StrictMock<MockSharedMemory> >(NULL); |
132 | 137 |
133 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) | 138 EXPECT_CALL(*system_object_.Get(), CreateSharedMemory(1024)) |
134 .WillOnce(Return(expected_shared_memory)); | 139 .WillOnce(Return(expected_shared_memory)); |
135 | 140 |
136 EXPECT_CALL(*expected_shared_memory.Get(), Map()) | 141 EXPECT_CALL(*expected_shared_memory.Get(), Map()) |
137 .WillOnce(Return(true)); | 142 .WillOnce(Return(true)); |
138 | 143 |
139 EXPECT_TRUE(command_buffer_->Initialize(1024)); | 144 EXPECT_TRUE(command_buffer_->Initialize(256)); |
140 | 145 |
141 StrictMock<MockCallback>* put_offset_change_callback = | 146 StrictMock<MockCallback>* put_offset_change_callback = |
142 new StrictMock<MockCallback>; | 147 new StrictMock<MockCallback>; |
143 command_buffer_->SetPutOffsetChangeCallback(put_offset_change_callback); | 148 command_buffer_->SetPutOffsetChangeCallback(put_offset_change_callback); |
144 | 149 |
145 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); | 150 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); |
146 EXPECT_EQ(0, command_buffer_->SyncOffsets(2)); | 151 EXPECT_EQ(0, command_buffer_->SyncOffsets(2)); |
147 EXPECT_EQ(2, command_buffer_->GetPutOffset()); | 152 EXPECT_EQ(2, command_buffer_->GetPutOffset()); |
148 | 153 |
149 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); | 154 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); |
150 EXPECT_EQ(0, command_buffer_->SyncOffsets(4)); | 155 EXPECT_EQ(0, command_buffer_->SyncOffsets(4)); |
151 EXPECT_EQ(4, command_buffer_->GetPutOffset()); | 156 EXPECT_EQ(4, command_buffer_->GetPutOffset()); |
152 | 157 |
153 command_buffer_->SetGetOffset(2); | 158 command_buffer_->SetGetOffset(2); |
154 EXPECT_EQ(2, command_buffer_->GetGetOffset()); | 159 EXPECT_EQ(2, command_buffer_->GetGetOffset()); |
155 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); | 160 EXPECT_CALL(*put_offset_change_callback, RunWithParams(_)); |
156 EXPECT_EQ(2, command_buffer_->SyncOffsets(6)); | 161 EXPECT_EQ(2, command_buffer_->SyncOffsets(6)); |
157 | 162 |
158 EXPECT_EQ(-1, command_buffer_->SyncOffsets(-1)); | 163 EXPECT_EQ(-1, command_buffer_->SyncOffsets(-1)); |
159 EXPECT_EQ(-1, command_buffer_->SyncOffsets(1024)); | 164 EXPECT_EQ(-1, command_buffer_->SyncOffsets(1024)); |
160 } | 165 } |
161 | 166 |
162 TEST_F(CommandBufferTest, ZeroHandleMapsToNull) { | 167 TEST_F(CommandBufferTest, ZeroHandleMapsToNull) { |
163 EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(0).Get()); | 168 EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(0).Get()); |
164 } | 169 } |
165 | 170 |
| 171 TEST_F(CommandBufferTest, NegativeHandleMapsToNull) { |
| 172 EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(-1).Get()); |
| 173 } |
| 174 |
| 175 TEST_F(CommandBufferTest, OutOfRangeHandleMapsToNull) { |
| 176 EXPECT_TRUE(NULL == command_buffer_->GetRegisteredObject(1).Get()); |
| 177 } |
| 178 |
166 TEST_F(CommandBufferTest, RegisteringNullObjectReturnsZero) { | 179 TEST_F(CommandBufferTest, RegisteringNullObjectReturnsZero) { |
167 EXPECT_EQ(0, command_buffer_->RegisterObject(NPObjectPointer<NPObject>())); | 180 EXPECT_EQ(0, command_buffer_->RegisterObject(NPObjectPointer<NPObject>())); |
168 } | 181 } |
169 | 182 |
170 TEST_F(CommandBufferTest, RegistersDistinctNonZeroHandlesForObject) { | 183 TEST_F(CommandBufferTest, RegistersDistinctNonZeroHandlesForObject) { |
171 EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); | 184 EXPECT_EQ(1, command_buffer_->RegisterObject(window_object_)); |
172 EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); | 185 EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(1)); |
173 EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); | 186 EXPECT_EQ(2, command_buffer_->RegisterObject(window_object_)); |
174 EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(2)); | 187 EXPECT_EQ(window_object_, command_buffer_->GetRegisteredObject(2)); |
175 } | 188 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 | 251 |
239 TEST_F(CommandBufferTest, DefaultTokenIsZero) { | 252 TEST_F(CommandBufferTest, DefaultTokenIsZero) { |
240 EXPECT_EQ(0, command_buffer_->GetToken()); | 253 EXPECT_EQ(0, command_buffer_->GetToken()); |
241 } | 254 } |
242 | 255 |
243 TEST_F(CommandBufferTest, CanSetToken) { | 256 TEST_F(CommandBufferTest, CanSetToken) { |
244 command_buffer_->SetToken(7); | 257 command_buffer_->SetToken(7); |
245 EXPECT_EQ(7, command_buffer_->GetToken()); | 258 EXPECT_EQ(7, command_buffer_->GetToken()); |
246 } | 259 } |
247 | 260 |
248 TEST_F(CommandBufferTest, DefaultErrorIsNoError) { | 261 TEST_F(CommandBufferTest, DefaultParseErrorIsNoError) { |
249 EXPECT_EQ(CommandBuffer::ERROR_NO_ERROR, command_buffer_->ResetError()); | 262 EXPECT_EQ(0, command_buffer_->ResetParseError()); |
250 } | 263 } |
251 | 264 |
252 TEST_F(CommandBufferTest, CanSetAndResetError) { | 265 TEST_F(CommandBufferTest, CanSetAndResetParseError) { |
253 command_buffer_->SetError(CommandBuffer::ERROR_UNKNOWN_COMMAND); | 266 command_buffer_->SetParseError(1); |
254 EXPECT_EQ(CommandBuffer::ERROR_UNKNOWN_COMMAND, | 267 EXPECT_EQ(1, command_buffer_->ResetParseError()); |
255 command_buffer_->ResetError()); | 268 EXPECT_EQ(0, command_buffer_->ResetParseError()); |
256 EXPECT_EQ(CommandBuffer::ERROR_NO_ERROR, command_buffer_->ResetError()); | 269 } |
| 270 |
| 271 TEST_F(CommandBufferTest, DefaultErrorStatusIsFalse) { |
| 272 EXPECT_FALSE(command_buffer_->GetErrorStatus()); |
| 273 } |
| 274 |
| 275 TEST_F(CommandBufferTest, CanRaiseErrorStatus) { |
| 276 command_buffer_->RaiseErrorStatus(); |
| 277 EXPECT_TRUE(command_buffer_->GetErrorStatus()); |
257 } | 278 } |
258 | 279 |
259 } // namespace gpu_plugin | 280 } // namespace gpu_plugin |
260 } // namespace o3d | 281 } // namespace o3d |
OLD | NEW |