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

Side by Side Diff: trunk/src/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 216673006: Revert 260177 "By keeping track of transfer buffer usage (both s..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 9 months 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 8205 matching lines...) Expand 10 before | Expand all | Expand 10 after
8216 // Set a mock Async delegate 8216 // Set a mock Async delegate
8217 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8217 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8218 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8218 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8219 manager->Initialize(group().texture_manager()); 8219 manager->Initialize(group().texture_manager());
8220 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8220 decoder_->SetAsyncPixelTransferManagerForTest(manager);
8221 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; 8221 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
8222 8222
8223 // Tex(Sub)Image2D upload commands. 8223 // Tex(Sub)Image2D upload commands.
8224 AsyncTexImage2DCHROMIUM teximage_cmd; 8224 AsyncTexImage2DCHROMIUM teximage_cmd;
8225 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 8225 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
8226 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, 8226 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
8227 0, 0, 0);
8228 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; 8227 AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
8229 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, 8228 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA,
8230 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, 8229 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
8231 0, 0, 0);
8232 WaitAsyncTexImage2DCHROMIUM wait_cmd; 8230 WaitAsyncTexImage2DCHROMIUM wait_cmd;
8233 wait_cmd.Init(GL_TEXTURE_2D); 8231 wait_cmd.Init(GL_TEXTURE_2D);
8234 WaitAllAsyncTexImage2DCHROMIUM wait_all_cmd;
8235 wait_all_cmd.Init();
8236 8232
8237 // No transfer state exists initially. 8233 // No transfer state exists initially.
8238 EXPECT_FALSE( 8234 EXPECT_FALSE(
8239 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8235 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8240 texture_ref)); 8236 texture_ref));
8241 8237
8242 base::Closure bind_callback; 8238 base::Closure bind_callback;
8243 8239
8244 // AsyncTexImage2D 8240 // AsyncTexImage2D
8245 { 8241 {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
8357 DoDeleteTexture(client_texture_id_, kServiceTextureId); 8353 DoDeleteTexture(client_texture_id_, kServiceTextureId);
8358 EXPECT_FALSE( 8354 EXPECT_FALSE(
8359 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8355 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8360 texture_ref)); 8356 texture_ref));
8361 delegate = NULL; 8357 delegate = NULL;
8362 } 8358 }
8363 8359
8364 // WaitAsyncTexImage2D 8360 // WaitAsyncTexImage2D
8365 { 8361 {
8366 // Get a fresh texture since the existing texture cannot be respecified 8362 // Get a fresh texture since the existing texture cannot be respecified
8367 // asynchronously and AsyncTexSubImage2D does not involve binding. 8363 // asynchronously and AsyncTexSubImage2D does not involved binding.
8368 EXPECT_CALL(*gl_, GenTextures(1, _)) 8364 EXPECT_CALL(*gl_, GenTextures(1, _))
8369 .WillOnce(SetArgumentPointee<1>(kServiceTextureId)); 8365 .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
8370 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8366 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8371 texture_ref = GetTexture(client_texture_id_); 8367 texture_ref = GetTexture(client_texture_id_);
8372 texture = texture_ref->texture(); 8368 texture = texture_ref->texture();
8373 texture->SetImmutable(false); 8369 texture->SetImmutable(false);
8374 // Create transfer state since it doesn't exist. 8370 // Create transfer state since it doesn't exist.
8375 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) 8371 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8376 .WillOnce(Return( 8372 .WillOnce(Return(
8377 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>)) 8373 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
8378 .RetiresOnSaturation(); 8374 .RetiresOnSaturation();
8379 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)) 8375 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
8380 .RetiresOnSaturation(); 8376 .RetiresOnSaturation();
8381 // Start async transfer. 8377 // Start async transfer.
8382 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd)); 8378 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8383 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8379 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8384 EXPECT_EQ( 8380 EXPECT_EQ(
8385 delegate, 8381 delegate,
8386 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8382 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8387 texture_ref)); 8383 texture_ref));
8388 8384
8389 EXPECT_TRUE(texture->IsImmutable()); 8385 EXPECT_TRUE(texture->IsImmutable());
8390 // Wait for completion. 8386 // Wait for completion.
8391 EXPECT_CALL(*delegate, WaitForTransferCompletion()); 8387 EXPECT_CALL(*delegate, WaitForTransferCompletion());
8392 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); 8388 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8393 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); 8389 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
8394 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8390 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8395 } 8391 }
8396
8397 // WaitAllAsyncTexImage2D
8398 EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
8399 DoDeleteTexture(client_texture_id_, kServiceTextureId);
8400 EXPECT_FALSE(
8401 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8402 texture_ref));
8403 texture->SetImmutable(false);
8404 delegate = NULL;
8405 {
8406 // Get a fresh texture since the existing texture cannot be respecified
8407 // asynchronously and AsyncTexSubImage2D does not involve binding.
8408 EXPECT_CALL(*gl_, GenTextures(1, _))
8409 .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
8410 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8411 texture_ref = GetTexture(client_texture_id_);
8412 texture = texture_ref->texture();
8413 texture->SetImmutable(false);
8414 // Create transfer state since it doesn't exist.
8415 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8416 .WillOnce(Return(
8417 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
8418 .RetiresOnSaturation();
8419 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
8420 .RetiresOnSaturation();
8421 // Start async transfer.
8422 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8423 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8424 EXPECT_EQ(
8425 delegate,
8426 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8427 texture_ref));
8428
8429 EXPECT_TRUE(texture->IsImmutable());
8430 // Wait for completion of all uploads.
8431 EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation();
8432 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8433 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd));
8434 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8435 }
8436 } 8392 }
8437 8393
8438 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { 8394 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
8439 InitDecoder( 8395 InitDecoder(
8440 "GL_CHROMIUM_async_pixel_transfers", // extensions 8396 "GL_CHROMIUM_async_pixel_transfers", // extensions
8441 "3.0", // gl version 8397 "3.0", // gl version
8442 false, false, false, // has alpha/depth/stencil 8398 false, false, false, // has alpha/depth/stencil
8443 false, false, false, // request alpha/depth/stencil 8399 false, false, false, // request alpha/depth/stencil
8444 true); // bind generates resource 8400 true); // bind generates resource
8445 8401
8446 // Set up the texture. 8402 // Set up the texture.
8447 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8403 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8448 TextureRef* texture_ref = GetTexture(client_texture_id_); 8404 TextureRef* texture_ref = GetTexture(client_texture_id_);
8449 8405
8450 // Set a mock Async delegate. 8406 // Set a mock Async delegate.
8451 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8407 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8452 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8408 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8453 manager->Initialize(group().texture_manager()); 8409 manager->Initialize(group().texture_manager());
8454 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8410 decoder_->SetAsyncPixelTransferManagerForTest(manager);
8455 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; 8411 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
8456 8412
8457 AsyncTexImage2DCHROMIUM teximage_cmd; 8413 AsyncTexImage2DCHROMIUM teximage_cmd;
8458 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 8414 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
8459 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, 8415 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
8460 0, 0, 0);
8461 8416
8462 // No transfer delegate exists initially. 8417 // No transfer delegate exists initially.
8463 EXPECT_FALSE( 8418 EXPECT_FALSE(
8464 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8419 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8465 texture_ref)); 8420 texture_ref));
8466 8421
8467 // Create delegate on AsyncTexImage2D. 8422 // Create delegate on AsyncTexImage2D.
8468 { 8423 {
8469 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) 8424 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8470 .WillOnce(Return( 8425 .WillOnce(Return(
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
9409 // TODO(gman): TexImage2DImmediate 9364 // TODO(gman): TexImage2DImmediate
9410 9365
9411 // TODO(gman): TexSubImage2DImmediate 9366 // TODO(gman): TexSubImage2DImmediate
9412 9367
9413 // TODO(gman): UseProgram 9368 // TODO(gman): UseProgram
9414 9369
9415 // TODO(gman): SwapBuffers 9370 // TODO(gman): SwapBuffers
9416 9371
9417 } // namespace gles2 9372 } // namespace gles2
9418 } // namespace gpu 9373 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698