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

Unified Diff: gpu/command_buffer/service/program_manager_unittest.cc

Issue 5676003: Make shader and program object lifetimes match OpenGL ES spec.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/service/shader_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/service/shader_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698