| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gpu/command_buffer/service/context_group.h" |
| |
| #include <stdint.h> |
| |
| #include <memory> |
| |
| #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" |
| #include "gpu/command_buffer/service/gpu_service_test.h" |
| #include "gpu/command_buffer/service/mailbox_manager.h" |
| #include "gpu/command_buffer/service/test_helper.h" |
| #include "gpu/command_buffer/service/texture_manager.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gl/gl_mock.h" |
| |
| using ::testing::_; |
| using ::testing::DoAll; |
| using ::testing::HasSubstr; |
| using ::testing::InSequence; |
| using ::testing::MatcherCast; |
| using ::testing::Not; |
| using ::testing::Pointee; |
| using ::testing::Return; |
| using ::testing::SetArrayArgument; |
| using ::testing::SetArgumentPointee; |
| using ::testing::StrEq; |
| |
| namespace gpu { |
| namespace gles2 { |
| |
| class ContextGroupTest : public GpuServiceTest { |
| public: |
| static const bool kBindGeneratesResource = false; |
| |
| ContextGroupTest() {} |
| |
| protected: |
| void SetUp() override { |
| GpuServiceTest::SetUp(); |
| decoder_.reset(new MockGLES2Decoder()); |
| scoped_refptr<FeatureInfo> feature_info = new FeatureInfo; |
| group_ = scoped_refptr<ContextGroup>(new ContextGroup( |
| gpu_preferences_, NULL, NULL, NULL, NULL, feature_info, |
| kBindGeneratesResource, nullptr, nullptr, GpuFeatureInfo())); |
| } |
| |
| GpuPreferences gpu_preferences_; |
| std::unique_ptr<MockGLES2Decoder> decoder_; |
| scoped_refptr<ContextGroup> group_; |
| }; |
| |
| TEST_F(ContextGroupTest, Basic) { |
| // Test it starts off uninitialized. |
| EXPECT_EQ(0u, group_->max_vertex_attribs()); |
| EXPECT_EQ(0u, group_->max_texture_units()); |
| EXPECT_EQ(0u, group_->max_texture_image_units()); |
| EXPECT_EQ(0u, group_->max_vertex_texture_image_units()); |
| EXPECT_EQ(0u, group_->max_fragment_uniform_vectors()); |
| EXPECT_EQ(0u, group_->max_varying_vectors()); |
| EXPECT_EQ(0u, group_->max_vertex_uniform_vectors()); |
| EXPECT_TRUE(group_->buffer_manager() == NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() == NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() == NULL); |
| EXPECT_TRUE(group_->texture_manager() == NULL); |
| EXPECT_TRUE(group_->program_manager() == NULL); |
| EXPECT_TRUE(group_->shader_manager() == NULL); |
| } |
| |
| TEST_F(ContextGroupTest, InitializeNoExtensions) { |
| TestHelper::SetupContextGroupInitExpectations( |
| gl_.get(), DisallowedFeatures(), "", "", |
| CONTEXT_TYPE_OPENGLES2, kBindGeneratesResource); |
| group_->Initialize(decoder_.get(), CONTEXT_TYPE_OPENGLES2, |
| DisallowedFeatures()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kNumVertexAttribs), |
| group_->max_vertex_attribs()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kNumTextureUnits), |
| group_->max_texture_units()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kMaxTextureImageUnits), |
| group_->max_texture_image_units()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kMaxVertexTextureImageUnits), |
| group_->max_vertex_texture_image_units()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kMaxFragmentUniformVectors), |
| group_->max_fragment_uniform_vectors()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kMaxVaryingVectors), |
| group_->max_varying_vectors()); |
| EXPECT_EQ(static_cast<uint32_t>(TestHelper::kMaxVertexUniformVectors), |
| group_->max_vertex_uniform_vectors()); |
| EXPECT_TRUE(group_->buffer_manager() != NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() != NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() != NULL); |
| EXPECT_TRUE(group_->texture_manager() != NULL); |
| EXPECT_TRUE(group_->program_manager() != NULL); |
| EXPECT_TRUE(group_->shader_manager() != NULL); |
| |
| group_->Destroy(decoder_.get(), false); |
| EXPECT_TRUE(group_->buffer_manager() == NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() == NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() == NULL); |
| EXPECT_TRUE(group_->texture_manager() == NULL); |
| EXPECT_TRUE(group_->program_manager() == NULL); |
| EXPECT_TRUE(group_->shader_manager() == NULL); |
| } |
| |
| TEST_F(ContextGroupTest, MultipleContexts) { |
| std::unique_ptr<MockGLES2Decoder> decoder2_(new MockGLES2Decoder()); |
| TestHelper::SetupContextGroupInitExpectations( |
| gl_.get(), DisallowedFeatures(), "", "", |
| CONTEXT_TYPE_OPENGLES2, kBindGeneratesResource); |
| EXPECT_TRUE(group_->Initialize(decoder_.get(), CONTEXT_TYPE_OPENGLES2, |
| DisallowedFeatures())); |
| EXPECT_FALSE(group_->Initialize(decoder2_.get(), CONTEXT_TYPE_WEBGL1, |
| DisallowedFeatures())); |
| EXPECT_FALSE(group_->Initialize(decoder2_.get(), CONTEXT_TYPE_WEBGL2, |
| DisallowedFeatures())); |
| EXPECT_FALSE(group_->Initialize(decoder2_.get(), CONTEXT_TYPE_OPENGLES3, |
| DisallowedFeatures())); |
| EXPECT_TRUE(group_->Initialize(decoder2_.get(), CONTEXT_TYPE_OPENGLES2, |
| DisallowedFeatures())); |
| |
| EXPECT_TRUE(group_->buffer_manager() != NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() != NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() != NULL); |
| EXPECT_TRUE(group_->texture_manager() != NULL); |
| EXPECT_TRUE(group_->program_manager() != NULL); |
| EXPECT_TRUE(group_->shader_manager() != NULL); |
| |
| group_->Destroy(decoder_.get(), false); |
| |
| EXPECT_TRUE(group_->buffer_manager() != NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() != NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() != NULL); |
| EXPECT_TRUE(group_->texture_manager() != NULL); |
| EXPECT_TRUE(group_->program_manager() != NULL); |
| EXPECT_TRUE(group_->shader_manager() != NULL); |
| |
| group_->Destroy(decoder2_.get(), false); |
| |
| EXPECT_TRUE(group_->buffer_manager() == NULL); |
| EXPECT_TRUE(group_->framebuffer_manager() == NULL); |
| EXPECT_TRUE(group_->renderbuffer_manager() == NULL); |
| EXPECT_TRUE(group_->texture_manager() == NULL); |
| EXPECT_TRUE(group_->program_manager() == NULL); |
| EXPECT_TRUE(group_->shader_manager() == NULL); |
| } |
| |
| } // namespace gles2 |
| } // namespace gpu |
| |
| |