| Index: cc/layers/scrollbar_layer_unittest.cc
|
| diff --git a/cc/layers/scrollbar_layer_unittest.cc b/cc/layers/scrollbar_layer_unittest.cc
|
| index 962efa0df6331815a3f5c2b6569706e55067d7c7..c4db0f8865ff2561590c7c82ac14874e52a6707c 100644
|
| --- a/cc/layers/scrollbar_layer_unittest.cc
|
| +++ b/cc/layers/scrollbar_layer_unittest.cc
|
| @@ -4,22 +4,23 @@
|
|
|
| #include "cc/layers/scrollbar_layer.h"
|
|
|
| +#include "base/containers/hash_tables.h"
|
| #include "cc/animation/scrollbar_animation_controller.h"
|
| #include "cc/debug/test_web_graphics_context_3d.h"
|
| #include "cc/layers/append_quads_data.h"
|
| #include "cc/layers/scrollbar_layer_impl.h"
|
| #include "cc/quads/solid_color_draw_quad.h"
|
| -#include "cc/resources/prioritized_resource_manager.h"
|
| -#include "cc/resources/priority_calculator.h"
|
| #include "cc/resources/resource_update_queue.h"
|
| #include "cc/test/fake_impl_proxy.h"
|
| #include "cc/test/fake_layer_tree_host.h"
|
| #include "cc/test/fake_layer_tree_host_client.h"
|
| #include "cc/test/fake_layer_tree_host_impl.h"
|
| #include "cc/test/fake_scrollbar.h"
|
| +#include "cc/test/fake_scrollbar_layer.h"
|
| #include "cc/test/geometry_test_utils.h"
|
| #include "cc/test/layer_tree_test.h"
|
| #include "cc/test/mock_quad_culler.h"
|
| +#include "cc/trees/layer_tree_host.h"
|
| #include "cc/trees/layer_tree_impl.h"
|
| #include "cc/trees/single_thread_proxy.h"
|
| #include "cc/trees/tree_synchronizer.h"
|
| @@ -404,9 +405,48 @@ class MockLayerTreeHost : public LayerTreeHost {
|
| public:
|
| MockLayerTreeHost(LayerTreeHostClient* client,
|
| const LayerTreeSettings& settings)
|
| - : LayerTreeHost(client, settings) {
|
| + : LayerTreeHost(client, settings),
|
| + next_id_(1),
|
| + total_ui_resource_created_(0),
|
| + total_ui_resource_deleted_(0) {
|
| Initialize(NULL);
|
| }
|
| +
|
| + virtual UIResourceId CreateUIResource(UIResourceClient* content) OVERRIDE {
|
| + total_ui_resource_created_++;
|
| + UIResourceId nid = next_id_++;
|
| + ui_resource_bitmap_map_[nid] = content->GetBitmap(nid, false);
|
| + return nid;
|
| + }
|
| +
|
| + // Deletes a UI resource. May safely be called more than once.
|
| + virtual void DeleteUIResource(UIResourceId id) OVERRIDE {
|
| + UIResourceBitmapMap::iterator iter = ui_resource_bitmap_map_.find(id);
|
| + if (iter != ui_resource_bitmap_map_.end()) {
|
| + ui_resource_bitmap_map_.erase(iter);
|
| + total_ui_resource_deleted_++;
|
| + }
|
| + }
|
| +
|
| + size_t UIResourceCount() { return ui_resource_bitmap_map_.size(); }
|
| + int TotalUIResourceDeleted() { return total_ui_resource_deleted_; }
|
| + int TotalUIResourceCreated() { return total_ui_resource_created_; }
|
| +
|
| + gfx::Size ui_resource_size(UIResourceId id) {
|
| + UIResourceBitmapMap::iterator iter = ui_resource_bitmap_map_.find(id);
|
| + if (iter != ui_resource_bitmap_map_.end() && iter->second.get())
|
| + return iter->second->GetSize();
|
| + return gfx::Size();
|
| + }
|
| +
|
| + private:
|
| + typedef base::hash_map<UIResourceId, scoped_refptr<UIResourceBitmap> >
|
| + UIResourceBitmapMap;
|
| + UIResourceBitmapMap ui_resource_bitmap_map_;
|
| +
|
| + int next_id_;
|
| + int total_ui_resource_created_;
|
| + int total_ui_resource_deleted_;
|
| };
|
|
|
|
|
| @@ -415,7 +455,10 @@ class ScrollbarLayerTestResourceCreation : public testing::Test {
|
| ScrollbarLayerTestResourceCreation()
|
| : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
|
|
|
| - void TestResourceUpload(size_t expected_resources) {
|
| + void TestResourceUpload(int num_updates,
|
| + size_t expected_resources,
|
| + int expected_created,
|
| + int expected_deleted) {
|
| layer_tree_host_.reset(
|
| new MockLayerTreeHost(&fake_client_, layer_tree_settings_));
|
|
|
| @@ -423,13 +466,11 @@ class ScrollbarLayerTestResourceCreation : public testing::Test {
|
| scoped_refptr<Layer> layer_tree_root = Layer::Create();
|
| scoped_refptr<Layer> content_layer = Layer::Create();
|
| scoped_refptr<Layer> scrollbar_layer =
|
| - ScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root->id());
|
| + ScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root->id());
|
| layer_tree_root->AddChild(content_layer);
|
| layer_tree_root->AddChild(scrollbar_layer);
|
|
|
| layer_tree_host_->InitializeOutputSurfaceIfNeeded();
|
| - layer_tree_host_->contents_texture_manager()->
|
| - SetMaxMemoryLimitBytes(1024 * 1024);
|
| layer_tree_host_->SetRootLayer(layer_tree_root);
|
|
|
| scrollbar_layer->SetIsDrawable(true);
|
| @@ -447,16 +488,17 @@ class ScrollbarLayerTestResourceCreation : public testing::Test {
|
| testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get());
|
|
|
| - PriorityCalculator calculator;
|
| ResourceUpdateQueue queue;
|
| OcclusionTracker occlusion_tracker(gfx::Rect(), false);
|
|
|
| scrollbar_layer->SavePaintProperties();
|
| - scrollbar_layer->SetTexturePriorities(calculator);
|
| - layer_tree_host_->contents_texture_manager()->PrioritizeTextures();
|
| - scrollbar_layer->Update(&queue, &occlusion_tracker);
|
| - EXPECT_EQ(0u, queue.FullUploadSize());
|
| - EXPECT_EQ(expected_resources, queue.PartialUploadSize());
|
| + for (int update_counter = 0; update_counter < num_updates; update_counter++)
|
| + scrollbar_layer->Update(&queue, &occlusion_tracker);
|
| +
|
| + // A non-solid-color scrollbar should have requested two textures.
|
| + EXPECT_EQ(expected_resources, layer_tree_host_->UIResourceCount());
|
| + EXPECT_EQ(expected_created, layer_tree_host_->TotalUIResourceCreated());
|
| + EXPECT_EQ(expected_deleted, layer_tree_host_->TotalUIResourceDeleted());
|
|
|
| testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
|
|
| @@ -471,12 +513,18 @@ class ScrollbarLayerTestResourceCreation : public testing::Test {
|
|
|
| TEST_F(ScrollbarLayerTestResourceCreation, ResourceUpload) {
|
| layer_tree_settings_.solid_color_scrollbars = false;
|
| - TestResourceUpload(2);
|
| + TestResourceUpload(0, 0, 0, 0);
|
| + int num_updates[3] = {1, 5, 10};
|
| + for (int j = 0; j < 3; j++) {
|
| + TestResourceUpload(
|
| + num_updates[j], 2, num_updates[j] * 2, (num_updates[j] - 1) * 2);
|
| + }
|
| }
|
|
|
| TEST_F(ScrollbarLayerTestResourceCreation, SolidColorNoResourceUpload) {
|
| layer_tree_settings_.solid_color_scrollbars = true;
|
| - TestResourceUpload(0);
|
| + TestResourceUpload(0, 0, 0, 0);
|
| + TestResourceUpload(1, 0, 0, 0);
|
| }
|
|
|
| class ScaledScrollbarLayerTestResourceCreation : public testing::Test {
|
| @@ -484,25 +532,20 @@ class ScaledScrollbarLayerTestResourceCreation : public testing::Test {
|
| ScaledScrollbarLayerTestResourceCreation()
|
| : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
|
|
|
| - void TestResourceUpload(size_t expected_resources, const float test_scale) {
|
| + void TestResourceUpload(const float test_scale) {
|
| layer_tree_host_.reset(
|
| new MockLayerTreeHost(&fake_client_, layer_tree_settings_));
|
|
|
| gfx::Point scrollbar_location(0, 185);
|
| - scoped_ptr<FakeScrollbar> scrollbar(new FakeScrollbar(false, true, false));
|
| - scrollbar->set_location(scrollbar_location);
|
| -
|
| scoped_refptr<Layer> layer_tree_root = Layer::Create();
|
| scoped_refptr<Layer> content_layer = Layer::Create();
|
| - scoped_refptr<Layer> scrollbar_layer =
|
| - ScrollbarLayer::Create(scrollbar.PassAs<cc::Scrollbar>(),
|
| - layer_tree_root->id());
|
| + scoped_refptr<FakeScrollbarLayer> scrollbar_layer =
|
| + FakeScrollbarLayer::Create(false, true, layer_tree_root->id());
|
| +
|
| layer_tree_root->AddChild(content_layer);
|
| layer_tree_root->AddChild(scrollbar_layer);
|
|
|
| layer_tree_host_->InitializeOutputSurfaceIfNeeded();
|
| - layer_tree_host_->contents_texture_manager()->
|
| - SetMaxMemoryLimitBytes(1024 * 1024);
|
| layer_tree_host_->SetRootLayer(layer_tree_root);
|
|
|
| scrollbar_layer->SetIsDrawable(true);
|
| @@ -529,30 +572,23 @@ class ScaledScrollbarLayerTestResourceCreation : public testing::Test {
|
| testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get());
|
|
|
| - PriorityCalculator calculator;
|
| ResourceUpdateQueue queue;
|
| OcclusionTracker occlusion_tracker(gfx::Rect(), false);
|
| -
|
| scrollbar_layer->SavePaintProperties();
|
| - scrollbar_layer->SetTexturePriorities(calculator);
|
| - layer_tree_host_->contents_texture_manager()->PrioritizeTextures();
|
| scrollbar_layer->Update(&queue, &occlusion_tracker);
|
| - EXPECT_EQ(expected_resources, queue.PartialUploadSize());
|
|
|
| // Verify that we have not generated any content uploads that are larger
|
| // than their destination textures.
|
| - while (queue.HasMoreUpdates()) {
|
| - ResourceUpdate update = queue.TakeFirstPartialUpload();
|
| - EXPECT_LE(update.texture->size().width(),
|
| - scrollbar_layer->content_bounds().width());
|
| - EXPECT_LE(update.texture->size().height(),
|
| - scrollbar_layer->content_bounds().height());
|
| -
|
| - EXPECT_LE(update.dest_offset.x() + update.content_rect.width(),
|
| - update.texture->size().width());
|
| - EXPECT_LE(update.dest_offset.y() + update.content_rect.height(),
|
| - update.texture->size().height());
|
| - }
|
| +
|
| + gfx::Size track_size = layer_tree_host_->ui_resource_size(
|
| + scrollbar_layer->track_resource_id());
|
| + gfx::Size thumb_size = layer_tree_host_->ui_resource_size(
|
| + scrollbar_layer->thumb_resource_id());
|
| +
|
| + EXPECT_LE(track_size.width(), scrollbar_layer->content_bounds().width());
|
| + EXPECT_LE(track_size.height(), scrollbar_layer->content_bounds().height());
|
| + EXPECT_LE(thumb_size.width(), scrollbar_layer->content_bounds().width());
|
| + EXPECT_LE(thumb_size.height(), scrollbar_layer->content_bounds().height());
|
|
|
| testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
|
|
| @@ -569,7 +605,9 @@ TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) {
|
| layer_tree_settings_.solid_color_scrollbars = false;
|
| // Pick a test scale that moves the scrollbar's (non-zero) position to
|
| // a non-pixel-aligned location.
|
| - TestResourceUpload(2, 1.41f);
|
| + TestResourceUpload(.041f);
|
| + TestResourceUpload(1.41f);
|
| + TestResourceUpload(4.1f);
|
| }
|
|
|
| } // namespace
|
|
|