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/vertex_array_manager.h"
6 #include "gpu/command_buffer/service/vertex_attrib_manager.h"
7
8 #include "base/memory/scoped_ptr.h"
9 #include "gpu/command_buffer/service/feature_info.h"
10 #include "gpu/command_buffer/service/gpu_service_test.h"
11 #include "gpu/command_buffer/service/test_helper.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "ui/gl/gl_mock.h"
14
15 using ::testing::Pointee;
16 using ::testing::_;
17
18 namespace gpu {
19 namespace gles2 {
20
21 class VertexArrayManagerTest : public GpuServiceTest {
22 public:
23 static const uint32 kNumVertexAttribs = 8;
24
VertexArrayManagerTest()25 VertexArrayManagerTest() {
26 }
27
~VertexArrayManagerTest()28 virtual ~VertexArrayManagerTest() {
29 }
30
31 protected:
SetUp()32 virtual void SetUp() {
33 GpuServiceTest::SetUp();
34 manager_.reset(new VertexArrayManager());
35 }
36
TearDown()37 virtual void TearDown() {
38 manager_.reset();
39 GpuServiceTest::TearDown();
40 }
41
42 scoped_ptr<VertexArrayManager> manager_;
43 };
44
45 // GCC requires these declarations, but MSVC requires they not be present
46 #ifndef COMPILER_MSVC
47 const uint32 VertexArrayManagerTest::kNumVertexAttribs;
48 #endif
49
TEST_F(VertexArrayManagerTest,Basic)50 TEST_F(VertexArrayManagerTest, Basic) {
51 const GLuint kClient1Id = 1;
52 const GLuint kService1Id = 11;
53 const GLuint kClient2Id = 2;
54
55 // Check we can create
56 manager_->CreateVertexAttribManager(
57 kClient1Id, kService1Id, kNumVertexAttribs, true);
58 // Check creation success
59 VertexAttribManager* info1 = manager_->GetVertexAttribManager(kClient1Id);
60 ASSERT_TRUE(info1 != NULL);
61 EXPECT_EQ(kService1Id, info1->service_id());
62 GLuint client_id = 0;
63 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id));
64 EXPECT_EQ(kClient1Id, client_id);
65 // Check we get nothing for a non-existent name.
66 EXPECT_TRUE(manager_->GetVertexAttribManager(kClient2Id) == NULL);
67 // Check trying to a remove non-existent name does not crash.
68 manager_->RemoveVertexAttribManager(kClient2Id);
69 // Check that it gets deleted when the last reference is released.
70 EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, ::testing::Pointee(kService1Id)))
71 .Times(1)
72 .RetiresOnSaturation();
73 // Check we can't get the texture after we remove it.
74 manager_->RemoveVertexAttribManager(kClient1Id);
75 EXPECT_TRUE(manager_->GetVertexAttribManager(kClient1Id) == NULL);
76 }
77
TEST_F(VertexArrayManagerTest,Destroy)78 TEST_F(VertexArrayManagerTest, Destroy) {
79 const GLuint kClient1Id = 1;
80 const GLuint kService1Id = 11;
81 VertexArrayManager manager;
82 // Check we can create
83 manager.CreateVertexAttribManager(
84 kClient1Id, kService1Id, kNumVertexAttribs, true);
85 // Check creation success
86 VertexAttribManager* info1 = manager.GetVertexAttribManager(kClient1Id);
87 ASSERT_TRUE(info1 != NULL);
88 EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, ::testing::Pointee(kService1Id)))
89 .Times(1)
90 .RetiresOnSaturation();
91 manager.Destroy(true);
92 // Check that resources got freed.
93 info1 = manager.GetVertexAttribManager(kClient1Id);
94 ASSERT_TRUE(info1 == NULL);
95 }
96
97 } // namespace gles2
98 } // namespace gpu
99
100
101