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

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

Issue 226363004: Global GPU memory manager for android webview (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use command line switch and move that from HR to BVR. Created 6 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 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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698