OLD | NEW |
---|---|
(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 testing::Test; | |
20 | |
21 class MockGlobalTileManagerClient : public GlobalTileManagerClient { | |
22 public: | |
23 virtual size_t GetNumTiles() const OVERRIDE { return num_tiles_; } | |
24 virtual void SetNumTiles(size_t num_tiles, | |
25 bool effective_immediately) OVERRIDE { | |
26 num_tiles_ = num_tiles; | |
27 } | |
28 | |
29 MockGlobalTileManagerClient() { | |
30 num_tiles_ = 0; | |
31 tile_request_ = kDefaultNumTiles; | |
32 } | |
33 | |
34 virtual ~MockGlobalTileManagerClient() {} | |
35 | |
36 size_t num_tiles_; | |
boliu
2014/05/02 20:28:34
No underscore if aren't actually private.
hush (inactive)
2014/05/02 22:07:40
Made these 2 private
| |
37 size_t tile_request_; | |
38 }; | |
39 | |
40 class GlobalTileManagerTest : public Test { | |
41 public: | |
42 virtual void SetUp() {} | |
43 | |
44 GlobalTileManager* manager() { return GlobalTileManager::GetInstance(); } | |
45 }; | |
46 | |
47 TEST_F(GlobalTileManagerTest, RequestTilesUnderLimit) { | |
48 MockGlobalTileManagerClient clients[2]; | |
49 GlobalTileManager::Key key[2]; | |
50 for (size_t i = 0; i < 2; i++) { | |
51 key[i] = manager()->PushBack(&clients[i]); | |
boliu
2014/05/02 20:28:34
PushBack and Remove should be handled by client co
hush (inactive)
2014/05/02 22:07:40
Done.
| |
52 } | |
53 | |
54 for (size_t i = 0; i < 2; i++) { | |
55 manager()->RequestTiles(clients[i].tile_request_, true, key[i]); | |
56 | |
57 manager()->DidUse(key[i]); | |
58 | |
59 // Ensure clients get what they asked for when the manager is under tile | |
60 // limit. | |
61 EXPECT_EQ(clients[i].GetNumTiles(), kDefaultNumTiles); | |
62 } | |
63 | |
64 // Clean up. | |
65 for (size_t i = 0; i < 2; i++) { | |
66 manager()->Remove(key[i]); | |
67 } | |
68 } | |
69 | |
70 TEST_F(GlobalTileManagerTest, EvictHappensWhenOverLimit) { | |
71 MockGlobalTileManagerClient clients[4]; | |
72 GlobalTileManager::Key key[4]; | |
73 for (size_t i = 0; i < 4; i++) { | |
74 key[i] = manager()->PushBack(&clients[i]); | |
75 } | |
76 | |
77 for (size_t i = 0; i < 4; i++) { | |
78 manager()->RequestTiles(clients[i].tile_request_, true, key[i]); | |
79 | |
80 manager()->DidUse(key[i]); | |
81 } | |
82 | |
83 size_t total_tiles = 0; | |
84 for (size_t i = 0; i < 4; i++) { | |
85 total_tiles += clients[i].GetNumTiles(); | |
86 } | |
87 | |
88 // Ensure that eviction happened and kept the total number of tiles within | |
89 // kNumTilesLimit. | |
90 EXPECT_LE(total_tiles, kNumTilesLimit); | |
91 | |
92 // Clean up. | |
93 for (size_t i = 0; i < 4; i++) { | |
94 manager()->Remove(key[i]); | |
95 } | |
96 } | |
97 | |
98 TEST_F(GlobalTileManagerTest, RandomizedStressRequests) { | |
99 MockGlobalTileManagerClient clients[100]; | |
100 GlobalTileManager::Key key[100]; | |
101 size_t index[100]; | |
102 for (size_t i = 0; i < 100; i++) { | |
103 key[i] = manager()->PushBack(&clients[i]); | |
104 index[i] = i; | |
105 } | |
106 | |
107 // Simulate a random request order of clients. | |
108 std::random_shuffle(&index[0], &index[99]); | |
109 | |
110 for (size_t i = 0; i < 100; i++) { | |
111 size_t j = index[i]; | |
112 manager()->RequestTiles(clients[j].tile_request_, true, key[j]); | |
113 | |
114 manager()->DidUse(key[j]); | |
115 } | |
116 | |
117 size_t total_tiles = 0; | |
118 for (size_t i = 0; i < 100; i++) { | |
119 total_tiles += clients[i].GetNumTiles(); | |
120 } | |
121 | |
122 // Ensure that eviction happened and kept the total number of tiles within | |
123 // kNumTilesLimit. | |
124 EXPECT_LE(total_tiles, kNumTilesLimit); | |
125 | |
126 // Clean up. | |
127 for (size_t i = 0; i < 100; i++) { | |
128 manager()->Remove(key[i]); | |
129 } | |
boliu
2014/05/02 20:28:34
Requesting a few more tests.
N active clients dra
hush (inactive)
2014/05/02 22:12:25
Done.
| |
130 } | |
OLD | NEW |