| Index: gpu/command_buffer/service/program_manager_unittest.cc
|
| ===================================================================
|
| --- gpu/command_buffer/service/program_manager_unittest.cc (revision 68425)
|
| +++ gpu/command_buffer/service/program_manager_unittest.cc (working copy)
|
| @@ -61,19 +61,11 @@
|
| // Check program got created.
|
| ProgramManager::ProgramInfo* info1 = manager_.GetProgramInfo(kClient1Id);
|
| ASSERT_TRUE(info1 != NULL);
|
| - EXPECT_EQ(kService1Id, info1->service_id());
|
| - EXPECT_FALSE(info1->CanLink());
|
| - EXPECT_STREQ("", info1->log_info().c_str());
|
| GLuint client_id = 0;
|
| EXPECT_TRUE(manager_.GetClientId(info1->service_id(), &client_id));
|
| EXPECT_EQ(kClient1Id, client_id);
|
| // Check we get nothing for a non-existent program.
|
| EXPECT_TRUE(manager_.GetProgramInfo(kClient2Id) == NULL);
|
| - // Check trying to a remove non-existent programs does not crash.
|
| - manager_.RemoveProgramInfo(kClient2Id);
|
| - // Check we can't get the program after we remove it.
|
| - manager_.RemoveProgramInfo(kClient1Id);
|
| - EXPECT_TRUE(manager_.GetProgramInfo(kClient1Id) == NULL);
|
| }
|
|
|
| TEST_F(ProgramManagerTest, Destroy) {
|
| @@ -94,6 +86,22 @@
|
| ASSERT_TRUE(info1 == NULL);
|
| }
|
|
|
| +TEST_F(ProgramManagerTest, ProgramInfo) {
|
| + const GLuint kClient1Id = 1;
|
| + const GLuint kService1Id = 11;
|
| + // Check we can create program.
|
| + manager_.CreateProgramInfo(kClient1Id, kService1Id);
|
| + // Check program got created.
|
| + ProgramManager::ProgramInfo* info1 = manager_.GetProgramInfo(kClient1Id);
|
| + ASSERT_TRUE(info1 != NULL);
|
| + EXPECT_EQ(kService1Id, info1->service_id());
|
| + EXPECT_FALSE(info1->InUse());
|
| + EXPECT_FALSE(info1->IsValid());
|
| + EXPECT_FALSE(info1->IsDeleted());
|
| + EXPECT_FALSE(info1->CanLink());
|
| + EXPECT_STREQ("", info1->log_info().c_str());
|
| +}
|
| +
|
| class ProgramManagerWithShaderTest : public testing::Test {
|
| public:
|
| ProgramManagerWithShaderTest()
|
| @@ -431,19 +439,19 @@
|
| ShaderManager::ShaderInfo* fshader = shader_manager.GetShaderInfo(
|
| kFShaderClientId);
|
| fshader->SetStatus(true, "", NULL);
|
| - EXPECT_TRUE(program_info->AttachShader(vshader));
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, vshader));
|
| EXPECT_FALSE(program_info->CanLink());
|
| - EXPECT_TRUE(program_info->AttachShader(fshader));
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, fshader));
|
| EXPECT_TRUE(program_info->CanLink());
|
| - program_info->DetachShader(vshader);
|
| + program_info->DetachShader(&shader_manager, vshader);
|
| EXPECT_FALSE(program_info->CanLink());
|
| - EXPECT_TRUE(program_info->AttachShader(vshader));
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, vshader));
|
| EXPECT_TRUE(program_info->CanLink());
|
| - program_info->DetachShader(fshader);
|
| + program_info->DetachShader(&shader_manager, fshader);
|
| EXPECT_FALSE(program_info->CanLink());
|
| - EXPECT_FALSE(program_info->AttachShader(vshader));
|
| + EXPECT_FALSE(program_info->AttachShader(&shader_manager, vshader));
|
| EXPECT_FALSE(program_info->CanLink());
|
| - EXPECT_TRUE(program_info->AttachShader(fshader));
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, fshader));
|
| EXPECT_TRUE(program_info->CanLink());
|
| vshader->SetStatus(false, "", NULL);
|
| EXPECT_FALSE(program_info->CanLink());
|
| @@ -585,7 +593,7 @@
|
| ProgramManager::ProgramInfo* program_info =
|
| manager_.GetProgramInfo(kClientProgramId);
|
| ASSERT_TRUE(program_info != NULL);
|
| - EXPECT_TRUE(program_info->AttachShader(shader_info));
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, shader_info));
|
| program_info->Update();
|
| // Check that we got the good type, not the bad.
|
| // Check Attribs
|
| @@ -615,6 +623,108 @@
|
| shader_manager.Destroy(false);
|
| }
|
|
|
| +TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount) {
|
| + ShaderManager shader_manager;
|
| + ProgramManager::ProgramInfo* program_info =
|
| + manager_.GetProgramInfo(kClientProgramId);
|
| + ASSERT_TRUE(program_info != NULL);
|
| + EXPECT_FALSE(program_info->CanLink());
|
| + const GLuint kVShaderClientId = 2001;
|
| + const GLuint kFShaderClientId = 2002;
|
| + const GLuint kVShaderServiceId = 3001;
|
| + const GLuint kFShaderServiceId = 3002;
|
| + shader_manager.CreateShaderInfo(
|
| + kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
|
| + ShaderManager::ShaderInfo* vshader = shader_manager.GetShaderInfo(
|
| + kVShaderClientId);
|
| + ASSERT_TRUE(vshader != NULL);
|
| + vshader->SetStatus(true, "", NULL);
|
| + shader_manager.CreateShaderInfo(
|
| + kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
|
| + ShaderManager::ShaderInfo* fshader = shader_manager.GetShaderInfo(
|
| + kFShaderClientId);
|
| + ASSERT_TRUE(fshader != NULL);
|
| + fshader->SetStatus(true, "", NULL);
|
| + EXPECT_FALSE(vshader->InUse());
|
| + EXPECT_FALSE(fshader->InUse());
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, vshader));
|
| + EXPECT_TRUE(vshader->InUse());
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, fshader));
|
| + EXPECT_TRUE(fshader->InUse());
|
| + EXPECT_TRUE(program_info->CanLink());
|
| + EXPECT_FALSE(program_info->InUse());
|
| + EXPECT_FALSE(program_info->IsDeleted());
|
| + manager_.UseProgram(program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + manager_.UseProgram(program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + manager_.MarkAsDeleted(&shader_manager, program_info);
|
| + EXPECT_TRUE(program_info->IsDeleted());
|
| + ProgramManager::ProgramInfo* info2 =
|
| + manager_.GetProgramInfo(kClientProgramId);
|
| + EXPECT_EQ(program_info, info2);
|
| + manager_.UnuseProgram(&shader_manager, program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + // this should delete the info.
|
| + manager_.UnuseProgram(&shader_manager, program_info);
|
| + info2 = manager_.GetProgramInfo(kClientProgramId);
|
| + EXPECT_TRUE(info2 == NULL);
|
| + EXPECT_FALSE(vshader->InUse());
|
| + EXPECT_FALSE(fshader->InUse());
|
| + shader_manager.Destroy(false);
|
| +}
|
| +
|
| +TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount2) {
|
| + ShaderManager shader_manager;
|
| + ProgramManager::ProgramInfo* program_info =
|
| + manager_.GetProgramInfo(kClientProgramId);
|
| + ASSERT_TRUE(program_info != NULL);
|
| + EXPECT_FALSE(program_info->CanLink());
|
| + const GLuint kVShaderClientId = 2001;
|
| + const GLuint kFShaderClientId = 2002;
|
| + const GLuint kVShaderServiceId = 3001;
|
| + const GLuint kFShaderServiceId = 3002;
|
| + shader_manager.CreateShaderInfo(
|
| + kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
|
| + ShaderManager::ShaderInfo* vshader = shader_manager.GetShaderInfo(
|
| + kVShaderClientId);
|
| + ASSERT_TRUE(vshader != NULL);
|
| + vshader->SetStatus(true, "", NULL);
|
| + shader_manager.CreateShaderInfo(
|
| + kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
|
| + ShaderManager::ShaderInfo* fshader = shader_manager.GetShaderInfo(
|
| + kFShaderClientId);
|
| + ASSERT_TRUE(fshader != NULL);
|
| + fshader->SetStatus(true, "", NULL);
|
| + EXPECT_FALSE(vshader->InUse());
|
| + EXPECT_FALSE(fshader->InUse());
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, vshader));
|
| + EXPECT_TRUE(vshader->InUse());
|
| + EXPECT_TRUE(program_info->AttachShader(&shader_manager, fshader));
|
| + EXPECT_TRUE(fshader->InUse());
|
| + EXPECT_TRUE(program_info->CanLink());
|
| + EXPECT_FALSE(program_info->InUse());
|
| + EXPECT_FALSE(program_info->IsDeleted());
|
| + manager_.UseProgram(program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + manager_.UseProgram(program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + manager_.UnuseProgram(&shader_manager, program_info);
|
| + EXPECT_TRUE(program_info->InUse());
|
| + manager_.UnuseProgram(&shader_manager, program_info);
|
| + EXPECT_FALSE(program_info->InUse());
|
| + ProgramManager::ProgramInfo* info2 =
|
| + manager_.GetProgramInfo(kClientProgramId);
|
| + EXPECT_EQ(program_info, info2);
|
| + // this should delete the program.
|
| + manager_.MarkAsDeleted(&shader_manager, program_info);
|
| + info2 = manager_.GetProgramInfo(kClientProgramId);
|
| + EXPECT_TRUE(info2 == NULL);
|
| + EXPECT_FALSE(vshader->InUse());
|
| + EXPECT_FALSE(fshader->InUse());
|
| + shader_manager.Destroy(false);
|
| +}
|
| +
|
| } // namespace gles2
|
| } // namespace gpu
|
|
|
|
|