| // Copyright (c) 2014 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/valuebuffer_manager.h" |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| #include "gpu/command_buffer/common/value_state.h" |
| #include "gpu/command_buffer/service/common_decoder.h" |
| #include "gpu/command_buffer/service/feature_info.h" |
| #include "gpu/command_buffer/service/gpu_service_test.h" |
| #include "gpu/command_buffer/service/mocks.h" |
| #include "gpu/command_buffer/service/test_helper.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/gl/gl_bindings.h" |
| #include "ui/gl/gl_mock.h" |
| |
| namespace gpu { |
| namespace gles2 { |
| |
| class ValuebufferManagerTest : public GpuServiceTest { |
| public: |
| ValuebufferManagerTest() {} |
| ~ValuebufferManagerTest() {} |
| |
| void SetUp() override { |
| GpuServiceTest::SetUp(); |
| pending_state_map_ = new ValueStateMap(); |
| manager_.reset(new ValuebufferManager(pending_state_map_.get())); |
| } |
| |
| void TearDown() override { |
| manager_->Destroy(); |
| GpuServiceTest::TearDown(); |
| } |
| |
| protected: |
| scoped_refptr<ValueStateMap> pending_state_map_; |
| scoped_ptr<ValuebufferManager> manager_; |
| }; |
| |
| TEST_F(ValuebufferManagerTest, Basic) { |
| const GLuint kClient1Id = 1; |
| const GLuint kClient2Id = 2; |
| // Check we can create a Valuebuffer |
| manager_->CreateValuebuffer(kClient1Id); |
| Valuebuffer* valuebuffer0 = manager_->GetValuebuffer(kClient1Id); |
| ASSERT_TRUE(valuebuffer0 != NULL); |
| EXPECT_EQ(kClient1Id, valuebuffer0->client_id()); |
| // Check we get nothing for a non-existent Valuebuffer. |
| // Check trying to a remove non-existent Valuebuffer does not crash |
| manager_->RemoveValuebuffer(kClient2Id); |
| // Check we can't get the renderbuffer after we remove it. |
| manager_->RemoveValuebuffer(kClient1Id); |
| EXPECT_TRUE(manager_->GetValuebuffer(kClient1Id) == NULL); |
| } |
| |
| TEST_F(ValuebufferManagerTest, Destroy) { |
| const GLuint kClient1Id = 1; |
| // Check we can create Valuebuffer. |
| manager_->CreateValuebuffer(kClient1Id); |
| Valuebuffer* valuebuffer0 = manager_->GetValuebuffer(kClient1Id); |
| ASSERT_TRUE(valuebuffer0 != NULL); |
| EXPECT_EQ(kClient1Id, valuebuffer0->client_id()); |
| manager_->Destroy(); |
| // Check the resources were released. |
| Valuebuffer* valuebuffer1 = manager_->GetValuebuffer(kClient1Id); |
| ASSERT_TRUE(valuebuffer1 == NULL); |
| } |
| |
| TEST_F(ValuebufferManagerTest, ValueBuffer) { |
| const GLuint kClient1Id = 1; |
| // Check we can create a Valuebuffer |
| manager_->CreateValuebuffer(kClient1Id); |
| Valuebuffer* valuebuffer0 = manager_->GetValuebuffer(kClient1Id); |
| ASSERT_TRUE(valuebuffer0 != NULL); |
| EXPECT_EQ(kClient1Id, valuebuffer0->client_id()); |
| EXPECT_FALSE(valuebuffer0->IsValid()); |
| } |
| |
| TEST_F(ValuebufferManagerTest, UpdateState) { |
| const GLuint kClient1Id = 1; |
| ValueState valuestate1; |
| valuestate1.int_value[0] = 111; |
| ValueState valuestate2; |
| valuestate2.int_value[0] = 222; |
| manager_->CreateValuebuffer(kClient1Id); |
| Valuebuffer* valuebuffer0 = manager_->GetValuebuffer(kClient1Id); |
| ASSERT_TRUE(valuebuffer0 != NULL); |
| EXPECT_EQ(kClient1Id, valuebuffer0->client_id()); |
| valuebuffer0->AddSubscription(GL_MOUSE_POSITION_CHROMIUM); |
| ASSERT_TRUE(valuebuffer0->GetState(GL_MOUSE_POSITION_CHROMIUM) == NULL); |
| pending_state_map_->UpdateState(GL_MOUSE_POSITION_CHROMIUM, valuestate1); |
| manager_->UpdateValuebufferState(valuebuffer0); |
| const ValueState* new_state1 = |
| valuebuffer0->GetState(GL_MOUSE_POSITION_CHROMIUM); |
| ASSERT_TRUE(new_state1 != NULL); |
| ASSERT_TRUE(new_state1->int_value[0] == 111); |
| // Ensure state changes |
| pending_state_map_->UpdateState(GL_MOUSE_POSITION_CHROMIUM, valuestate2); |
| manager_->UpdateValuebufferState(valuebuffer0); |
| const ValueState* new_state2 = |
| valuebuffer0->GetState(GL_MOUSE_POSITION_CHROMIUM); |
| ASSERT_TRUE(new_state2 != NULL); |
| ASSERT_TRUE(new_state2->int_value[0] == 222); |
| } |
| |
| } // namespace gles2 |
| } // namespace gpu |