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

Unified Diff: gpu/command_buffer/service/shader_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/shader_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/shader_manager_unittest.cc
===================================================================
--- gpu/command_buffer/service/shader_manager_unittest.cc (revision 68425)
+++ gpu/command_buffer/service/shader_manager_unittest.cc (working copy)
@@ -44,31 +44,16 @@
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kShader1Type = GL_VERTEX_SHADER;
- const std::string kClient1Source("hello world");
const GLuint kClient2Id = 2;
// Check we can create shader.
manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
// Check shader got created.
ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
ASSERT_TRUE(info1 != NULL);
- EXPECT_EQ(kService1Id, info1->service_id());
- // Check if the shader has correct type.
- EXPECT_EQ(kShader1Type, info1->shader_type());
- EXPECT_FALSE(info1->IsValid());
- EXPECT_STREQ("", info1->log_info().c_str());
- const char* kLog = "foo";
- info1->SetStatus(true, kLog, NULL);
- EXPECT_TRUE(info1->IsValid());
- EXPECT_STREQ(kLog, info1->log_info().c_str());
- // Check we can set its source.
- info1->Update(kClient1Source);
- EXPECT_STREQ(kClient1Source.c_str(), info1->source().c_str());
// Check we get nothing for a non-existent shader.
EXPECT_TRUE(manager_.GetShaderInfo(kClient2Id) == NULL);
- // Check trying to a remove non-existent shaders does not crash.
- manager_.RemoveShaderInfo(kClient2Id);
// Check we can't get the shader after we remove it.
- manager_.RemoveShaderInfo(kClient1Id);
+ manager_.MarkAsDeleted(info1);
EXPECT_TRUE(manager_.GetShaderInfo(kClient1Id) == NULL);
}
@@ -90,6 +75,31 @@
ASSERT_TRUE(info1 == NULL);
}
+TEST_F(ShaderManagerTest, ShaderInfo) {
+ const GLuint kClient1Id = 1;
+ const GLuint kService1Id = 11;
+ const GLenum kShader1Type = GL_VERTEX_SHADER;
+ const std::string kClient1Source("hello world");
+ // Check we can create shader.
+ manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
+ // Check shader got created.
+ ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
+ ASSERT_TRUE(info1 != NULL);
+ EXPECT_EQ(kService1Id, info1->service_id());
+ // Check if the shader has correct type.
+ EXPECT_EQ(kShader1Type, info1->shader_type());
+ EXPECT_FALSE(info1->IsValid());
+ EXPECT_FALSE(info1->InUse());
+ EXPECT_STREQ("", info1->log_info().c_str());
+ const char* kLog = "foo";
+ info1->SetStatus(true, kLog, NULL);
+ EXPECT_TRUE(info1->IsValid());
+ EXPECT_STREQ(kLog, info1->log_info().c_str());
+ // Check we can set its source.
+ info1->Update(kClient1Source);
+ EXPECT_STREQ(kClient1Source.c_str(), info1->source().c_str());
+}
+
TEST_F(ShaderManagerTest, GetInfo) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
@@ -160,6 +170,50 @@
}
}
+TEST_F(ShaderManagerTest, ShaderInfoUseCount) {
+ const GLuint kClient1Id = 1;
+ const GLuint kService1Id = 11;
+ const GLenum kShader1Type = GL_VERTEX_SHADER;
+ // Check we can create shader.
+ manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
+ // Check shader got created.
+ ShaderManager::ShaderInfo* info1 = manager_.GetShaderInfo(kClient1Id);
+ ASSERT_TRUE(info1 != NULL);
+ EXPECT_FALSE(info1->InUse());
+ EXPECT_FALSE(info1->IsDeleted());
+ manager_.UseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.UseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.MarkAsDeleted(info1);
+ EXPECT_TRUE(info1->IsDeleted());
+ ShaderManager::ShaderInfo* info2 = manager_.GetShaderInfo(kClient1Id);
+ EXPECT_EQ(info1, info2);
+ manager_.UnuseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.UnuseShader(info1); // this should delete the info.
+ info2 = manager_.GetShaderInfo(kClient1Id);
+ EXPECT_TRUE(info2 == NULL);
+
+ manager_.CreateShaderInfo(kClient1Id, kService1Id, kShader1Type);
+ info1 = manager_.GetShaderInfo(kClient1Id);
+ ASSERT_TRUE(info1 != NULL);
+ EXPECT_FALSE(info1->InUse());
+ manager_.UseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.UseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.UnuseShader(info1);
+ EXPECT_TRUE(info1->InUse());
+ manager_.UnuseShader(info1);
+ EXPECT_FALSE(info1->InUse());
+ info2 = manager_.GetShaderInfo(kClient1Id);
+ EXPECT_EQ(info1, info2);
+ manager_.MarkAsDeleted(info1); // this should delete the shader.
+ info2 = manager_.GetShaderInfo(kClient1Id);
+ EXPECT_TRUE(info2 == NULL);
+}
+
} // namespace gles2
} // namespace gpu
« no previous file with comments | « gpu/command_buffer/service/shader_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698