| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "ui/gl/gl_implementation.h" | 28 #include "ui/gl/gl_implementation.h" |
| 29 #include "ui/gl/gl_mock.h" | 29 #include "ui/gl/gl_mock.h" |
| 30 #include "ui/gl/gl_surface_stub.h" | 30 #include "ui/gl/gl_surface_stub.h" |
| 31 | 31 |
| 32 #if !defined(GL_DEPTH24_STENCIL8) | 32 #if !defined(GL_DEPTH24_STENCIL8) |
| 33 #define GL_DEPTH24_STENCIL8 0x88F0 | 33 #define GL_DEPTH24_STENCIL8 0x88F0 |
| 34 #endif | 34 #endif |
| 35 | 35 |
| 36 using ::gfx::MockGLInterface; | 36 using ::gfx::MockGLInterface; |
| 37 using ::testing::_; | 37 using ::testing::_; |
| 38 using ::testing::An; |
| 38 using ::testing::DoAll; | 39 using ::testing::DoAll; |
| 39 using ::testing::InSequence; | 40 using ::testing::InSequence; |
| 40 using ::testing::Invoke; | 41 using ::testing::Invoke; |
| 41 using ::testing::MatcherCast; | 42 using ::testing::MatcherCast; |
| 42 using ::testing::Mock; | 43 using ::testing::Mock; |
| 43 using ::testing::Pointee; | 44 using ::testing::Pointee; |
| 44 using ::testing::Return; | 45 using ::testing::Return; |
| 45 using ::testing::SaveArg; | 46 using ::testing::SaveArg; |
| 46 using ::testing::SetArrayArgument; | 47 using ::testing::SetArrayArgument; |
| 47 using ::testing::SetArgumentPointee; | 48 using ::testing::SetArgumentPointee; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 EXPECT_FALSE( | 111 EXPECT_FALSE( |
| 111 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 112 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| 112 texture_ref)); | 113 texture_ref)); |
| 113 | 114 |
| 114 base::Closure bind_callback; | 115 base::Closure bind_callback; |
| 115 | 116 |
| 116 // AsyncTexImage2D | 117 // AsyncTexImage2D |
| 117 { | 118 { |
| 118 // Create transfer state since it doesn't exist. | 119 // Create transfer state since it doesn't exist. |
| 119 EXPECT_EQ(texture_ref->num_observers(), 0); | 120 EXPECT_EQ(texture_ref->num_observers(), 0); |
| 120 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 121 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl( |
| 122 texture_ref, An<const AsyncTexImage2DParams&>())) |
| 121 .WillOnce(Return( | 123 .WillOnce(Return( |
| 122 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) | 124 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 123 .RetiresOnSaturation(); | 125 .RetiresOnSaturation(); |
| 124 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)) | 126 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)) |
| 125 .WillOnce(SaveArg<2>(&bind_callback)) | 127 .WillOnce(SaveArg<2>(&bind_callback)) |
| 126 .RetiresOnSaturation(); | 128 .RetiresOnSaturation(); |
| 127 // Command succeeds. | 129 // Command succeeds. |
| 128 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); | 130 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); |
| 129 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 131 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 130 EXPECT_EQ( | 132 EXPECT_EQ( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 } | 172 } |
| 171 | 173 |
| 172 // AsyncTexSubImage2D | 174 // AsyncTexSubImage2D |
| 173 EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation(); | 175 EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation(); |
| 174 decoder_->GetAsyncPixelTransferManager()->ClearPixelTransferDelegateForTest( | 176 decoder_->GetAsyncPixelTransferManager()->ClearPixelTransferDelegateForTest( |
| 175 texture_ref); | 177 texture_ref); |
| 176 EXPECT_EQ(texture_ref->num_observers(), 0); | 178 EXPECT_EQ(texture_ref->num_observers(), 0); |
| 177 texture->SetImmutable(false); | 179 texture->SetImmutable(false); |
| 178 { | 180 { |
| 179 // Create transfer state since it doesn't exist. | 181 // Create transfer state since it doesn't exist. |
| 180 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 182 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl( |
| 183 texture_ref, An<const AsyncTexImage2DParams&>())) |
| 181 .WillOnce(Return( | 184 .WillOnce(Return( |
| 182 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) | 185 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 183 .RetiresOnSaturation(); | 186 .RetiresOnSaturation(); |
| 184 EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _)).RetiresOnSaturation(); | 187 EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _)).RetiresOnSaturation(); |
| 185 // Command succeeds. | 188 // Command succeeds. |
| 186 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd)); | 189 EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd)); |
| 187 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 190 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 188 EXPECT_EQ( | 191 EXPECT_EQ( |
| 189 delegate, | 192 delegate, |
| 190 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 193 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 { | 245 { |
| 243 // Get a fresh texture since the existing texture cannot be respecified | 246 // Get a fresh texture since the existing texture cannot be respecified |
| 244 // asynchronously and AsyncTexSubImage2D does not involve binding. | 247 // asynchronously and AsyncTexSubImage2D does not involve binding. |
| 245 EXPECT_CALL(*gl_, GenTextures(1, _)) | 248 EXPECT_CALL(*gl_, GenTextures(1, _)) |
| 246 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); | 249 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); |
| 247 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 250 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 248 texture_ref = GetTexture(client_texture_id_); | 251 texture_ref = GetTexture(client_texture_id_); |
| 249 texture = texture_ref->texture(); | 252 texture = texture_ref->texture(); |
| 250 texture->SetImmutable(false); | 253 texture->SetImmutable(false); |
| 251 // Create transfer state since it doesn't exist. | 254 // Create transfer state since it doesn't exist. |
| 252 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 255 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl( |
| 256 texture_ref, An<const AsyncTexImage2DParams&>())) |
| 253 .WillOnce(Return( | 257 .WillOnce(Return( |
| 254 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) | 258 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 255 .RetiresOnSaturation(); | 259 .RetiresOnSaturation(); |
| 256 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); | 260 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); |
| 257 // Start async transfer. | 261 // Start async transfer. |
| 258 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); | 262 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); |
| 259 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 263 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 260 EXPECT_EQ( | 264 EXPECT_EQ( |
| 261 delegate, | 265 delegate, |
| 262 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 266 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 282 { | 286 { |
| 283 // Get a fresh texture since the existing texture cannot be respecified | 287 // Get a fresh texture since the existing texture cannot be respecified |
| 284 // asynchronously and AsyncTexSubImage2D does not involve binding. | 288 // asynchronously and AsyncTexSubImage2D does not involve binding. |
| 285 EXPECT_CALL(*gl_, GenTextures(1, _)) | 289 EXPECT_CALL(*gl_, GenTextures(1, _)) |
| 286 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); | 290 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); |
| 287 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); | 291 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); |
| 288 texture_ref = GetTexture(client_texture_id_); | 292 texture_ref = GetTexture(client_texture_id_); |
| 289 texture = texture_ref->texture(); | 293 texture = texture_ref->texture(); |
| 290 texture->SetImmutable(false); | 294 texture->SetImmutable(false); |
| 291 // Create transfer state since it doesn't exist. | 295 // Create transfer state since it doesn't exist. |
| 292 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 296 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl( |
| 297 texture_ref, An<const AsyncTexImage2DParams&>())) |
| 293 .WillOnce(Return( | 298 .WillOnce(Return( |
| 294 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) | 299 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 295 .RetiresOnSaturation(); | 300 .RetiresOnSaturation(); |
| 296 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); | 301 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); |
| 297 // Start async transfer. | 302 // Start async transfer. |
| 298 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); | 303 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); |
| 299 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 304 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 300 EXPECT_EQ( | 305 EXPECT_EQ( |
| 301 delegate, | 306 delegate, |
| 302 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 307 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 0, | 353 0, |
| 349 0); | 354 0); |
| 350 | 355 |
| 351 // No transfer delegate exists initially. | 356 // No transfer delegate exists initially. |
| 352 EXPECT_FALSE( | 357 EXPECT_FALSE( |
| 353 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( | 358 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( |
| 354 texture_ref)); | 359 texture_ref)); |
| 355 | 360 |
| 356 // Create delegate on AsyncTexImage2D. | 361 // Create delegate on AsyncTexImage2D. |
| 357 { | 362 { |
| 358 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) | 363 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl( |
| 364 texture_ref, An<const AsyncTexImage2DParams&>())) |
| 359 .WillOnce(Return( | 365 .WillOnce(Return( |
| 360 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) | 366 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) |
| 361 .RetiresOnSaturation(); | 367 .RetiresOnSaturation(); |
| 362 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); | 368 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation(); |
| 363 | 369 |
| 364 // Command succeeds. | 370 // Command succeeds. |
| 365 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); | 371 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); |
| 366 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 372 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 367 } | 373 } |
| 368 | 374 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 379 manager = NULL; | 385 manager = NULL; |
| 380 | 386 |
| 381 // Texture ref still valid. | 387 // Texture ref still valid. |
| 382 EXPECT_EQ(texture_ref, GetTexture(client_texture_id_)); | 388 EXPECT_EQ(texture_ref, GetTexture(client_texture_id_)); |
| 383 EXPECT_EQ(texture_ref->num_observers(), 0); | 389 EXPECT_EQ(texture_ref->num_observers(), 0); |
| 384 } | 390 } |
| 385 } | 391 } |
| 386 | 392 |
| 387 } // namespace gles2 | 393 } // namespace gles2 |
| 388 } // namespace gpu | 394 } // namespace gpu |
| OLD | NEW |