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

Side by Side Diff: gpu/gpu_plugin/gpu_plugin_object_unittest.cc

Issue 465040: Added CommandBufferClient, CommandBufferStub and some IPC messages.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/common/command_buffer_mock.h"
6 #include "gpu/gpu_plugin/gpu_plugin_object.h"
7 #include "gpu/command_buffer/service/gpu_processor_mock.h"
8 #include "gpu/np_utils/np_browser_mock.h"
9 #include "gpu/np_utils/dynamic_np_object.h"
10 #include "gpu/np_utils/np_object_mock.h"
11 #include "gpu/np_utils/np_object_pointer.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "webkit/glue/plugins/nphostapi.h"
15
16 using ::base::SharedMemory;
17 using command_buffer::GPUProcessor;
18 using command_buffer::MockCommandBuffer;
19 using command_buffer::MockGPUProcessor;
20 using np_utils::MockNPBrowser;
21 using np_utils::NPBrowser;
22 using np_utils::NPObjectPointer;
23 using testing::_;
24 using testing::DoAll;
25 using testing::Invoke;
26 using testing::NotNull;
27 using testing::Return;
28 using testing::SetArgumentPointee;
29 using testing::StrictMock;
30
31 namespace gpu_plugin {
32
33 class GPUPluginObjectTest : public testing::Test {
34 protected:
35 virtual void SetUp() {
36 plugin_object_ = np_utils::NPCreateObject<GPUPluginObject>(NULL);
37
38 command_buffer_ = new MockCommandBuffer;
39
40 // Takes ownership.
41 plugin_object_->set_command_buffer(command_buffer_);
42
43 processor_ = new MockGPUProcessor(command_buffer_);
44 plugin_object_->set_gpu_processor(processor_.get());
45 }
46
47 MockNPBrowser mock_browser_;
48 NPObjectPointer<GPUPluginObject> plugin_object_;
49 MockCommandBuffer* command_buffer_;
50 scoped_refptr<MockGPUProcessor> processor_;
51 };
52
53 namespace {
54 template <typename T>
55 void DeleteObject(T* object) {
56 delete object;
57 }
58 } // namespace anonymous
59
60
61 TEST_F(GPUPluginObjectTest, CanInstantiateAndDestroyPluginObject) {
62 EXPECT_EQ(GPUPluginObject::kWaitingForNew, plugin_object_->GetStatus());
63
64 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
65 0,
66 NULL,
67 NULL,
68 NULL));
69
70 EXPECT_EQ(GPUPluginObject::kWaitingForSetWindow, plugin_object_->GetStatus());
71
72 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
73
74 EXPECT_EQ(GPUPluginObject::kDestroyed, plugin_object_->GetStatus());
75 }
76
77 TEST_F(GPUPluginObjectTest, DestroyFailsIfNotInitialized) {
78 EXPECT_EQ(NPERR_GENERIC_ERROR, plugin_object_->Destroy(NULL));
79 }
80
81 TEST_F(GPUPluginObjectTest, NewFailsIfAlreadyInitialized) {
82 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
83 0,
84 NULL,
85 NULL,
86 NULL));
87
88 EXPECT_EQ(NPERR_GENERIC_ERROR, plugin_object_->New("application/foo",
89 0,
90 NULL,
91 NULL,
92 NULL));
93
94 EXPECT_EQ(GPUPluginObject::kWaitingForSetWindow, plugin_object_->GetStatus());
95
96 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
97
98 EXPECT_EQ(GPUPluginObject::kDestroyed, plugin_object_->GetStatus());
99 }
100
101 TEST_F(GPUPluginObjectTest, NewFailsIfObjectHasPreviouslyBeenDestroyed) {
102 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
103 0,
104 NULL,
105 NULL,
106 NULL));
107
108 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
109
110 EXPECT_EQ(NPERR_GENERIC_ERROR, plugin_object_->New("application/foo",
111 0,
112 NULL,
113 NULL,
114 NULL));
115
116 EXPECT_EQ(GPUPluginObject::kDestroyed, plugin_object_->GetStatus());
117 }
118
119 TEST_F(GPUPluginObjectTest, WindowIsNullBeforeSetWindowCalled) {
120 NPWindow window = plugin_object_->GetWindow();
121 EXPECT_EQ(NULL, window.window);
122 }
123
124 TEST_F(GPUPluginObjectTest, CanSetWindow) {
125 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
126 0,
127 NULL,
128 NULL,
129 NULL));
130
131 NPWindow window = {0};
132 window.window = &window;
133 window.x = 7;
134
135 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->SetWindow(&window));
136 EXPECT_EQ(0, memcmp(&window, &plugin_object_->GetWindow(), sizeof(window)));
137 EXPECT_EQ(GPUPluginObject::kWaitingForOpenCommandBuffer,
138 plugin_object_->GetStatus());
139
140 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
141 }
142
143 TEST_F(GPUPluginObjectTest, CanGetWindowSize) {
144 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
145 0,
146 NULL,
147 NULL,
148 NULL));
149
150 NPWindow window = {0};
151 window.window = &window;
152 window.x = 10;
153 window.y = 10;
154 window.width = 100;
155 window.height = 200;
156
157 EXPECT_EQ(0, plugin_object_->GetWidth());
158 EXPECT_EQ(0, plugin_object_->GetHeight());
159 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->SetWindow(&window));
160 EXPECT_EQ(100, plugin_object_->GetWidth());
161 EXPECT_EQ(200, plugin_object_->GetHeight());
162
163 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
164 }
165
166 TEST_F(GPUPluginObjectTest, SetWindowFailsIfNotInitialized) {
167 NPWindow window = {0};
168 EXPECT_EQ(NPERR_GENERIC_ERROR, plugin_object_->SetWindow(&window));
169 EXPECT_EQ(GPUPluginObject::kWaitingForNew, plugin_object_->GetStatus());
170 }
171
172 TEST_F(GPUPluginObjectTest, CanGetScriptableNPObject) {
173 NPObject* scriptable_object = plugin_object_->GetScriptableNPObject();
174 EXPECT_EQ(plugin_object_.Get(), scriptable_object);
175 NPBrowser::get()->ReleaseObject(scriptable_object);
176 }
177
178 TEST_F(GPUPluginObjectTest, OpenCommandBufferReturnsInitializedCommandBuffer) {
179 EXPECT_CALL(*command_buffer_, Initialize(NotNull()))
180 .WillOnce(DoAll(Invoke(DeleteObject<SharedMemory>),
181 Return(true)));
182
183 EXPECT_CALL(*processor_.get(), Initialize(NULL))
184 .WillOnce(Return(true));
185
186 EXPECT_CALL(*command_buffer_, SetPutOffsetChangeCallback(NotNull()))
187 .WillOnce(Invoke(DeleteObject<Callback0::Type>));
188
189 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
190 0,
191 NULL,
192 NULL,
193 NULL));
194
195 // Set status as though SetWindow has been called. Avoids having to create a
196 // valid window handle to pass to SetWindow in tests.
197 plugin_object_->set_status(GPUPluginObject::kWaitingForOpenCommandBuffer);
198
199 EXPECT_EQ(command_buffer_, plugin_object_->OpenCommandBuffer());
200
201 // Calling OpenCommandBuffer again just returns the existing command buffer.
202 EXPECT_EQ(command_buffer_, plugin_object_->OpenCommandBuffer());
203
204 EXPECT_EQ(GPUPluginObject::kInitializationSuccessful,
205 plugin_object_->GetStatus());
206
207 EXPECT_CALL(*command_buffer_, SetPutOffsetChangeCallback(NULL));
208
209 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
210 }
211
212 TEST_F(GPUPluginObjectTest, OpenCommandBufferReturnsNullIfWindowNotReady) {
213 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
214 0,
215 NULL,
216 NULL,
217 NULL));
218
219 // Set status as though SetWindow has not been called.
220 plugin_object_->set_status(GPUPluginObject::kWaitingForSetWindow);
221
222 EXPECT_TRUE(NULL == plugin_object_->OpenCommandBuffer());
223
224 EXPECT_EQ(GPUPluginObject::kWaitingForSetWindow, plugin_object_->GetStatus());
225 }
226
227
228 TEST_F(GPUPluginObjectTest,
229 OpenCommandBufferReturnsNullIfCommandBufferCannotInitialize) {
230 EXPECT_CALL(*command_buffer_, Initialize(NotNull()))
231 .WillOnce(DoAll(Invoke(DeleteObject<SharedMemory>),
232 Return(false)));
233
234 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
235 0,
236 NULL,
237 NULL,
238 NULL));
239
240 // Set status as though SetWindow has been called. Avoids having to create a
241 // valid window handle to pass to SetWindow in tests.
242 plugin_object_->set_status(GPUPluginObject::kWaitingForOpenCommandBuffer);
243
244 EXPECT_TRUE(NULL == plugin_object_->OpenCommandBuffer());
245
246 EXPECT_EQ(GPUPluginObject::kWaitingForOpenCommandBuffer,
247 plugin_object_->GetStatus());
248
249 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
250 }
251
252 TEST_F(GPUPluginObjectTest,
253 OpenCommandBufferReturnsNullIGPUProcessorCannotInitialize) {
254 EXPECT_CALL(*command_buffer_, Initialize(NotNull()))
255 .WillOnce(DoAll(Invoke(DeleteObject<SharedMemory>),
256 Return(true)));
257
258 EXPECT_CALL(*processor_.get(), Initialize(NULL))
259 .WillOnce(Return(false));
260
261 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
262 0,
263 NULL,
264 NULL,
265 NULL));
266
267 // Set status as though SetWindow has been called. Avoids having to create a
268 // valid window handle to pass to SetWindow in tests.
269 plugin_object_->set_status(GPUPluginObject::kWaitingForOpenCommandBuffer);
270
271 EXPECT_TRUE(NULL == plugin_object_->OpenCommandBuffer());
272
273 EXPECT_EQ(GPUPluginObject::kWaitingForOpenCommandBuffer,
274 plugin_object_->GetStatus());
275
276 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
277 }
278
279 class MockEventSync : public np_utils::DefaultNPObject<NPObject> {
280 public:
281 explicit MockEventSync(NPP npp) {
282 }
283
284 MOCK_METHOD2(Resize, void(int32 width, int32 height));
285
286 NP_UTILS_BEGIN_DISPATCHER_CHAIN(MockEventSync, DefaultNPObject<NPObject>)
287 NP_UTILS_DISPATCHER(Resize, void(int32 width, int32 height))
288 NP_UTILS_END_DISPATCHER_CHAIN
289
290 private:
291 DISALLOW_COPY_AND_ASSIGN(MockEventSync);
292 };
293
294 TEST_F(GPUPluginObjectTest, SendsResizeEventOnSetWindow) {
295 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->New("application/foo",
296 0,
297 NULL,
298 NULL,
299 NULL));
300
301 NPObjectPointer<MockEventSync> event_sync =
302 np_utils::NPCreateObject<MockEventSync>(NULL);
303 plugin_object_->SetEventSync(event_sync);
304
305 EXPECT_CALL(*event_sync.Get(), Resize(100, 200));
306
307 NPWindow window = {0};
308 window.window = &window;
309 window.x = 10;
310 window.y = 10;
311 window.width = 100;
312 window.height = 200;
313
314 plugin_object_->SetWindow(&window);
315
316 EXPECT_EQ(NPERR_NO_ERROR, plugin_object_->Destroy(NULL));
317 }
318
319 } // namespace gpu_plugin
OLDNEW
« no previous file with comments | « gpu/gpu_plugin/gpu_plugin_object_factory_unittest.cc ('k') | gpu/gpu_plugin/gpu_plugin_object_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698