Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: gpu/command_buffer/client/client_discardable_manager_unittest.cc

Issue 2814583002: Service/ClientDiscardableManager (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017 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/client/client_discardable_manager.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace gpu {
9 namespace {
10 class FakeCommandBuffer : public CommandBuffer {
11 public:
12 FakeCommandBuffer() = default;
13 ~FakeCommandBuffer() override { EXPECT_TRUE(active_ids_.empty()); }
14 // Overridden from CommandBuffer:
15 State GetLastState() override {
16 NOTREACHED();
17 return State();
18 };
19 void Flush(int32_t put_offset) override { NOTREACHED(); }
20 void OrderingBarrier(int32_t put_offset) override { NOTREACHED(); }
21 State WaitForTokenInRange(int32_t start, int32_t end) override {
22 NOTREACHED();
23
24 return State();
25 }
26 State WaitForGetOffsetInRange(uint32_t set_get_buffer_count,
27 int32_t start,
28 int32_t end) override {
29 NOTREACHED();
30 return State();
31 }
32 void SetGetBuffer(int32_t transfer_buffer_id) override { NOTREACHED(); }
33 scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
34 int32_t* id) override {
35 EXPECT_GE(size, 2048u);
36 *id = next_id_++;
37 active_ids_.insert(*id);
38 std::unique_ptr<base::SharedMemory> shared_mem(new base::SharedMemory);
39 shared_mem->CreateAndMapAnonymous(size);
40 return MakeBufferFromSharedMemory(std::move(shared_mem), size);
41 }
42 void DestroyTransferBuffer(int32_t id) override {
43 auto found = active_ids_.find(id);
44 EXPECT_TRUE(found != active_ids_.end());
45 active_ids_.erase(found);
46 }
47
48 private:
49 int32_t next_id_ = 1;
50 std::set<int32_t> active_ids_;
51 };
52
53 void UnlockClientHandleForTesting(
54 const ClientDiscardableHandle& client_handle) {
55 ServiceDiscardableHandle service_handle(client_handle.BufferForTesting(),
56 client_handle.byte_offset(),
57 client_handle.shm_id());
58 service_handle.Unlock();
59 }
60
61 bool DeleteClientHandleForTesting(
62 const ClientDiscardableHandle& client_handle) {
63 ServiceDiscardableHandle service_handle(client_handle.BufferForTesting(),
64 client_handle.byte_offset(),
65 client_handle.shm_id());
66 return service_handle.Delete();
67 }
68
69 void UnlockAndDeleteClientHandleForTesting(
70 const ClientDiscardableHandle& client_handle) {
71 UnlockClientHandleForTesting(client_handle);
72 EXPECT_TRUE(DeleteClientHandleForTesting(client_handle));
73 }
74
75 } // namespace
76
77 TEST(ClientDiscardableManagerTest, BasicUsage) {
78 FakeCommandBuffer command_buffer;
79 ClientDiscardableManager manager;
80 {
81 ClientDiscardableHandle handle =
82 manager.InitializeTexture(&command_buffer, 1);
83 EXPECT_TRUE(handle.IsLockedForTesting());
84 EXPECT_EQ(handle.shm_id(), 1);
85 EXPECT_FALSE(DeleteClientHandleForTesting(handle));
86 UnlockClientHandleForTesting(handle);
87 manager.LockTexture(1);
88 EXPECT_FALSE(DeleteClientHandleForTesting(handle));
89 UnlockAndDeleteClientHandleForTesting(handle);
90 }
91 manager.FreeTexture(1);
92 manager.CheckPendingForTesting(&command_buffer);
93 }
94
95 TEST(ClientDiscardableManagerTest, Reuse) {
96 FakeCommandBuffer command_buffer;
97 ClientDiscardableManager manager;
98 manager.SetElementCountForTesting(1024);
99 for (int i = 1; i <= 1024; ++i) {
100 ClientDiscardableHandle handle =
101 manager.InitializeTexture(&command_buffer, i);
102 EXPECT_TRUE(handle.IsLockedForTesting());
103 EXPECT_EQ(handle.shm_id(), 1);
104 UnlockAndDeleteClientHandleForTesting(handle);
105 }
106 // Delete every other entry.
107 for (int i = 1; i <= 1024; i += 2) {
108 manager.FreeTexture(i);
109 }
110 // Allocate 512 more entries, ensure we re-use the original buffer.
111 for (int i = 1; i <= 512; ++i) {
112 ClientDiscardableHandle handle =
113 manager.InitializeTexture(&command_buffer, 1024 + i);
114 EXPECT_TRUE(handle.IsLockedForTesting());
115 EXPECT_EQ(handle.shm_id(), 1);
116 UnlockAndDeleteClientHandleForTesting(handle);
117 }
118 // Delete the other half of the original allocations.
119 for (int i = 2; i <= 1024; i += 2) {
120 manager.FreeTexture(i);
121 }
122 // And delete the second set of allocations.
123 for (int i = 1; i <= 512; ++i) {
124 manager.FreeTexture(1024 + i);
125 }
126 manager.CheckPendingForTesting(&command_buffer);
127 }
128
129 TEST(ClientDiscardableManagerTest, MultipleAllocations) {
130 FakeCommandBuffer command_buffer;
131 ClientDiscardableManager manager;
132 manager.SetElementCountForTesting(1024);
133 for (int i = 1; i <= 1024; ++i) {
134 ClientDiscardableHandle handle =
135 manager.InitializeTexture(&command_buffer, i);
136 EXPECT_TRUE(handle.IsLockedForTesting());
137 EXPECT_EQ(handle.shm_id(), 1);
138 UnlockAndDeleteClientHandleForTesting(handle);
139 }
140 // Allocate and free one entry multiple times, this should cause the
141 // allocation and release of a new shm_id each time.
142 for (int i = 1; i < 10; ++i) {
143 {
144 ClientDiscardableHandle handle =
145 manager.InitializeTexture(&command_buffer, 1024 + i);
146 EXPECT_TRUE(handle.IsLockedForTesting());
147 EXPECT_EQ(handle.shm_id(), i + 1);
148 UnlockAndDeleteClientHandleForTesting(handle);
149 }
150 manager.FreeTexture(1024 + i);
151 }
152 // Delete every other entry.
153 for (int i = 1; i <= 1024; ++i) {
154 manager.FreeTexture(i);
155 }
156 manager.CheckPendingForTesting(&command_buffer);
157 }
158
159 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/client_discardable_manager.cc ('k') | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698