| // Copyright 2026 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gpu/command_buffer/client/readback_buffer_shadow_tracker.h" |
| |
| #include <memory> |
| |
| #include "gpu/command_buffer/client/client_test_helper.h" |
| #include "gpu/command_buffer/client/gles2_cmd_helper.h" |
| #include "gpu/command_buffer/client/mapped_memory.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace gpu::gles2 { |
| |
| class ReadbackBufferShadowTrackerTest : public testing::Test { |
| protected: |
| void SetUp() override { |
| command_buffer_ = std::make_unique<MockClientCommandBuffer>(); |
| command_buffer_->DelegateToFake(); |
| helper_ = std::make_unique<GLES2CmdHelper>(command_buffer_.get()); |
| helper_->Initialize(1024); |
| EXPECT_CALL(*command_buffer_, DestroyTransferBuffer(testing::_)) |
| .Times(testing::AnyNumber()); |
| mapped_memory_ = std::make_unique<MappedMemoryManager>(helper_.get(), 1024); |
| tracker_ = std::make_unique<ReadbackBufferShadowTracker>( |
| mapped_memory_.get(), helper_.get()); |
| } |
| |
| std::unique_ptr<gpu::MockClientCommandBuffer> command_buffer_; |
| std::unique_ptr<GLES2CmdHelper> helper_; |
| std::unique_ptr<MappedMemoryManager> mapped_memory_; |
| std::unique_ptr<ReadbackBufferShadowTracker> tracker_; |
| }; |
| |
| // Test that ReadbackBufferShadowTracker::Buffer::Alloc correctly handles |
| // MappedMemoryManager::Alloc failures. |
| TEST_F(ReadbackBufferShadowTrackerTest, AllocFails) { |
| const GLuint kBufferId = 1; |
| const GLuint kSize = 64; |
| tracker_->GetOrCreateBuffer(kBufferId, kSize); |
| |
| int32_t shm_id = 0; |
| uint32_t shm_offset = 0; |
| bool already_allocated = false; |
| |
| // Make Alloc fail by setting a very small limit. |
| mapped_memory_->set_max_allocated_bytes(1); |
| |
| auto* buffer = tracker_->GetBuffer(kBufferId); |
| uint32_t allocated_size = |
| buffer->Alloc(&shm_id, &shm_offset, &already_allocated); |
| |
| EXPECT_EQ(allocated_size, kSize); |
| EXPECT_EQ(shm_id, -1); |
| EXPECT_EQ(shm_offset, 0u); |
| EXPECT_FALSE(already_allocated); |
| } |
| |
| } // namespace gpu::gles2 |