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

Side by Side Diff: android_webview/browser/global_tile_manager_unittest.cc

Issue 643993005: Remove limit on number of resources in cc (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 2014 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 <algorithm>
6 #include "android_webview/browser/global_tile_manager.h"
7 #include "android_webview/browser/global_tile_manager_client.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11 // This should be the same as the one defined global_tile_manager.cc
12 const size_t kNumTilesLimit = 450;
13 const size_t kDefaultNumTiles = 150;
14
15 } // namespace
16
17 using android_webview::GlobalTileManager;
18 using android_webview::GlobalTileManagerClient;
19 using content::SynchronousCompositorMemoryPolicy;
20 using testing::Test;
21
22 class MockGlobalTileManagerClient : public GlobalTileManagerClient {
23 public:
24 virtual SynchronousCompositorMemoryPolicy GetMemoryPolicy() const override {
25 return memory_policy_;
26 }
27
28 virtual void SetMemoryPolicy(SynchronousCompositorMemoryPolicy new_policy,
29 bool effective_immediately) override {
30 memory_policy_ = new_policy;
31 }
32
33 MockGlobalTileManagerClient() {
34 tile_request_.num_resources_limit = kDefaultNumTiles;
35 key_ = GlobalTileManager::GetInstance()->PushBack(this);
36 }
37
38 virtual ~MockGlobalTileManagerClient() {
39 GlobalTileManager::GetInstance()->Remove(key_);
40 }
41
42 SynchronousCompositorMemoryPolicy GetTileRequest() { return tile_request_; }
43 GlobalTileManager::Key GetKey() { return key_; }
44
45 private:
46 SynchronousCompositorMemoryPolicy memory_policy_;
47 SynchronousCompositorMemoryPolicy tile_request_;
48 GlobalTileManager::Key key_;
49 };
50
51 class GlobalTileManagerTest : public Test {
52 public:
53 virtual void SetUp() {}
54
55 GlobalTileManager* manager() { return GlobalTileManager::GetInstance(); }
56 };
57
58 TEST_F(GlobalTileManagerTest, RequestTilesUnderLimit) {
59 MockGlobalTileManagerClient clients[2];
60
61 for (size_t i = 0; i < 2; i++) {
62 manager()->RequestTiles(clients[i].GetTileRequest(), clients[i].GetKey());
63 manager()->DidUse(clients[i].GetKey());
64
65 // Ensure clients get what they asked for when the manager is under tile
66 // limit.
67 EXPECT_EQ(clients[i].GetMemoryPolicy().num_resources_limit,
68 kDefaultNumTiles);
69 }
70 }
71
72 TEST_F(GlobalTileManagerTest, EvictHappensWhenOverLimit) {
73 MockGlobalTileManagerClient clients[4];
74
75 for (size_t i = 0; i < 4; i++) {
76 manager()->RequestTiles(clients[i].GetTileRequest(), clients[i].GetKey());
77 manager()->DidUse(clients[i].GetKey());
78 }
79
80 size_t total_tiles = 0;
81 for (size_t i = 0; i < 4; i++) {
82 total_tiles += clients[i].GetMemoryPolicy().num_resources_limit;
83 }
84
85 // Ensure that eviction happened and kept the total number of tiles within
86 // kNumTilesLimit.
87 EXPECT_LE(total_tiles, kNumTilesLimit);
88 }
89
90 TEST_F(GlobalTileManagerTest, RandomizedStressRequests) {
91 MockGlobalTileManagerClient clients[100];
92 size_t index[100];
93 for (size_t i = 0; i < 100; i++) {
94 index[i] = i;
95 }
96
97 // Fix the seed so that tests are reproducible.
98 std::srand(1);
99 // Simulate a random request order of clients.
100 std::random_shuffle(&index[0], &index[99]);
101
102 for (size_t i = 0; i < 100; i++) {
103 size_t j = index[i];
104 manager()->RequestTiles(clients[j].GetTileRequest(), clients[j].GetKey());
105 manager()->DidUse(clients[j].GetKey());
106 }
107
108 size_t total_tiles = 0;
109 for (size_t i = 0; i < 100; i++) {
110 total_tiles += clients[i].GetMemoryPolicy().num_resources_limit;
111 }
112
113 // Ensure that eviction happened and kept the total number of tiles within
114 // kNumTilesLimit.
115 EXPECT_LE(total_tiles, kNumTilesLimit);
116 }
117
118 TEST_F(GlobalTileManagerTest, FixedOrderedRequests) {
119 MockGlobalTileManagerClient clients[10];
120
121 // 10 clients requesting resources in a fixed order. Do that for 5 rounds.
122 for (int round = 0; round < 5; round++) {
123 for (size_t i = 0; i < 10; i++) {
124 manager()->RequestTiles(clients[i].GetTileRequest(), clients[i].GetKey());
125 manager()->DidUse(clients[i].GetKey());
126 }
127 }
128
129 // Ensure that the total tiles are divided evenly among all clients.
130 for (size_t i = 0; i < 10; i++) {
131 EXPECT_EQ(clients[i].GetMemoryPolicy().num_resources_limit,
132 kNumTilesLimit / 10);
133 }
134 }
135
136 TEST_F(GlobalTileManagerTest, FixedOrderedRequestsWithInactiveClients) {
137 MockGlobalTileManagerClient clients[20];
138
139 // 20 clients request resources.
140 for (size_t i = 0; i < 20; i++) {
141 manager()->RequestTiles(clients[i].GetTileRequest(), clients[i].GetKey());
142 manager()->DidUse(clients[i].GetKey());
143 }
144
145 // Now the last 10 clients become inactive. Only the first 10 clients remain
146 // active resource requesters.
147 // 10 clients requesting resources in a fixed order. Do that for 5 rounds.
148 for (int round = 0; round < 5; round++) {
149 for (size_t i = 0; i < 10; i++) {
150 manager()->RequestTiles(clients[i].GetTileRequest(), clients[i].GetKey());
151 manager()->DidUse(clients[i].GetKey());
152 }
153 }
154
155 // Ensure that the total tiles are divided evenly among all clients.
156 for (size_t i = 0; i < 10; i++) {
157 EXPECT_EQ(clients[i].GetMemoryPolicy().num_resources_limit,
158 kNumTilesLimit / 10);
159 }
160
161 // Ensure that the inactive tiles are evicted.
162 for (size_t i = 11; i < 20; i++) {
163 EXPECT_EQ(clients[i].GetMemoryPolicy().num_resources_limit, 0u);
164 }
165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698