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

Side by Side Diff: content/common/gpu/gpu_memory_manager_unittest.cc

Issue 1420533009: Cleanup GpuMemoryManager and helpers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more cleanup. Created 5 years, 1 month 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) 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 "content/common/gpu/gpu_memory_manager.h"
6
7 #include "content/common/gpu/gpu_memory_manager_client.h"
8 #include "content/common/gpu/gpu_memory_tracking.h"
9 #include "gpu/command_buffer/common/gpu_memory_allocation.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/gfx/geometry/size_conversions.h"
12
13 using gpu::MemoryAllocation;
14
15 class FakeMemoryTracker : public gpu::gles2::MemoryTracker {
16 public:
17 void TrackMemoryAllocatedChange(
18 size_t /* old_size */,
19 size_t /* new_size */) override {}
20 bool EnsureGPUMemoryAvailable(size_t /* size_needed */) override {
21 return true;
22 }
23 uint64_t ClientTracingId() const override { return 0; }
24 int ClientId() const override { return 0; }
25 uint64_t ShareGroupTracingGUID() const override { return 0; }
26
27 private:
28 ~FakeMemoryTracker() override {}
29 };
30
31 namespace content {
32
33 // This class is used to collect all stub assignments during a
34 // Manage() call.
35 class ClientAssignmentCollector {
36 public:
37 struct ClientMemoryStat {
38 MemoryAllocation allocation;
39 };
40 typedef base::hash_map<GpuMemoryManagerClient*, ClientMemoryStat>
41 ClientMemoryStatMap;
42
43 static const ClientMemoryStatMap& GetClientStatsForLastManage() {
44 return client_memory_stats_for_last_manage_;
45 }
46 static void ClearAllStats() {
47 client_memory_stats_for_last_manage_.clear();
48 }
49 static void AddClientStat(GpuMemoryManagerClient* client,
50 const MemoryAllocation& allocation) {
51 DCHECK(!client_memory_stats_for_last_manage_.count(client));
52 client_memory_stats_for_last_manage_[client].allocation = allocation;
53 }
54
55 private:
56 static ClientMemoryStatMap client_memory_stats_for_last_manage_;
57 };
58
59 ClientAssignmentCollector::ClientMemoryStatMap
60 ClientAssignmentCollector::client_memory_stats_for_last_manage_;
61
62 class FakeClient : public GpuMemoryManagerClient {
63 public:
64 GpuMemoryManager* memmgr_;
65 bool suggest_have_frontbuffer_;
66 MemoryAllocation allocation_;
67 uint64 total_gpu_memory_;
68 gfx::Size surface_size_;
69 GpuMemoryManagerClient* share_group_;
70 scoped_refptr<gpu::gles2::MemoryTracker> memory_tracker_;
71 scoped_ptr<GpuMemoryTrackingGroup> tracking_group_;
72 scoped_ptr<GpuMemoryManagerClientState> client_state_;
73
74 // This will create a client with no surface
75 FakeClient(GpuMemoryManager* memmgr, GpuMemoryManagerClient* share_group)
76 : memmgr_(memmgr),
77 suggest_have_frontbuffer_(false),
78 total_gpu_memory_(0),
79 share_group_(share_group),
80 memory_tracker_(NULL) {
81 if (!share_group_) {
82 memory_tracker_ = new FakeMemoryTracker();
83 tracking_group_.reset(
84 memmgr_->CreateTrackingGroup(0, memory_tracker_.get()));
85 }
86 client_state_.reset(memmgr_->CreateClientState(this, false, true));
87 }
88
89 // This will create a client with a surface
90 FakeClient(GpuMemoryManager* memmgr, int32 surface_id, bool visible)
91 : memmgr_(memmgr),
92 suggest_have_frontbuffer_(false),
93 total_gpu_memory_(0),
94 share_group_(NULL),
95 memory_tracker_(NULL) {
96 memory_tracker_ = new FakeMemoryTracker();
97 tracking_group_.reset(
98 memmgr_->CreateTrackingGroup(0, memory_tracker_.get()));
99 client_state_.reset(
100 memmgr_->CreateClientState(this, surface_id != 0, visible));
101 }
102
103 ~FakeClient() override {
104 client_state_.reset();
105 tracking_group_.reset();
106 memory_tracker_ = NULL;
107 }
108
109 void SuggestHaveFrontBuffer(bool suggest_have_frontbuffer) override {
110 suggest_have_frontbuffer_ = suggest_have_frontbuffer;
111 }
112
113 bool GetTotalGpuMemory(uint64* bytes) override {
114 if (total_gpu_memory_) {
115 *bytes = total_gpu_memory_;
116 return true;
117 }
118 return false;
119 }
120 void SetTotalGpuMemory(uint64 bytes) { total_gpu_memory_ = bytes; }
121
122 gpu::gles2::MemoryTracker* GetMemoryTracker() const override {
123 if (share_group_)
124 return share_group_->GetMemoryTracker();
125 return memory_tracker_.get();
126 }
127
128 gfx::Size GetSurfaceSize() const override { return surface_size_; }
129 void SetSurfaceSize(gfx::Size size) { surface_size_ = size; }
130
131 void SetVisible(bool visible) {
132 client_state_->SetVisible(visible);
133 }
134
135 uint64 BytesWhenVisible() const {
136 return allocation_.bytes_limit_when_visible;
137 }
138 };
139
140 class GpuMemoryManagerTest : public testing::Test {
141 protected:
142 static const uint64 kFrontbufferLimitForTest = 3;
143
144 GpuMemoryManagerTest()
145 : memmgr_(0, kFrontbufferLimitForTest) {
146 memmgr_.TestingDisableScheduleManage();
147 }
148
149 void SetUp() override {}
150
151 static int32 GenerateUniqueSurfaceId() {
152 static int32 surface_id_ = 1;
153 return surface_id_++;
154 }
155
156 bool IsAllocationForegroundForSurfaceYes(
157 const MemoryAllocation& alloc) {
158 return true;
159 }
160 bool IsAllocationBackgroundForSurfaceYes(
161 const MemoryAllocation& alloc) {
162 return true;
163 }
164 bool IsAllocationHibernatedForSurfaceYes(
165 const MemoryAllocation& alloc) {
166 return true;
167 }
168 bool IsAllocationForegroundForSurfaceNo(
169 const MemoryAllocation& alloc) {
170 return alloc.bytes_limit_when_visible != 0;
171 }
172 bool IsAllocationBackgroundForSurfaceNo(
173 const MemoryAllocation& alloc) {
174 return alloc.bytes_limit_when_visible != 0;
175 }
176 bool IsAllocationHibernatedForSurfaceNo(
177 const MemoryAllocation& alloc) {
178 return alloc.bytes_limit_when_visible == 0;
179 }
180
181 void Manage() {
182 ClientAssignmentCollector::ClearAllStats();
183 memmgr_.Manage();
184 }
185
186 GpuMemoryManager memmgr_;
187 };
188
189 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_memory_manager_client.cc ('k') | content/common/gpu/gpu_memory_uma_stats.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698