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

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: Added AsyncUploadSync test, FencedAllocator test, addressed review issues Created 6 years, 10 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 8032 matching lines...) Expand 10 before | Expand all | Expand 10 after
8043 // Set a mock Async delegate 8043 // Set a mock Async delegate
8044 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8044 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8045 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8045 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8046 manager->Initialize(group().texture_manager()); 8046 manager->Initialize(group().texture_manager());
8047 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8047 decoder_->SetAsyncPixelTransferManagerForTest(manager);
8048 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; 8048 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
8049 8049
8050 // Tex(Sub)Image2D upload commands. 8050 // Tex(Sub)Image2D upload commands.
8051 AsyncTexImage2DCHROMIUM teximage_cmd; 8051 AsyncTexImage2DCHROMIUM teximage_cmd;
8052 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 8052 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
8053 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 8053 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset,
8054 0, 0, 0);
8054 AsyncTexSubImage2DCHROMIUM texsubimage_cmd; 8055 AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
8055 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA, 8056 texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA,
8056 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 8057 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset,
8058 0, 0, 0);
8057 WaitAsyncTexImage2DCHROMIUM wait_cmd; 8059 WaitAsyncTexImage2DCHROMIUM wait_cmd;
8058 wait_cmd.Init(GL_TEXTURE_2D); 8060 wait_cmd.Init(GL_TEXTURE_2D);
8061 WaitAllAsyncTexImage2DCHROMIUM wait_all_cmd;
8062 wait_all_cmd.Init();
8059 8063
8060 // No transfer state exists initially. 8064 // No transfer state exists initially.
8061 EXPECT_FALSE( 8065 EXPECT_FALSE(
8062 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8066 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8063 texture_ref)); 8067 texture_ref));
8064 8068
8065 base::Closure bind_callback; 8069 base::Closure bind_callback;
8066 8070
8067 // AsyncTexImage2D 8071 // AsyncTexImage2D
8068 { 8072 {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
8209 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8213 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8210 texture_ref)); 8214 texture_ref));
8211 8215
8212 EXPECT_TRUE(texture->IsImmutable()); 8216 EXPECT_TRUE(texture->IsImmutable());
8213 // Wait for completion. 8217 // Wait for completion.
8214 EXPECT_CALL(*delegate, WaitForTransferCompletion()); 8218 EXPECT_CALL(*delegate, WaitForTransferCompletion());
8215 EXPECT_CALL(*manager, BindCompletedAsyncTransfers()); 8219 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8216 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd)); 8220 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
8217 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 8221 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8218 } 8222 }
8223
8224 // WaitAllAsyncTexImage2D
8225 EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
8226 DoDeleteTexture(client_texture_id_, kServiceTextureId);
8227 EXPECT_FALSE(
8228 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8229 texture_ref));
8230 texture->SetImmutable(false);
8231 delegate = NULL;
8232 {
8233 // Get a fresh texture since the existing texture cannot be respecified
8234 // asynchronously and AsyncTexSubImage2D does not involved binding.
8235 EXPECT_CALL(*gl_, GenTextures(1, _))
8236 .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
8237 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8238 texture_ref = GetTexture(client_texture_id_);
8239 texture = texture_ref->texture();
8240 texture->SetImmutable(false);
8241 // Create transfer state since it doesn't exist.
8242 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8243 .WillOnce(Return(
8244 delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
8245 .RetiresOnSaturation();
8246 EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
8247 .RetiresOnSaturation();
8248 // Start async transfer.
8249 EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
8250 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8251 EXPECT_EQ(
8252 delegate,
8253 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8254 texture_ref));
8255
8256 EXPECT_TRUE(texture->IsImmutable());
8257 // Wait for completion of all uploads.
8258 EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation();
8259 EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
8260 EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd));
8261 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8262 }
8219 } 8263 }
8220 8264
8221 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) { 8265 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
8222 InitDecoder( 8266 InitDecoder(
8223 "GL_CHROMIUM_async_pixel_transfers", // extensions 8267 "GL_CHROMIUM_async_pixel_transfers", // extensions
8224 "3.0", // gl version 8268 "3.0", // gl version
8225 false, false, false, // has alpha/depth/stencil 8269 false, false, false, // has alpha/depth/stencil
8226 false, false, false, // request alpha/depth/stencil 8270 false, false, false, // request alpha/depth/stencil
8227 true); // bind generates resource 8271 true); // bind generates resource
8228 8272
8229 // Set up the texture. 8273 // Set up the texture.
8230 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 8274 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
8231 TextureRef* texture_ref = GetTexture(client_texture_id_); 8275 TextureRef* texture_ref = GetTexture(client_texture_id_);
8232 8276
8233 // Set a mock Async delegate. 8277 // Set a mock Async delegate.
8234 StrictMock<gpu::MockAsyncPixelTransferManager>* manager = 8278 StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
8235 new StrictMock<gpu::MockAsyncPixelTransferManager>; 8279 new StrictMock<gpu::MockAsyncPixelTransferManager>;
8236 manager->Initialize(group().texture_manager()); 8280 manager->Initialize(group().texture_manager());
8237 decoder_->SetAsyncPixelTransferManagerForTest(manager); 8281 decoder_->SetAsyncPixelTransferManagerForTest(manager);
8238 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL; 8282 StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
8239 8283
8240 AsyncTexImage2DCHROMIUM teximage_cmd; 8284 AsyncTexImage2DCHROMIUM teximage_cmd;
8241 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, 8285 teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
8242 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); 8286 GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset,
8287 0, 0, 0);
8243 8288
8244 // No transfer delegate exists initially. 8289 // No transfer delegate exists initially.
8245 EXPECT_FALSE( 8290 EXPECT_FALSE(
8246 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate( 8291 decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
8247 texture_ref)); 8292 texture_ref));
8248 8293
8249 // Create delegate on AsyncTexImage2D. 8294 // Create delegate on AsyncTexImage2D.
8250 { 8295 {
8251 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _)) 8296 EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
8252 .WillOnce(Return( 8297 .WillOnce(Return(
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
8878 // TODO(gman): TexImage2DImmediate 8923 // TODO(gman): TexImage2DImmediate
8879 8924
8880 // TODO(gman): TexSubImage2DImmediate 8925 // TODO(gman): TexSubImage2DImmediate
8881 8926
8882 // TODO(gman): UseProgram 8927 // TODO(gman): UseProgram
8883 8928
8884 // TODO(gman): SwapBuffers 8929 // TODO(gman): SwapBuffers
8885 8930
8886 } // namespace gles2 8931 } // namespace gles2
8887 } // namespace gpu 8932 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698