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

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

Issue 116863003: gpu: Reuse transfer buffers more aggresively (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebased; removed unnecessary barrier; use CheckedNumeric 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
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);
8227 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; 8228 AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
8228 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, 8229 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA,
8229 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 8230 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset,
8231 0, 0, 0);
8230 WaitAsyncTexImage2DCHROMIUM wait_cmd; 8232 WaitAsyncTexImage2DCHROMIUM wait_cmd;
8231 wait_cmd.Init(GL_TEXTURE_2D); 8233 wait_cmd.Init(GL_TEXTURE_2D);
8234 WaitAllAsyncTexImage2DCHROMIUM wait_all_cmd;
8235 wait_all_cmd.Init();
8232 8236
8233 // No transfer state exists initially. 8237 // No transfer state exists initially.
8234 EXPECT_FALSE( 8238 EXPECT_FALSE(
8235 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8239 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8236 texture_ref)); 8240 texture_ref));
8237 8241
8238 base::Closure bind_callback; 8242 base::Closure bind_callback;
8239 8243
8240 // AsyncTexImage2D 8244 // AsyncTexImage2D
8241 { 8245 {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
8382 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8386 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8383 texture_ref)); 8387 texture_ref));
8384 8388
8385 EXPECT_TRUE(texture->IsImmutable()); 8389 EXPECT_TRUE(texture->IsImmutable());
8386 // Wait for completion. 8390 // Wait for completion.
8387 EXPECT_CALL(*delegate, WaitForTransferCompletion()); 8391 EXPECT_CALL(*delegate, WaitForTransferCompletion());
8388 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); 8392 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8389 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); 8393 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
8390 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8394 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8391 } 8395 }
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 involved binding.
piman 2014/03/21 22:35:51 nit: typo involved->involves
jadahl 2014/03/24 10:09:54 Hmm, isn't "involve" more correct? Changed to that
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 }
8392 } 8436 }
8393 8437
8394 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { 8438 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
8395 InitDecoder( 8439 InitDecoder(
8396 "GL_CHROMIUM_async_pixel_transfers", // extensions 8440 "GL_CHROMIUM_async_pixel_transfers", // extensions
8397 "3.0", // gl version 8441 "3.0", // gl version
8398 false, false, false, // has alpha/depth/stencil 8442 false, false, false, // has alpha/depth/stencil
8399 false, false, false, // request alpha/depth/stencil 8443 false, false, false, // request alpha/depth/stencil
8400 true); // bind generates resource 8444 true); // bind generates resource
8401 8445
8402 // Set up the texture. 8446 // Set up the texture.
8403 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8447 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8404 TextureRef* texture_ref = GetTexture(client_texture_id_); 8448 TextureRef* texture_ref = GetTexture(client_texture_id_);
8405 8449
8406 // Set a mock Async delegate. 8450 // Set a mock Async delegate.
8407 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8451 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8408 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8452 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8409 manager->Initialize(group().texture_manager()); 8453 manager->Initialize(group().texture_manager());
8410 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8454 decoder_->SetAsyncPixelTransferManagerForTest(manager);
8411 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; 8455 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
8412 8456
8413 AsyncTexImage2DCHROMIUM teximage_cmd; 8457 AsyncTexImage2DCHROMIUM teximage_cmd;
8414 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 8458 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
8415 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 8459 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset,
8460 0, 0, 0);
8416 8461
8417 // No transfer delegate exists initially. 8462 // No transfer delegate exists initially.
8418 EXPECT_FALSE( 8463 EXPECT_FALSE(
8419 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8464 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8420 texture_ref)); 8465 texture_ref));
8421 8466
8422 // Create delegate on AsyncTexImage2D. 8467 // Create delegate on AsyncTexImage2D.
8423 { 8468 {
8424 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) 8469 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8425 .WillOnce(Return( 8470 .WillOnce(Return(
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
9233 // TODO(gman): TexImage2DImmediate 9278 // TODO(gman): TexImage2DImmediate
9234 9279
9235 // TODO(gman): TexSubImage2DImmediate 9280 // TODO(gman): TexSubImage2DImmediate
9236 9281
9237 // TODO(gman): UseProgram 9282 // TODO(gman): UseProgram
9238 9283
9239 // TODO(gman): SwapBuffers 9284 // TODO(gman): SwapBuffers
9240 9285
9241 } // namespace gles2 9286 } // namespace gles2
9242 } // namespace gpu 9287 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698