From 741fba42846459cbecdeb933f98e74bffdc0e306 Mon Sep 17 00:00:00 2001 From: "powei@chromium.org" Date: Fri, 20 Sep 2013 03:34:14 +0000 Subject: Update the nine patch layer to use UI resources The old nine-patch layer used priority resource manager for requesting textures. This patch updates the nine-patch layer to use the UI resource manager. this patch clarifies the semantics of the aperture in both image and layer The new semantics corresponds to existing logic on the android-side. Changes have been made to UIResourceBitmap to use SkPixelRef as ref-counted of the bitmap content. The android-side changes: https://gerrit-int.chromium.org/#/c/43103/ [Update 8/13/2013] Reverted due to "regression" ( https://code.google.com/p/chromium/issues/detail?id=290215 ): https://codereview.chromium.org/23620047/ [Update 8/13/2013] Reverted due to failed mac_gpu bot: https://codereview.chromium.org/23740010/ BUG=276482,276487,290215 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=222732 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=223162 Review URL: https://chromiumcodereview.appspot.com/22870016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224270 0039d316-1c4b-4281-b951-d872f2087c98 --- cc/layers/nine_patch_layer_unittest.cc | 104 +++++++++++++-------------------- 1 file changed, 41 insertions(+), 63 deletions(-) (limited to 'cc/layers/nine_patch_layer_unittest.cc') diff --git a/cc/layers/nine_patch_layer_unittest.cc b/cc/layers/nine_patch_layer_unittest.cc index 2e18808..101146c 100644 --- a/cc/layers/nine_patch_layer_unittest.cc +++ b/cc/layers/nine_patch_layer_unittest.cc @@ -8,6 +8,7 @@ #include "cc/resources/prioritized_resource_manager.h" #include "cc/resources/resource_provider.h" #include "cc/resources/resource_update_queue.h" +#include "cc/resources/scoped_ui_resource.h" #include "cc/scheduler/texture_uploader.h" #include "cc/test/fake_layer_tree_host_client.h" #include "cc/test/fake_output_surface.h" @@ -55,7 +56,7 @@ class NinePatchLayerTest : public testing::Test { FakeLayerTreeHostClient fake_client_; }; -TEST_F(NinePatchLayerTest, TriggerFullUploadOnceWhenChangingBitmap) { +TEST_F(NinePatchLayerTest, SetBitmap) { scoped_refptr test_layer = NinePatchLayer::Create(); ASSERT_TRUE(test_layer.get()); test_layer->SetIsDrawable(true); @@ -67,83 +68,60 @@ TEST_F(NinePatchLayerTest, TriggerFullUploadOnceWhenChangingBitmap) { layer_tree_host_->InitializeOutputSurfaceIfNeeded(); - PriorityCalculator calculator; ResourceUpdateQueue queue; OcclusionTracker occlusion_tracker(gfx::Rect(), false); - - // No bitmap set should not trigger any uploads. test_layer->SavePaintProperties(); - test_layer->SetTexturePriorities(calculator); test_layer->Update(&queue, &occlusion_tracker); - EXPECT_EQ(0u, queue.FullUploadSize()); - EXPECT_EQ(0u, queue.PartialUploadSize()); - // Setting a bitmap set should trigger a single full upload. + EXPECT_FALSE(test_layer->DrawsContent()); + SkBitmap bitmap; bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); bitmap.allocPixels(); - test_layer->SetBitmap(bitmap, gfx::Rect(5, 5, 1, 1)); - test_layer->SavePaintProperties(); - test_layer->SetTexturePriorities(calculator); + bitmap.setImmutable(); + + gfx::Rect aperture(5, 5, 1, 1); + bool fill_center = false; + test_layer->SetBitmap(bitmap, aperture); + test_layer->SetFillCenter(fill_center); test_layer->Update(&queue, &occlusion_tracker); - EXPECT_EQ(1u, queue.FullUploadSize()); - EXPECT_EQ(0u, queue.PartialUploadSize()); - ResourceUpdate params = queue.TakeFirstFullUpload(); - EXPECT_TRUE(params.texture != NULL); - - // Upload the texture. - layer_tree_host_->contents_texture_manager()->SetMaxMemoryLimitBytes( - 1024 * 1024); - layer_tree_host_->contents_texture_manager()->PrioritizeTextures(); - - FakeOutputSurfaceClient output_surface_client; - scoped_ptr output_surface; - scoped_ptr resource_provider; - { - DebugScopedSetImplThread impl_thread(Proxy()); - DebugScopedSetMainThreadBlocked main_thread_blocked(Proxy()); - output_surface = FakeOutputSurface::Create3d(); - CHECK(output_surface->BindToClient(&output_surface_client)); - resource_provider = - ResourceProvider::Create(output_surface.get(), 0, false); - params.texture->AcquireBackingTexture(resource_provider.get()); - ASSERT_TRUE(params.texture->have_backing_texture()); - } - // Nothing changed, so no repeated upload. + EXPECT_TRUE(test_layer->DrawsContent()); +} + +TEST_F(NinePatchLayerTest, SetUIResourceId) { + scoped_refptr test_layer = NinePatchLayer::Create(); + ASSERT_TRUE(test_layer.get()); + test_layer->SetIsDrawable(true); + test_layer->SetBounds(gfx::Size(100, 100)); + + layer_tree_host_->SetRootLayer(test_layer); + Mock::VerifyAndClearExpectations(layer_tree_host_.get()); + EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); + + layer_tree_host_->InitializeOutputSurfaceIfNeeded(); + + ResourceUpdateQueue queue; + OcclusionTracker occlusion_tracker(gfx::Rect(), false); test_layer->SavePaintProperties(); - test_layer->SetTexturePriorities(calculator); test_layer->Update(&queue, &occlusion_tracker); - EXPECT_EQ(0u, queue.FullUploadSize()); - EXPECT_EQ(0u, queue.PartialUploadSize()); - { - DebugScopedSetImplThread impl_thread(Proxy()); - DebugScopedSetMainThreadBlocked main_thread_blocked(Proxy()); - layer_tree_host_->contents_texture_manager()->ClearAllMemory( - resource_provider.get()); - } - // Reupload after eviction - test_layer->SavePaintProperties(); - test_layer->SetTexturePriorities(calculator); + EXPECT_FALSE(test_layer->DrawsContent()); + + SkBitmap bitmap; + bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); + bitmap.allocPixels(); + bitmap.setImmutable(); + + scoped_ptr resource = ScopedUIResource::Create( + layer_tree_host_.get(), UIResourceBitmap(bitmap)); + gfx::Rect aperture(5, 5, 1, 1); + bool fill_center = true; + test_layer->SetUIResourceId(resource->id(), aperture); + test_layer->SetFillCenter(fill_center); test_layer->Update(&queue, &occlusion_tracker); - EXPECT_EQ(1u, queue.FullUploadSize()); - EXPECT_EQ(0u, queue.PartialUploadSize()); - // PrioritizedResourceManager clearing - layer_tree_host_->contents_texture_manager()->UnregisterTexture( - params.texture); - EXPECT_EQ(NULL, params.texture->resource_manager()); - test_layer->SavePaintProperties(); - test_layer->SetTexturePriorities(calculator); - ResourceUpdateQueue queue2; - test_layer->Update(&queue2, &occlusion_tracker); - EXPECT_EQ(1u, queue2.FullUploadSize()); - EXPECT_EQ(0u, queue2.PartialUploadSize()); - params = queue2.TakeFirstFullUpload(); - EXPECT_TRUE(params.texture != NULL); - EXPECT_EQ(params.texture->resource_manager(), - layer_tree_host_->contents_texture_manager()); + EXPECT_TRUE(test_layer->DrawsContent()); } } // namespace -- cgit v1.1