Home | History | Annotate | Download | only in service
      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.
      4 
      5 #include "gpu/command_buffer/service/context_group.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
      9 #include "gpu/command_buffer/service/gpu_service_test.h"
     10 #include "gpu/command_buffer/service/test_helper.h"
     11 #include "gpu/command_buffer/service/texture_manager.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 #include "ui/gl/gl_mock.h"
     14 
     15 using ::testing::_;
     16 using ::testing::DoAll;
     17 using ::testing::HasSubstr;
     18 using ::testing::InSequence;
     19 using ::testing::MatcherCast;
     20 using ::testing::Not;
     21 using ::testing::Pointee;
     22 using ::testing::Return;
     23 using ::testing::SetArrayArgument;
     24 using ::testing::SetArgumentPointee;
     25 using ::testing::StrEq;
     26 
     27 namespace gpu {
     28 namespace gles2 {
     29 
     30 class ContextGroupTest : public GpuServiceTest {
     31  public:
     32   static const bool kBindGeneratesResource = false;
     33 
     34   ContextGroupTest() {}
     35 
     36  protected:
     37   virtual void SetUp() {
     38     GpuServiceTest::SetUp();
     39     decoder_.reset(new MockGLES2Decoder());
     40     group_ = scoped_refptr<ContextGroup>(
     41         new ContextGroup(NULL, NULL, NULL, NULL, NULL, kBindGeneratesResource));
     42   }
     43 
     44   scoped_ptr<MockGLES2Decoder> decoder_;
     45   scoped_refptr<ContextGroup> group_;
     46 };
     47 
     48 TEST_F(ContextGroupTest, Basic) {
     49   // Test it starts off uninitialized.
     50   EXPECT_EQ(0u, group_->max_vertex_attribs());
     51   EXPECT_EQ(0u, group_->max_texture_units());
     52   EXPECT_EQ(0u, group_->max_texture_image_units());
     53   EXPECT_EQ(0u, group_->max_vertex_texture_image_units());
     54   EXPECT_EQ(0u, group_->max_fragment_uniform_vectors());
     55   EXPECT_EQ(0u, group_->max_varying_vectors());
     56   EXPECT_EQ(0u, group_->max_vertex_uniform_vectors());
     57   EXPECT_TRUE(group_->buffer_manager() == NULL);
     58   EXPECT_TRUE(group_->framebuffer_manager() == NULL);
     59   EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
     60   EXPECT_TRUE(group_->texture_manager() == NULL);
     61   EXPECT_TRUE(group_->program_manager() == NULL);
     62   EXPECT_TRUE(group_->shader_manager() == NULL);
     63 }
     64 
     65 TEST_F(ContextGroupTest, InitializeNoExtensions) {
     66   TestHelper::SetupContextGroupInitExpectations(
     67       gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
     68   group_->Initialize(decoder_.get(), DisallowedFeatures());
     69   EXPECT_EQ(static_cast<uint32>(TestHelper::kNumVertexAttribs),
     70             group_->max_vertex_attribs());
     71   EXPECT_EQ(static_cast<uint32>(TestHelper::kNumTextureUnits),
     72             group_->max_texture_units());
     73   EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxTextureImageUnits),
     74             group_->max_texture_image_units());
     75   EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVertexTextureImageUnits),
     76              group_->max_vertex_texture_image_units());
     77   EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxFragmentUniformVectors),
     78             group_->max_fragment_uniform_vectors());
     79   EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVaryingVectors),
     80             group_->max_varying_vectors());
     81   EXPECT_EQ(static_cast<uint32>(TestHelper::kMaxVertexUniformVectors),
     82             group_->max_vertex_uniform_vectors());
     83   EXPECT_TRUE(group_->buffer_manager() != NULL);
     84   EXPECT_TRUE(group_->framebuffer_manager() != NULL);
     85   EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
     86   EXPECT_TRUE(group_->texture_manager() != NULL);
     87   EXPECT_TRUE(group_->program_manager() != NULL);
     88   EXPECT_TRUE(group_->shader_manager() != NULL);
     89 
     90   group_->Destroy(decoder_.get(), false);
     91   EXPECT_TRUE(group_->buffer_manager() == NULL);
     92   EXPECT_TRUE(group_->framebuffer_manager() == NULL);
     93   EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
     94   EXPECT_TRUE(group_->texture_manager() == NULL);
     95   EXPECT_TRUE(group_->program_manager() == NULL);
     96   EXPECT_TRUE(group_->shader_manager() == NULL);
     97 }
     98 
     99 TEST_F(ContextGroupTest, MultipleContexts) {
    100   scoped_ptr<MockGLES2Decoder> decoder2_(new MockGLES2Decoder());
    101   TestHelper::SetupContextGroupInitExpectations(
    102       gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
    103   group_->Initialize(decoder_.get(), DisallowedFeatures());
    104   group_->Initialize(decoder2_.get(), DisallowedFeatures());
    105 
    106   EXPECT_TRUE(group_->buffer_manager() != NULL);
    107   EXPECT_TRUE(group_->framebuffer_manager() != NULL);
    108   EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
    109   EXPECT_TRUE(group_->texture_manager() != NULL);
    110   EXPECT_TRUE(group_->program_manager() != NULL);
    111   EXPECT_TRUE(group_->shader_manager() != NULL);
    112 
    113   group_->Destroy(decoder_.get(), false);
    114 
    115   EXPECT_TRUE(group_->buffer_manager() != NULL);
    116   EXPECT_TRUE(group_->framebuffer_manager() != NULL);
    117   EXPECT_TRUE(group_->renderbuffer_manager() != NULL);
    118   EXPECT_TRUE(group_->texture_manager() != NULL);
    119   EXPECT_TRUE(group_->program_manager() != NULL);
    120   EXPECT_TRUE(group_->shader_manager() != NULL);
    121 
    122   group_->Destroy(decoder2_.get(), false);
    123 
    124   EXPECT_TRUE(group_->buffer_manager() == NULL);
    125   EXPECT_TRUE(group_->framebuffer_manager() == NULL);
    126   EXPECT_TRUE(group_->renderbuffer_manager() == NULL);
    127   EXPECT_TRUE(group_->texture_manager() == NULL);
    128   EXPECT_TRUE(group_->program_manager() == NULL);
    129   EXPECT_TRUE(group_->shader_manager() == NULL);
    130 }
    131 
    132 }  // namespace gles2
    133 }  // namespace gpu
    134 
    135 
    136