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

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

Issue 2378583003: Ping watchdog thread during GpuChannel destruction (Closed)
Patch Set: revert to passing via destructor Created 4 years, 2 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/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "gpu/command_buffer/service/error_state_mock.h" 15 #include "gpu/command_buffer/service/error_state_mock.h"
16 #include "gpu/command_buffer/service/feature_info.h" 16 #include "gpu/command_buffer/service/feature_info.h"
17 #include "gpu/command_buffer/service/framebuffer_manager.h" 17 #include "gpu/command_buffer/service/framebuffer_manager.h"
18 #include "gpu/command_buffer/service/gl_stream_texture_image.h" 18 #include "gpu/command_buffer/service/gl_stream_texture_image.h"
19 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" 19 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
20 #include "gpu/command_buffer/service/gpu_service_test.h" 20 #include "gpu/command_buffer/service/gpu_service_test.h"
21 #include "gpu/command_buffer/service/mailbox_manager.h" 21 #include "gpu/command_buffer/service/mailbox_manager.h"
22 #include "gpu/command_buffer/service/memory_tracking.h" 22 #include "gpu/command_buffer/service/memory_tracking.h"
23 #include "gpu/command_buffer/service/mocks.h" 23 #include "gpu/command_buffer/service/mocks.h"
24 #include "gpu/command_buffer/service/progress_reporter_stub.h"
24 #include "gpu/command_buffer/service/test_helper.h" 25 #include "gpu/command_buffer/service/test_helper.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 #include "ui/gl/gl_image_stub.h" 27 #include "ui/gl/gl_image_stub.h"
27 #include "ui/gl/gl_mock.h" 28 #include "ui/gl/gl_mock.h"
28 #include "ui/gl/gl_switches.h" 29 #include "ui/gl/gl_switches.h"
29 30
30 using ::testing::AtLeast; 31 using ::testing::AtLeast;
31 using ::testing::Pointee; 32 using ::testing::Pointee;
32 using ::testing::Return; 33 using ::testing::Return;
33 using ::testing::SetArgPointee; 34 using ::testing::SetArgPointee;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 kMaxArrayTextureLayers, 91 kMaxArrayTextureLayers,
91 kUseDefaultTextures)); 92 kUseDefaultTextures));
92 SetupFeatureInfo("", "OpenGL ES 2.0", false); 93 SetupFeatureInfo("", "OpenGL ES 2.0", false);
93 TestHelper::SetupTextureManagerInitExpectations( 94 TestHelper::SetupTextureManagerInitExpectations(
94 gl_.get(), false, false, false, "", kUseDefaultTextures); 95 gl_.get(), false, false, false, "", kUseDefaultTextures);
95 manager_->Initialize(); 96 manager_->Initialize();
96 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 97 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
97 } 98 }
98 99
99 void TearDown() override { 100 void TearDown() override {
100 manager_->Destroy(false); 101 ProgressReporterStub progress_reporter;
102 manager_->Destroy(false, &progress_reporter);
101 manager_.reset(); 103 manager_.reset();
102 GpuServiceTest::TearDown(); 104 GpuServiceTest::TearDown();
103 } 105 }
104 106
105 void SetParameter( 107 void SetParameter(
106 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { 108 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
107 TestHelper::SetTexParameteriWithExpectations( 109 TestHelper::SetTexParameteriWithExpectations(
108 gl_.get(), error_state_.get(), manager_.get(), 110 gl_.get(), error_state_.get(), manager_.get(),
109 texture_ref, pname, value, error); 111 texture_ref, pname, value, error);
110 } 112 }
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 kMax3DTextureSize, 258 kMax3DTextureSize,
257 kMaxArrayTextureLayers, 259 kMaxArrayTextureLayers,
258 use_default_textures); 260 use_default_textures);
259 manager.Initialize(); 261 manager.Initialize();
260 262
261 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL); 263 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL);
262 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL); 264 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL);
263 265
264 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. 266 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
265 267
266 manager.Destroy(false); 268 ProgressReporterStub progress_reporter;
269 manager.Destroy(false, &progress_reporter);
267 } 270 }
268 271
269 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) { 272 TEST_F(TextureManagerTest, UseDefaultTexturesFalse) {
270 bool use_default_textures = false; 273 bool use_default_textures = false;
271 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 274 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
272 false, false, false, "GL_ANGLE_texture_usage", use_default_textures); 275 false, false, false, "GL_ANGLE_texture_usage", use_default_textures);
273 TextureManager manager(NULL, 276 TextureManager manager(NULL,
274 feature_info_.get(), 277 feature_info_.get(),
275 kMaxTextureSize, 278 kMaxTextureSize,
276 kMaxCubeMapTextureSize, 279 kMaxCubeMapTextureSize,
277 kMaxRectangleTextureSize, 280 kMaxRectangleTextureSize,
278 kMax3DTextureSize, 281 kMax3DTextureSize,
279 kMaxArrayTextureLayers, 282 kMaxArrayTextureLayers,
280 use_default_textures); 283 use_default_textures);
281 manager.Initialize(); 284 manager.Initialize();
282 285
283 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL); 286 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL);
284 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL); 287 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL);
285 288
286 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB. 289 // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
287 290
288 manager.Destroy(false); 291 ProgressReporterStub progress_reporter;
292 manager.Destroy(false, &progress_reporter);
289 } 293 }
290 294
291 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) { 295 TEST_F(TextureManagerTest, UseDefaultTexturesTrueES3) {
292 bool use_default_textures = true; 296 bool use_default_textures = true;
293 SetupFeatureInfo("", "OpenGL ES 3.0", true); 297 SetupFeatureInfo("", "OpenGL ES 3.0", true);
294 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 298 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
295 true, true, false, "", use_default_textures); 299 true, true, false, "", use_default_textures);
296 TextureManager manager(NULL, 300 TextureManager manager(NULL,
297 feature_info_.get(), 301 feature_info_.get(),
298 kMaxTextureSize, 302 kMaxTextureSize,
299 kMaxCubeMapTextureSize, 303 kMaxCubeMapTextureSize,
300 kMaxRectangleTextureSize, 304 kMaxRectangleTextureSize,
301 kMax3DTextureSize, 305 kMax3DTextureSize,
302 kMaxArrayTextureLayers, 306 kMaxArrayTextureLayers,
303 use_default_textures); 307 use_default_textures);
304 manager.Initialize(); 308 manager.Initialize();
305 309
306 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL); 310 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) != NULL);
307 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL); 311 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) != NULL);
308 312
309 manager.Destroy(false); 313 ProgressReporterStub progress_reporter;
314 manager.Destroy(false, &progress_reporter);
310 } 315 }
311 316
312 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) { 317 TEST_F(TextureManagerTest, UseDefaultTexturesFalseES3) {
313 bool use_default_textures = false; 318 bool use_default_textures = false;
314 SetupFeatureInfo("", "OpenGL ES 3.0", true); 319 SetupFeatureInfo("", "OpenGL ES 3.0", true);
315 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), 320 TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
316 true, true, false, "", use_default_textures); 321 true, true, false, "", use_default_textures);
317 TextureManager manager(NULL, 322 TextureManager manager(NULL,
318 feature_info_.get(), 323 feature_info_.get(),
319 kMaxTextureSize, 324 kMaxTextureSize,
320 kMaxCubeMapTextureSize, 325 kMaxCubeMapTextureSize,
321 kMaxRectangleTextureSize, 326 kMaxRectangleTextureSize,
322 kMax3DTextureSize, 327 kMax3DTextureSize,
323 kMaxArrayTextureLayers, 328 kMaxArrayTextureLayers,
324 use_default_textures); 329 use_default_textures);
325 manager.Initialize(); 330 manager.Initialize();
326 331
327 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL); 332 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_3D) == NULL);
328 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL); 333 EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D_ARRAY) == NULL);
329 334
330 manager.Destroy(false); 335 ProgressReporterStub progress_reporter;
336 manager.Destroy(false, &progress_reporter);
331 } 337 }
332 338
333 TEST_F(TextureManagerTest, TextureUsageExt) { 339 TEST_F(TextureManagerTest, TextureUsageExt) {
334 TestHelper::SetupTextureManagerInitExpectations( 340 TestHelper::SetupTextureManagerInitExpectations(
335 gl_.get(), false, false, false, "GL_ANGLE_texture_usage", 341 gl_.get(), false, false, false, "GL_ANGLE_texture_usage",
336 kUseDefaultTextures); 342 kUseDefaultTextures);
337 TextureManager manager(NULL, 343 TextureManager manager(NULL,
338 feature_info_.get(), 344 feature_info_.get(),
339 kMaxTextureSize, 345 kMaxTextureSize,
340 kMaxCubeMapTextureSize, 346 kMaxCubeMapTextureSize,
341 kMaxRectangleTextureSize, 347 kMaxRectangleTextureSize,
342 kMax3DTextureSize, 348 kMax3DTextureSize,
343 kMaxArrayTextureLayers, 349 kMaxArrayTextureLayers,
344 kUseDefaultTextures); 350 kUseDefaultTextures);
345 manager.Initialize(); 351 manager.Initialize();
346 const GLuint kClient1Id = 1; 352 const GLuint kClient1Id = 1;
347 const GLuint kService1Id = 11; 353 const GLuint kService1Id = 11;
348 // Check we can create texture. 354 // Check we can create texture.
349 manager.CreateTexture(kClient1Id, kService1Id); 355 manager.CreateTexture(kClient1Id, kService1Id);
350 // Check texture got created. 356 // Check texture got created.
351 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 357 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
352 ASSERT_TRUE(texture_ref != NULL); 358 ASSERT_TRUE(texture_ref != NULL);
353 TestHelper::SetTexParameteriWithExpectations( 359 TestHelper::SetTexParameteriWithExpectations(
354 gl_.get(), error_state_.get(), &manager, texture_ref, 360 gl_.get(), error_state_.get(), &manager, texture_ref,
355 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR); 361 GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE, GL_NO_ERROR);
356 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE), 362 EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE),
357 texture_ref->texture()->usage()); 363 texture_ref->texture()->usage());
358 manager.Destroy(false); 364 ProgressReporterStub progress_reporter;
365 manager.Destroy(false, &progress_reporter);
359 } 366 }
360 367
361 TEST_F(TextureManagerTest, Destroy) { 368 TEST_F(TextureManagerTest, Destroy) {
362 const GLuint kClient1Id = 1; 369 const GLuint kClient1Id = 1;
363 const GLuint kService1Id = 11; 370 const GLuint kService1Id = 11;
364 TestHelper::SetupTextureManagerInitExpectations( 371 TestHelper::SetupTextureManagerInitExpectations(
365 gl_.get(), false, false, false, "", kUseDefaultTextures); 372 gl_.get(), false, false, false, "", kUseDefaultTextures);
366 TextureManager manager(NULL, 373 TextureManager manager(NULL,
367 feature_info_.get(), 374 feature_info_.get(),
368 kMaxTextureSize, 375 kMaxTextureSize,
369 kMaxCubeMapTextureSize, 376 kMaxCubeMapTextureSize,
370 kMaxRectangleTextureSize, 377 kMaxRectangleTextureSize,
371 kMax3DTextureSize, 378 kMax3DTextureSize,
372 kMaxArrayTextureLayers, 379 kMaxArrayTextureLayers,
373 kUseDefaultTextures); 380 kUseDefaultTextures);
374 manager.Initialize(); 381 manager.Initialize();
375 // Check we can create texture. 382 // Check we can create texture.
376 manager.CreateTexture(kClient1Id, kService1Id); 383 manager.CreateTexture(kClient1Id, kService1Id);
377 // Check texture got created. 384 // Check texture got created.
378 TextureRef* texture = manager.GetTexture(kClient1Id); 385 TextureRef* texture = manager.GetTexture(kClient1Id);
379 ASSERT_TRUE(texture != NULL); 386 ASSERT_TRUE(texture != NULL);
380 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) 387 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
381 .Times(1) 388 .Times(1)
382 .RetiresOnSaturation(); 389 .RetiresOnSaturation();
383 TestHelper::SetupTextureManagerDestructionExpectations( 390 TestHelper::SetupTextureManagerDestructionExpectations(
384 gl_.get(), false, false, "", kUseDefaultTextures); 391 gl_.get(), false, false, "", kUseDefaultTextures);
385 manager.Destroy(true); 392 ProgressReporterStub progress_reporter;
393 manager.Destroy(true, &progress_reporter);
386 // Check that resources got freed. 394 // Check that resources got freed.
387 texture = manager.GetTexture(kClient1Id); 395 texture = manager.GetTexture(kClient1Id);
388 ASSERT_TRUE(texture == NULL); 396 ASSERT_TRUE(texture == NULL);
389 } 397 }
390 398
391 TEST_F(TextureManagerTest, MaxValues) { 399 TEST_F(TextureManagerTest, MaxValues) {
392 // Check we get the right values for the max sizes. 400 // Check we get the right values for the max sizes.
393 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D)); 401 EXPECT_EQ(kMax2dLevels, manager_->MaxLevelsForTarget(GL_TEXTURE_2D));
394 EXPECT_EQ(kMaxCubeMapLevels, 402 EXPECT_EQ(kMaxCubeMapLevels,
395 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP)); 403 manager_->MaxLevelsForTarget(GL_TEXTURE_CUBE_MAP));
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 kMaxArrayTextureLayers, 539 kMaxArrayTextureLayers,
532 kUseDefaultTextures); 540 kUseDefaultTextures);
533 // Check NPOT width on level 0 541 // Check NPOT width on level 0
534 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1)); 542 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1));
535 // Check NPOT height on level 0 543 // Check NPOT height on level 0
536 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1)); 544 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 2, 5, 1));
537 // Check NPOT width on level 1 545 // Check NPOT width on level 1
538 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1)); 546 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 5, 2, 1));
539 // Check NPOT height on level 1 547 // Check NPOT height on level 1
540 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1)); 548 EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 1, 2, 5, 1));
541 manager.Destroy(false); 549 ProgressReporterStub progress_reporter;
550 manager.Destroy(false, &progress_reporter);
542 } 551 }
543 552
544 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) { 553 TEST_F(TextureManagerTest, AlphaLuminanceCompatibilityProfile) {
545 const GLuint kClientId = 1; 554 const GLuint kClientId = 1;
546 const GLuint kServiceId = 11; 555 const GLuint kServiceId = 11;
547 556
548 SetupFeatureInfo("", "2.1", false); 557 SetupFeatureInfo("", "2.1", false);
549 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false, 558 TestHelper::SetupTextureManagerInitExpectations(gl_.get(), false, false,
550 false, "", kUseDefaultTextures); 559 false, "", kUseDefaultTextures);
551 TextureManager manager(NULL, 560 TextureManager manager(NULL,
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 // delete the texture. 742 // delete the texture.
734 if (!texture_ref_->client_id()) { 743 if (!texture_ref_->client_id()) {
735 // Check that it gets deleted when the last reference is released. 744 // Check that it gets deleted when the last reference is released.
736 EXPECT_CALL(*gl_, 745 EXPECT_CALL(*gl_,
737 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id()))) 746 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id())))
738 .Times(1) 747 .Times(1)
739 .RetiresOnSaturation(); 748 .RetiresOnSaturation();
740 } 749 }
741 texture_ref_ = NULL; 750 texture_ref_ = NULL;
742 } 751 }
743 manager_->Destroy(false); 752 ProgressReporterStub progress_reporter;
753 manager_->Destroy(false, &progress_reporter);
744 manager_.reset(); 754 manager_.reset();
745 GpuServiceTest::TearDown(); 755 GpuServiceTest::TearDown();
746 } 756 }
747 757
748 void SetParameter( 758 void SetParameter(
749 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) { 759 TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
750 TestHelper::SetTexParameteriWithExpectations( 760 TestHelper::SetTexParameteriWithExpectations(
751 gl_.get(), error_state_.get(), manager_.get(), 761 gl_.get(), error_state_.get(), manager_.get(),
752 texture_ref, pname, value, error); 762 texture_ref, pname, value, error);
753 } 763 }
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 // Check Setting level 0 to NPOT 1046 // Check Setting level 0 to NPOT
1037 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0, 1047 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 4, 5, 1, 0,
1038 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5)); 1048 GL_RGBA, GL_UNSIGNED_BYTE, gfx::Rect(4, 5));
1039 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture)); 1049 EXPECT_TRUE(TextureTestHelper::IsNPOT(texture));
1040 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture)); 1050 EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
1041 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref)); 1051 EXPECT_TRUE(manager.CanGenerateMipmaps(texture_ref));
1042 EXPECT_FALSE(manager.CanRender(texture_ref)); 1052 EXPECT_FALSE(manager.CanRender(texture_ref));
1043 manager.MarkMipmapsGenerated(texture_ref); 1053 manager.MarkMipmapsGenerated(texture_ref);
1044 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); 1054 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
1045 EXPECT_TRUE(manager.CanRender(texture_ref)); 1055 EXPECT_TRUE(manager.CanRender(texture_ref));
1046 manager.Destroy(false); 1056 ProgressReporterStub progress_reporter;
1057 manager.Destroy(false, &progress_reporter);
1047 } 1058 }
1048 1059
1049 TEST_F(TextureTest, POTCubeMap) { 1060 TEST_F(TextureTest, POTCubeMap) {
1050 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP); 1061 manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP);
1051 Texture* texture = texture_ref_->texture(); 1062 Texture* texture = texture_ref_->texture();
1052 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); 1063 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target());
1053 // Check Setting level 0 each face to POT 1064 // Check Setting level 0 each face to POT
1054 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, 1065 manager_->SetLevelInfo(texture_ref_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0,
1055 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 1066 GL_RGBA, 4, 4, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
1056 gfx::Rect(4, 4)); 1067 gfx::Rect(4, 4));
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); 1349 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1));
1339 EXPECT_FALSE(manager.CanRender(texture_ref)); 1350 EXPECT_FALSE(manager.CanRender(texture_ref));
1340 TestHelper::SetTexParameteriWithExpectations( 1351 TestHelper::SetTexParameteriWithExpectations(
1341 gl_.get(), error_state_.get(), &manager, 1352 gl_.get(), error_state_.get(), &manager,
1342 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); 1353 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
1343 EXPECT_FALSE(manager.CanRender(texture_ref)); 1354 EXPECT_FALSE(manager.CanRender(texture_ref));
1344 TestHelper::SetTexParameteriWithExpectations( 1355 TestHelper::SetTexParameteriWithExpectations(
1345 gl_.get(), error_state_.get(), &manager, texture_ref, 1356 gl_.get(), error_state_.get(), &manager, texture_ref,
1346 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); 1357 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
1347 EXPECT_TRUE(manager.CanRender(texture_ref)); 1358 EXPECT_TRUE(manager.CanRender(texture_ref));
1348 manager.Destroy(false); 1359 ProgressReporterStub progress_reporter;
1360 manager.Destroy(false, &progress_reporter);
1349 } 1361 }
1350 1362
1351 TEST_F(TextureTest, FloatLinear) { 1363 TEST_F(TextureTest, FloatLinear) {
1352 TestHelper::SetupFeatureInfoInitExpectations( 1364 TestHelper::SetupFeatureInfoInitExpectations(
1353 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear"); 1365 gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear");
1354 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1366 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1355 feature_info->InitializeForTesting(); 1367 feature_info->InitializeForTesting();
1356 TextureManager manager(NULL, 1368 TextureManager manager(NULL,
1357 feature_info.get(), 1369 feature_info.get(),
1358 kMaxTextureSize, 1370 kMaxTextureSize,
1359 kMaxCubeMapTextureSize, 1371 kMaxCubeMapTextureSize,
1360 kMaxRectangleTextureSize, 1372 kMaxRectangleTextureSize,
1361 kMax3DTextureSize, 1373 kMax3DTextureSize,
1362 kMaxArrayTextureLayers, 1374 kMaxArrayTextureLayers,
1363 kUseDefaultTextures); 1375 kUseDefaultTextures);
1364 manager.CreateTexture(kClient1Id, kService1Id); 1376 manager.CreateTexture(kClient1Id, kService1Id);
1365 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1377 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1366 ASSERT_TRUE(texture_ref != NULL); 1378 ASSERT_TRUE(texture_ref != NULL);
1367 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1379 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1368 Texture* texture = texture_ref->texture(); 1380 Texture* texture = texture_ref->texture();
1369 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1381 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1370 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1382 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1371 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1)); 1383 GL_RGBA, GL_FLOAT, gfx::Rect(1, 1));
1372 EXPECT_TRUE(manager.CanRender(texture_ref)); 1384 EXPECT_TRUE(manager.CanRender(texture_ref));
1373 manager.Destroy(false); 1385 ProgressReporterStub progress_reporter;
1386 manager.Destroy(false, &progress_reporter);
1374 } 1387 }
1375 1388
1376 TEST_F(TextureTest, HalfFloatNotLinear) { 1389 TEST_F(TextureTest, HalfFloatNotLinear) {
1377 TestHelper::SetupFeatureInfoInitExpectations( 1390 TestHelper::SetupFeatureInfoInitExpectations(
1378 gl_.get(), "GL_OES_texture_half_float"); 1391 gl_.get(), "GL_OES_texture_half_float");
1379 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1392 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1380 feature_info->InitializeForTesting(); 1393 feature_info->InitializeForTesting();
1381 TextureManager manager(NULL, 1394 TextureManager manager(NULL,
1382 feature_info.get(), 1395 feature_info.get(),
1383 kMaxTextureSize, 1396 kMaxTextureSize,
(...skipping 12 matching lines...) Expand all
1396 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); 1409 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1));
1397 EXPECT_FALSE(manager.CanRender(texture_ref)); 1410 EXPECT_FALSE(manager.CanRender(texture_ref));
1398 TestHelper::SetTexParameteriWithExpectations( 1411 TestHelper::SetTexParameteriWithExpectations(
1399 gl_.get(), error_state_.get(), &manager, 1412 gl_.get(), error_state_.get(), &manager,
1400 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR); 1413 texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
1401 EXPECT_FALSE(manager.CanRender(texture_ref)); 1414 EXPECT_FALSE(manager.CanRender(texture_ref));
1402 TestHelper::SetTexParameteriWithExpectations( 1415 TestHelper::SetTexParameteriWithExpectations(
1403 gl_.get(), error_state_.get(), &manager, texture_ref, 1416 gl_.get(), error_state_.get(), &manager, texture_ref,
1404 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR); 1417 GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
1405 EXPECT_TRUE(manager.CanRender(texture_ref)); 1418 EXPECT_TRUE(manager.CanRender(texture_ref));
1406 manager.Destroy(false); 1419 ProgressReporterStub progress_reporter;
1420 manager.Destroy(false, &progress_reporter);
1407 } 1421 }
1408 1422
1409 TEST_F(TextureTest, HalfFloatLinear) { 1423 TEST_F(TextureTest, HalfFloatLinear) {
1410 TestHelper::SetupFeatureInfoInitExpectations( 1424 TestHelper::SetupFeatureInfoInitExpectations(
1411 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear"); 1425 gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
1412 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1426 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1413 feature_info->InitializeForTesting(); 1427 feature_info->InitializeForTesting();
1414 TextureManager manager(NULL, 1428 TextureManager manager(NULL,
1415 feature_info.get(), 1429 feature_info.get(),
1416 kMaxTextureSize, 1430 kMaxTextureSize,
1417 kMaxCubeMapTextureSize, 1431 kMaxCubeMapTextureSize,
1418 kMaxRectangleTextureSize, 1432 kMaxRectangleTextureSize,
1419 kMax3DTextureSize, 1433 kMax3DTextureSize,
1420 kMaxArrayTextureLayers, 1434 kMaxArrayTextureLayers,
1421 kUseDefaultTextures); 1435 kUseDefaultTextures);
1422 manager.CreateTexture(kClient1Id, kService1Id); 1436 manager.CreateTexture(kClient1Id, kService1Id);
1423 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1437 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1424 ASSERT_TRUE(texture_ref != NULL); 1438 ASSERT_TRUE(texture_ref != NULL);
1425 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1439 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1426 Texture* texture = texture_ref->texture(); 1440 Texture* texture = texture_ref->texture();
1427 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1441 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1428 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1442 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1429 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1)); 1443 GL_RGBA, GL_HALF_FLOAT_OES, gfx::Rect(1, 1));
1430 EXPECT_TRUE(manager.CanRender(texture_ref)); 1444 EXPECT_TRUE(manager.CanRender(texture_ref));
1431 manager.Destroy(false); 1445 ProgressReporterStub progress_reporter;
1446 manager.Destroy(false, &progress_reporter);
1432 } 1447 }
1433 1448
1434 TEST_F(TextureTest, EGLImageExternal) { 1449 TEST_F(TextureTest, EGLImageExternal) {
1435 TestHelper::SetupFeatureInfoInitExpectations( 1450 TestHelper::SetupFeatureInfoInitExpectations(
1436 gl_.get(), "GL_OES_EGL_image_external"); 1451 gl_.get(), "GL_OES_EGL_image_external");
1437 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1452 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1438 feature_info->InitializeForTesting(); 1453 feature_info->InitializeForTesting();
1439 TextureManager manager(NULL, 1454 TextureManager manager(NULL,
1440 feature_info.get(), 1455 feature_info.get(),
1441 kMaxTextureSize, 1456 kMaxTextureSize,
1442 kMaxCubeMapTextureSize, 1457 kMaxCubeMapTextureSize,
1443 kMaxRectangleTextureSize, 1458 kMaxRectangleTextureSize,
1444 kMax3DTextureSize, 1459 kMax3DTextureSize,
1445 kMaxArrayTextureLayers, 1460 kMaxArrayTextureLayers,
1446 kUseDefaultTextures); 1461 kUseDefaultTextures);
1447 manager.CreateTexture(kClient1Id, kService1Id); 1462 manager.CreateTexture(kClient1Id, kService1Id);
1448 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1463 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1449 ASSERT_TRUE(texture_ref != NULL); 1464 ASSERT_TRUE(texture_ref != NULL);
1450 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES); 1465 manager.SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
1451 Texture* texture = texture_ref->texture(); 1466 Texture* texture = texture_ref->texture();
1452 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); 1467 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
1453 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); 1468 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
1454 manager.Destroy(false); 1469 ProgressReporterStub progress_reporter;
1470 manager.Destroy(false, &progress_reporter);
1455 } 1471 }
1456 1472
1457 TEST_F(TextureTest, DepthTexture) { 1473 TEST_F(TextureTest, DepthTexture) {
1458 TestHelper::SetupFeatureInfoInitExpectations( 1474 TestHelper::SetupFeatureInfoInitExpectations(
1459 gl_.get(), "GL_ANGLE_depth_texture"); 1475 gl_.get(), "GL_ANGLE_depth_texture");
1460 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo()); 1476 scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
1461 feature_info->InitializeForTesting(); 1477 feature_info->InitializeForTesting();
1462 TextureManager manager(NULL, 1478 TextureManager manager(NULL,
1463 feature_info.get(), 1479 feature_info.get(),
1464 kMaxTextureSize, 1480 kMaxTextureSize,
1465 kMaxCubeMapTextureSize, 1481 kMaxCubeMapTextureSize,
1466 kMaxRectangleTextureSize, 1482 kMaxRectangleTextureSize,
1467 kMax3DTextureSize, 1483 kMax3DTextureSize,
1468 kMaxArrayTextureLayers, 1484 kMaxArrayTextureLayers,
1469 kUseDefaultTextures); 1485 kUseDefaultTextures);
1470 manager.CreateTexture(kClient1Id, kService1Id); 1486 manager.CreateTexture(kClient1Id, kService1Id);
1471 TextureRef* texture_ref = manager.GetTexture(kClient1Id); 1487 TextureRef* texture_ref = manager.GetTexture(kClient1Id);
1472 ASSERT_TRUE(texture_ref != NULL); 1488 ASSERT_TRUE(texture_ref != NULL);
1473 manager.SetTarget(texture_ref, GL_TEXTURE_2D); 1489 manager.SetTarget(texture_ref, GL_TEXTURE_2D);
1474 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4, 1490 manager.SetLevelInfo(texture_ref, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 4, 4,
1475 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect()); 1491 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, gfx::Rect());
1476 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref)); 1492 EXPECT_FALSE(manager.CanGenerateMipmaps(texture_ref));
1477 manager.Destroy(false); 1493 ProgressReporterStub progress_reporter;
1494 manager.Destroy(false, &progress_reporter);
1478 } 1495 }
1479 1496
1480 TEST_F(TextureTest, SafeUnsafe) { 1497 TEST_F(TextureTest, SafeUnsafe) {
1481 static const GLuint kClient2Id = 2; 1498 static const GLuint kClient2Id = 2;
1482 static const GLuint kService2Id = 12; 1499 static const GLuint kService2Id = 12;
1483 static const GLuint kClient3Id = 3; 1500 static const GLuint kClient3Id = 3;
1484 static const GLuint kService3Id = 13; 1501 static const GLuint kService3Id = 13;
1485 EXPECT_FALSE(manager_->HaveUnclearedMips()); 1502 EXPECT_FALSE(manager_->HaveUnclearedMips());
1486 Texture* texture = texture_ref_->texture(); 1503 Texture* texture = texture_ref_->texture();
1487 EXPECT_EQ(0, texture->num_uncleared_mips()); 1504 EXPECT_EQ(0, texture->num_uncleared_mips());
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
2257 SetupFeatureInfo("", "OpenGL ES 2.0", false); 2274 SetupFeatureInfo("", "OpenGL ES 2.0", false);
2258 TestHelper::SetupTextureManagerInitExpectations( 2275 TestHelper::SetupTextureManagerInitExpectations(
2259 gl_.get(), false, false, false, "", kUseDefaultTextures); 2276 gl_.get(), false, false, false, "", kUseDefaultTextures);
2260 texture_manager1_->Initialize(); 2277 texture_manager1_->Initialize();
2261 TestHelper::SetupTextureManagerInitExpectations( 2278 TestHelper::SetupTextureManagerInitExpectations(
2262 gl_.get(), false, false, false, "", kUseDefaultTextures); 2279 gl_.get(), false, false, false, "", kUseDefaultTextures);
2263 texture_manager2_->Initialize(); 2280 texture_manager2_->Initialize();
2264 } 2281 }
2265 2282
2266 void TearDown() override { 2283 void TearDown() override {
2267 texture_manager2_->Destroy(false); 2284 ProgressReporterStub progress_reporter;
2285 texture_manager2_->Destroy(false, &progress_reporter);
2268 texture_manager2_.reset(); 2286 texture_manager2_.reset();
2269 texture_manager1_->Destroy(false); 2287 texture_manager1_->Destroy(false, &progress_reporter);
2270 texture_manager1_.reset(); 2288 texture_manager1_.reset();
2271 GpuServiceTest::TearDown(); 2289 GpuServiceTest::TearDown();
2272 } 2290 }
2273 2291
2274 protected: 2292 protected:
2275 void SetupFeatureInfo(const char* gl_extensions, 2293 void SetupFeatureInfo(const char* gl_extensions,
2276 const char* gl_version, 2294 const char* gl_version,
2277 bool enable_es3) { 2295 bool enable_es3) {
2278 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion( 2296 TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
2279 gl_.get(), gl_extensions, "", gl_version, 2297 gl_.get(), gl_extensions, "", gl_version,
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
2770 ExpectValid( 2788 ExpectValid(
2771 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8); 2789 true, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH24_STENCIL8);
2772 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 2790 ExpectValid(true, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
2773 GL_DEPTH32F_STENCIL8); 2791 GL_DEPTH32F_STENCIL8);
2774 2792
2775 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8); 2793 ExpectInvalid(true, GL_RGB_INTEGER, GL_INT, GL_RGBA8);
2776 } 2794 }
2777 2795
2778 } // namespace gles2 2796 } // namespace gles2
2779 } // namespace gpu 2797 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698