1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "gpu/command_buffer/service/context_group.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
9 #include "gpu/command_buffer/service/test_helper.h"
10 #include "gpu/command_buffer/service/texture_manager.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/gl/gl_mock.h"
14 using ::gfx::MockGLInterface;
16 using ::testing::DoAll;
17 using ::testing::HasSubstr;
18 using ::testing::InSequence;
19 using ::testing::MatcherCast;
21 using ::testing::Pointee;
22 using ::testing::Return;
23 using ::testing::SetArrayArgument;
24 using ::testing::SetArgumentPointee;
25 using ::testing::StrEq;
26 using ::testing::StrictMock;
31 class ContextGroupTest : public testing::Test {
37 virtual void SetUp() {
38 gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
39 ::gfx::GLInterface::SetGLInterface(gl_.get());
40 decoder_.reset(new MockGLES2Decoder());
41 group_ = scoped_refptr<ContextGroup>(
42 new ContextGroup(NULL, NULL, NULL, NULL, true));
45 virtual void TearDown() {
46 ::gfx::GLInterface::SetGLInterface(NULL);
50 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
51 scoped_ptr<MockGLES2Decoder> decoder_;
52 scoped_refptr<ContextGroup> group_;
55 TEST_F(ContextGroupTest, Basic) {
56 // Test it starts off uninitialized.
57 EXPECT_EQ(0u, group_->max_vertex_attribs());
58 EXPECT_EQ(0u, group_->max_texture_units());
59 EXPECT_EQ(0u, group_->max_texture_image_units());
60 EXPECT_EQ(0u, group_->max_vertex_texture_image_units());
61 EXPECT_EQ(0u, group_->max_fragment_uniform_vectors());
62 EXPECT_EQ(0u, group_->max_varying_vectors());
63 EXPECT_EQ(0u, group_->max_vertex_uniform_vectors());
64 EXPECT_TRUE(group_->buffer_manager() == NULL);
65 EXPECT_TRUE(group_->framebuffer_manager() == NULL);
66 EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
67 EXPECT_TRUE(group_->texture_manager() == NULL);
68 EXPECT_TRUE(group_->program_manager() == NULL);
69 EXPECT_TRUE(group_->shader_manager() == NULL);
72 TEST_F(ContextGroupTest, InitializeNoExtensions) {
73 TestHelper::SetupContextGroupInitExpectations(gl_.get(),
74 DisallowedFeatures(), "");
75 group_->Initialize(decoder_.get(), DisallowedFeatures());
76 EXPECT_EQ(static_cast<uint32>(TestHelper::kNumVertexAttribs),
77 group_->max_vertex_attribs());
78 EXPECT_EQ(static_cast<uint32>(TestHelper::kNumTextureUnits),
79 group_->max_texture_units());
80 EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxTextureImageUnits),
81 group_->max_texture_image_units());
82 EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVertexTextureImageUnits),
83 group_->max_vertex_texture_image_units());
84 EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxFragmentUniformVectors),
85 group_->max_fragment_uniform_vectors());
86 EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVaryingVectors),
87 group_->max_varying_vectors());
88 EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVertexUniformVectors),
89 group_->max_vertex_uniform_vectors());
90 EXPECT_TRUE(group_->buffer_manager() != NULL);
91 EXPECT_TRUE(group_->framebuffer_manager() != NULL);
92 EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
93 EXPECT_TRUE(group_->texture_manager() != NULL);
94 EXPECT_TRUE(group_->program_manager() != NULL);
95 EXPECT_TRUE(group_->shader_manager() != NULL);
97 group_->Destroy(decoder_.get(), false);
98 EXPECT_TRUE(group_->buffer_manager() == NULL);
99 EXPECT_TRUE(group_->framebuffer_manager() == NULL);
100 EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
101 EXPECT_TRUE(group_->texture_manager() == NULL);
102 EXPECT_TRUE(group_->program_manager() == NULL);
103 EXPECT_TRUE(group_->shader_manager() == NULL);
106 TEST_F(ContextGroupTest, MultipleContexts) {
107 scoped_ptr<MockGLES2Decoder> decoder2_(new MockGLES2Decoder());
108 TestHelper::SetupContextGroupInitExpectations(gl_.get(),
109 DisallowedFeatures(), "");
110 group_->Initialize(decoder_.get(), DisallowedFeatures());
111 group_->Initialize(decoder2_.get(), DisallowedFeatures());
113 EXPECT_TRUE(group_->buffer_manager() != NULL);
114 EXPECT_TRUE(group_->framebuffer_manager() != NULL);
115 EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
116 EXPECT_TRUE(group_->texture_manager() != NULL);
117 EXPECT_TRUE(group_->program_manager() != NULL);
118 EXPECT_TRUE(group_->shader_manager() != NULL);
120 group_->Destroy(decoder_.get(), false);
122 EXPECT_TRUE(group_->buffer_manager() != NULL);
123 EXPECT_TRUE(group_->framebuffer_manager() != NULL);
124 EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
125 EXPECT_TRUE(group_->texture_manager() != NULL);
126 EXPECT_TRUE(group_->program_manager() != NULL);
127 EXPECT_TRUE(group_->shader_manager() != NULL);
129 group_->Destroy(decoder2_.get(), false);
131 EXPECT_TRUE(group_->buffer_manager() == NULL);
132 EXPECT_TRUE(group_->framebuffer_manager() == NULL);
133 EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
134 EXPECT_TRUE(group_->texture_manager() == NULL);
135 EXPECT_TRUE(group_->program_manager() == NULL);
136 EXPECT_TRUE(group_->shader_manager() == NULL);