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

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

Issue 22824009: Remove StreamTextureManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index 906eb88f8f645e23d3aa8c49b7c533a2902a8aab..d22b811ad2c4c10e9e4e7f59937650a927d62196 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -19,10 +19,8 @@
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/program_manager.h"
-#include "gpu/command_buffer/service/stream_texture_manager_mock.h"
-#include "gpu/command_buffer/service/stream_texture_mock.h"
-#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_image_mock.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_mock.h"
#include "ui/gl/gl_surface_stub.h"
@@ -5631,123 +5629,152 @@ TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
EXPECT_NE(error::kNoError, ExecuteCmd(cmd4));
}
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUM) {
- const GLuint kObjectId = 123;
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+class GLES2StreamTextureTest : public GLES2DecoderManualInitTest {
+ public:
+ GLES2StreamTextureTest() { }
- EXPECT_CALL(*stream_texture_manager(), CreateStreamTexture(
- kServiceTextureId, client_texture_id_))
- .WillOnce(Return(kObjectId))
- .RetiresOnSaturation();
+ virtual void SetUp() {
+ InitDecoder(
+ "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
+ true, // has alpha
+ true, // has depth
+ false, // has stencil
+ true, // request alpha
+ true, // request depth
+ false, // request stencil
+ true); // bind generates resource
+ }
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kObjectId, *result);
+ protected:
+ void CreateAndBindTexImage(GLuint client_texture_id,
+ GLuint service_texture_id) {
+ TextureRef* texture_ref = GetTexture(client_texture_id);
+ DoBindTexture(
+ GL_TEXTURE_EXTERNAL_OES, client_texture_id, service_texture_id);
+ scoped_refptr<gfx::GLImage> image = new gfx::GLImageStub;
+ group().texture_manager()->SetLevelInfo(texture_ref,
+ GL_TEXTURE_EXTERNAL_OES,
+ 0,
+ GL_RGBA,
+ 0,
+ 0,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ group().texture_manager()->SetLevelImage(
+ texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image);
+ }
+
+ GLuint AddImage(Texture* texture) {
+ GLuint image_id = GetIdAllocator(id_namespaces::kImages)->AllocateID();
+ scoped_refptr<gfx::GLImage> image =
+ texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0);
+ EXPECT_TRUE(image != NULL);
+ group().image_manager()->AddImage(image, image_id);
+ return image_id;
+ }
+
+ GLuint DoCreateStreamTexture(GLuint client_texture_id) {
+ CreateStreamTextureCHROMIUM cmd;
+ CreateStreamTextureCHROMIUM::Result* result =
+ static_cast<CreateStreamTextureCHROMIUM::Result*>(
+ shared_memory_address_);
+ cmd.Init(client_texture_id, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ return *result;
+ }
+
+ scoped_refptr<gfx::GLImage> LookupImage(int32 image_id) {
+ return group().image_manager()->LookupImage(image_id);
+ }
+};
+
+TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUM) {
+ GLuint image_id = DoCreateStreamTexture(client_texture_id_);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
TextureRef* texture_ref = GetTexture(client_texture_id_);
EXPECT_TRUE(texture_ref != NULL);
- EXPECT_TRUE(texture_ref->texture()->IsStreamTexture());
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
+ EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES),
+ texture_ref->texture()->target());
+ EXPECT_NE(0U, image_id);
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMBadId) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+ scoped_refptr<gfx::GLImage> attached_image =
+ texture_ref->texture()->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0);
+ scoped_refptr<gfx::GLImage> image = LookupImage(image_id);
+ EXPECT_TRUE(image.get() != NULL);
+ EXPECT_EQ(image.get(), attached_image.get());
+}
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(kNewClientId, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
+TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUMBadTextureId) {
+ GLuint image_id = DoCreateStreamTexture(kNewClientId);
+ EXPECT_EQ(0U, image_id);
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadyBound) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+TEST_F(GLES2StreamTextureTest, CreateStreamTextureCHROMIUMAlreadyBound2D) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
+ // Cannot create stream from a texture that's already bound to an incompatible
+ // target (not bound to GL_TEXTURE_EXTERNAL_OES).
+ GLuint image_id = DoCreateStreamTexture(client_texture_id_);
+ EXPECT_EQ(0U, image_id);
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadySet) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+TEST_F(GLES2StreamTextureTest,
+ CreateStreamTextureCHROMIUMAlreadyBoundExternal) {
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
+ GLuint image_id = DoCreateStreamTexture(client_texture_id_);
+ EXPECT_NE(0U, image_id);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
- CreateStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
+TEST_F(GLES2StreamTextureTest, ReCreateStreamTextureCHROMIUM) {
+ CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
+ Texture* texture = GetTexture(client_texture_id_)->texture();
+ GLuint image_id = AddImage(texture);
-TEST_F(GLES2DecoderManualInitTest, DrawStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
+ scoped_refptr<gfx::GLImage> old_image(LookupImage(image_id));
+ EXPECT_TRUE(old_image.get() != NULL);
- StrictMock<MockStreamTexture> stream_texture;
+ DestroyStreamTextureCHROMIUM cmd;
+ cmd.Init(image_id);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
+ image_id = DoCreateStreamTexture(client_texture_id_);
+ EXPECT_NE(0U, image_id);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ scoped_refptr<gfx::GLImage> new_image(LookupImage(image_id));
+ EXPECT_TRUE(new_image != NULL);
+ EXPECT_EQ(new_image.get(),
+ texture->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0));
+ EXPECT_NE(old_image.get(), new_image.get());
+}
+TEST_F(GLES2StreamTextureTest, DrawStreamTextureCHROMIUM) {
+ scoped_refptr<gfx::GLImageMock> mock_image(new StrictMock<gfx::GLImageMock>);
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ group().texture_manager()->SetLevelInfo(texture_ref,
+ GL_TEXTURE_EXTERNAL_OES,
+ 0,
+ GL_RGBA,
+ 0,
+ 0,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ group().texture_manager()->SetLevelImage(
+ texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, mock_image);
SetupSamplerExternalProgram();
SetupIndexBuffer();
@@ -5756,10 +5783,7 @@ TEST_F(GLES2DecoderManualInitTest, DrawStreamTextureCHROMIUM) {
EXPECT_TRUE(group().texture_manager()->CanRender(texture_ref));
InSequence s;
- EXPECT_CALL(*stream_texture_manager(), LookupStreamTexture(kServiceTextureId))
- .WillOnce(Return(&stream_texture))
- .RetiresOnSaturation();
- EXPECT_CALL(stream_texture, Update())
+ EXPECT_CALL(*mock_image, WillUseTexImage())
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
@@ -5769,235 +5793,30 @@ TEST_F(GLES2DecoderManualInitTest, DrawStreamTextureCHROMIUM) {
kValidIndexRangeStart * 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
}
-TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUMInvalid) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- BindTexture cmd;
- cmd.Init(GL_TEXTURE_2D, client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- BindTexture cmd2;
- cmd2.Init(GL_TEXTURE_CUBE_MAP, client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
+TEST_F(GLES2StreamTextureTest, DestroyStreamTextureCHROMIUM) {
+ CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
+ Texture* texture = GetTexture(client_texture_id_)->texture();
+ const GLuint image_id = AddImage(texture);
DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_);
+ cmd.Init(image_id);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
- EXPECT_EQ(0U, texture_ref->texture()->target());
+ EXPECT_TRUE(LookupImage(image_id) == NULL);
}
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMInvalid) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+TEST_F(GLES2StreamTextureTest, DestroyStreamTextureCHROMIUMUntracked) {
+ CreateAndBindTexImage(client_texture_id_, kServiceTextureId);
+ // This should fail because the image is not tracked by the manager.
DestroyStreamTextureCHROMIUM cmd;
cmd.Init(client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMBadId) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(GL_ZERO);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, StreamTextureCHROMIUMNullMgr) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- CreateStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
- GetGLError(); // ignore internal error
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DestroyStreamTextureCHROMIUM cmd2;
- cmd2.Init(client_texture_id_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd2));
- GetGLError(); // ignore internal error
-}
-
-TEST_F(GLES2DecoderManualInitTest, ReCreateStreamTextureCHROMIUM) {
- const GLuint kObjectId = 123;
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*stream_texture_manager(),
- CreateStreamTexture(kServiceTextureId, client_texture_id_))
- .WillOnce(Return(kObjectId))
- .RetiresOnSaturation();
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
-
- CreateStreamTextureCHROMIUM cmd2;
- cmd2.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(texture_ref->texture()->IsStreamTexture());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, ProduceAndConsumeStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM];
- group().mailbox_manager()->GenerateMailboxName(
- reinterpret_cast<MailboxName*>(mailbox));
-
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
-
- EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
-
- ProduceTextureCHROMIUM produce_cmd;
- produce_cmd.Init(
- GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Create new texture for consume.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId))
- .RetiresOnSaturation();
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, kNewClientId, kNewServiceId);
-
- // Assigns and binds original service size texture ID.
- EXPECT_CALL(*gl_, DeleteTextures(1, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-
- // Shared mem got clobbered from GetError() above.
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
- ConsumeTextureCHROMIUM consume_cmd;
- consume_cmd.Init(
- GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Service ID is restored.
- EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
InitDecoder(
"GL_ARB_texture_rectangle", // extensions
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_mock.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698