summaryrefslogtreecommitdiff
path: root/chromium/cc/resources/tile_manager_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/resources/tile_manager_unittest.cc')
-rw-r--r--chromium/cc/resources/tile_manager_unittest.cc69
1 files changed, 64 insertions, 5 deletions
diff --git a/chromium/cc/resources/tile_manager_unittest.cc b/chromium/cc/resources/tile_manager_unittest.cc
index 6fb06908568..0274914a324 100644
--- a/chromium/cc/resources/tile_manager_unittest.cc
+++ b/chromium/cc/resources/tile_manager_unittest.cc
@@ -5,6 +5,7 @@
#include "cc/resources/tile.h"
#include "cc/resources/tile_priority.h"
#include "cc/test/fake_output_surface.h"
+#include "cc/test/fake_output_surface_client.h"
#include "cc/test/fake_picture_pile_impl.h"
#include "cc/test/fake_tile_manager.h"
#include "cc/test/fake_tile_manager_client.h"
@@ -22,7 +23,10 @@ class TileManagerTest : public testing::TestWithParam<bool> {
TileMemoryLimitPolicy memory_limit_policy,
TreePriority tree_priority) {
output_surface_ = FakeOutputSurface::Create3d();
- resource_provider_ = ResourceProvider::Create(output_surface_.get(), 0);
+ CHECK(output_surface_->BindToClient(&output_surface_client_));
+
+ resource_provider_ =
+ ResourceProvider::Create(output_surface_.get(), 0, false);
tile_manager_ = make_scoped_ptr(
new FakeTileManager(&tile_manager_client_, resource_provider_.get()));
@@ -41,6 +45,7 @@ class TileManagerTest : public testing::TestWithParam<bool> {
state.memory_limit_in_bytes = 100 * 1000 * 1000;
state.num_resources_limit = max_tiles;
}
+ state.unused_memory_limit_in_bytes = state.memory_limit_in_bytes;
state.memory_limit_policy = memory_limit_policy;
state.tree_priority = tree_priority;
@@ -53,6 +58,7 @@ class TileManagerTest : public testing::TestWithParam<bool> {
gfx::Size tile_size = settings_.default_tile_size;
state.memory_limit_in_bytes =
max_memory_tiles_ * 4 * tile_size.width() * tile_size.height();
+ state.unused_memory_limit_in_bytes = state.memory_limit_in_bytes;
state.memory_limit_policy = memory_limit_policy_;
state.num_resources_limit = 100;
state.tree_priority = tree_priority;
@@ -66,15 +72,16 @@ class TileManagerTest : public testing::TestWithParam<bool> {
testing::Test::TearDown();
}
- TileVector CreateTiles(int count,
- TilePriority active_priority,
- TilePriority pending_priority) {
+ TileVector CreateTilesWithSize(int count,
+ TilePriority active_priority,
+ TilePriority pending_priority,
+ gfx::Size tile_size) {
TileVector tiles;
for (int i = 0; i < count; ++i) {
scoped_refptr<Tile> tile =
make_scoped_refptr(new Tile(tile_manager_.get(),
picture_pile_.get(),
- settings_.default_tile_size,
+ tile_size,
gfx::Rect(),
gfx::Rect(),
1.0,
@@ -88,6 +95,15 @@ class TileManagerTest : public testing::TestWithParam<bool> {
return tiles;
}
+ TileVector CreateTiles(int count,
+ TilePriority active_priority,
+ TilePriority pending_priority) {
+ return CreateTilesWithSize(count,
+ active_priority,
+ pending_priority,
+ settings_.default_tile_size);
+ }
+
FakeTileManager* tile_manager() {
return tile_manager_.get();
}
@@ -119,6 +135,7 @@ class TileManagerTest : public testing::TestWithParam<bool> {
LayerTreeSettings settings_;
scoped_ptr<FakeTileManager> tile_manager_;
scoped_refptr<FakePicturePileImpl> picture_pile_;
+ FakeOutputSurfaceClient output_surface_client_;
scoped_ptr<FakeOutputSurface> output_surface_;
scoped_ptr<ResourceProvider> resource_provider_;
TileMemoryLimitPolicy memory_limit_policy_;
@@ -461,6 +478,48 @@ TEST_P(TileManagerTest, TextReRasterAsNoLCD) {
EXPECT_EQ(0, TilesWithLCDCount(pending_tree_tiles));
}
+TEST_P(TileManagerTest, RespectMemoryLimit) {
+ Initialize(5, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
+ TileVector large_tiles = CreateTiles(
+ 5, TilePriorityForNowBin(), TilePriority());
+
+ size_t memory_required_bytes;
+ size_t memory_nice_to_have_bytes;
+ size_t memory_allocated_bytes;
+ size_t memory_used_bytes;
+
+ tile_manager()->ManageTiles();
+ tile_manager()->GetMemoryStats(&memory_required_bytes,
+ &memory_nice_to_have_bytes,
+ &memory_allocated_bytes,
+ &memory_used_bytes);
+ // Allocated bytes should never be more than the memory limit.
+ EXPECT_LE(memory_allocated_bytes,
+ tile_manager()->GlobalState().memory_limit_in_bytes);
+
+ // Finish raster of large tiles.
+ tile_manager()->UpdateVisibleTiles();
+
+ // Remove all large tiles. This will leave the memory currently
+ // used by these tiles as unused when ManageTiles() is called.
+ large_tiles.clear();
+
+ // Create a new set of tiles using a different size. These tiles
+ // can use the memory currently assigned to the lerge tiles but
+ // they can't use the same resources as the size doesn't match.
+ TileVector small_tiles = CreateTilesWithSize(
+ 5, TilePriorityForNowBin(), TilePriority(), gfx::Size(128, 128));
+
+ tile_manager()->ManageTiles();
+ tile_manager()->GetMemoryStats(&memory_required_bytes,
+ &memory_nice_to_have_bytes,
+ &memory_allocated_bytes,
+ &memory_used_bytes);
+ // Allocated bytes should never be more than the memory limit.
+ EXPECT_LE(memory_allocated_bytes,
+ tile_manager()->GlobalState().memory_limit_in_bytes);
+}
+
// If true, the max tile limit should be applied as bytes; if false,
// as num_resources_limit.
INSTANTIATE_TEST_CASE_P(TileManagerTests,