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 |