| Index: cc/nine_patch_layer_unittest.cc
|
| diff --git a/cc/nine_patch_layer_unittest.cc b/cc/nine_patch_layer_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..49757fe09998b285fd49b4b020b5951ef3bdee11
|
| --- /dev/null
|
| +++ b/cc/nine_patch_layer_unittest.cc
|
| @@ -0,0 +1,142 @@
|
| +// Copyright 2012 The Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "config.h"
|
| +
|
| +#include "cc/nine_patch_layer.h"
|
| +
|
| +#include "cc/layer_tree_host.h"
|
| +#include "cc/occlusion_tracker.h"
|
| +#include "cc/overdraw_metrics.h"
|
| +#include "cc/rendering_stats.h"
|
| +#include "cc/resource_provider.h"
|
| +#include "cc/single_thread_proxy.h"
|
| +#include "cc/resource_update_queue.h"
|
| +#include "cc/texture_uploader.h"
|
| +#include "cc/test/fake_graphics_context.h"
|
| +#include "cc/test/fake_layer_tree_host_client.h"
|
| +#include "cc/test/geometry_test_utils.h"
|
| +#include "cc/test/layer_tree_test_common.h"
|
| +#include "SkBitmap.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using namespace cc;
|
| +using ::testing::Mock;
|
| +using ::testing::_;
|
| +using ::testing::AtLeast;
|
| +using ::testing::AnyNumber;
|
| +
|
| +namespace {
|
| +
|
| +class MockLayerTreeHost : public LayerTreeHost {
|
| +public:
|
| + MockLayerTreeHost()
|
| + : LayerTreeHost(&m_fakeClient, LayerTreeSettings())
|
| + {
|
| + initialize();
|
| + }
|
| +
|
| +private:
|
| + FakeLayerImplTreeHostClient m_fakeClient;
|
| +};
|
| +
|
| +
|
| +class NinePatchLayerTest : public testing::Test {
|
| +public:
|
| + NinePatchLayerTest()
|
| + {
|
| + }
|
| +
|
| +protected:
|
| + virtual void SetUp()
|
| + {
|
| + m_layerTreeHost.reset(new MockLayerTreeHost);
|
| + }
|
| +
|
| + virtual void TearDown()
|
| + {
|
| + Mock::VerifyAndClearExpectations(m_layerTreeHost.get());
|
| + }
|
| +
|
| + scoped_ptr<MockLayerTreeHost> m_layerTreeHost;
|
| +};
|
| +
|
| +TEST_F(NinePatchLayerTest, triggerFullUploadOnceWhenChangingBitmap)
|
| +{
|
| + scoped_refptr<NinePatchLayer> testLayer = NinePatchLayer::create();
|
| + ASSERT_TRUE(testLayer);
|
| + testLayer->setIsDrawable(true);
|
| + testLayer->setBounds(gfx::Size(100, 100));
|
| +
|
| + m_layerTreeHost->setRootLayer(testLayer);
|
| + Mock::VerifyAndClearExpectations(m_layerTreeHost.get());
|
| + EXPECT_EQ(testLayer->layerTreeHost(), m_layerTreeHost.get());
|
| +
|
| + m_layerTreeHost->initializeRendererIfNeeded();
|
| +
|
| + PriorityCalculator calculator;
|
| + ResourceUpdateQueue queue;
|
| + OcclusionTracker occlusionTracker(gfx::Rect(), false);
|
| + RenderingStats stats;
|
| +
|
| + // No bitmap set should not trigger any uploads.
|
| + testLayer->setTexturePriorities(calculator);
|
| + testLayer->update(queue, &occlusionTracker, stats);
|
| + EXPECT_EQ(queue.fullUploadSize(), 0);
|
| + EXPECT_EQ(queue.partialUploadSize(), 0);
|
| +
|
| + // Setting a bitmap set should trigger a single full upload.
|
| + SkBitmap bitmap;
|
| + bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10);
|
| + bitmap.allocPixels();
|
| + testLayer->setBitmap(bitmap, gfx::Rect(5, 5, 1, 1));
|
| + testLayer->setTexturePriorities(calculator);
|
| + testLayer->update(queue, &occlusionTracker, stats);
|
| + EXPECT_EQ(queue.fullUploadSize(), 1);
|
| + EXPECT_EQ(queue.partialUploadSize(), 0);
|
| + ResourceUpdate params = queue.takeFirstFullUpload();
|
| + EXPECT_TRUE(params.texture != NULL);
|
| +
|
| + // Upload the texture.
|
| + m_layerTreeHost->contentsTextureManager()->setMaxMemoryLimitBytes(1024 * 1024);
|
| + m_layerTreeHost->contentsTextureManager()->prioritizeTextures();
|
| +
|
| + scoped_ptr<GraphicsContext> context;
|
| + scoped_ptr<ResourceProvider> resourceProvider;
|
| + {
|
| + DebugScopedSetImplThread implThread;
|
| + DebugScopedSetMainThreadBlocked mainThreadBlocked;
|
| + context = WebKit::createFakeGraphicsContext();
|
| + resourceProvider = ResourceProvider::create(context.get());
|
| + params.texture->acquireBackingTexture(resourceProvider.get());
|
| + ASSERT_TRUE(params.texture->haveBackingTexture());
|
| + }
|
| +
|
| + // Nothing changed, so no repeated upload.
|
| + testLayer->setTexturePriorities(calculator);
|
| + {
|
| + DebugScopedSetImplThread implThread;
|
| + testLayer->update(queue, &occlusionTracker, stats);
|
| + }
|
| + EXPECT_EQ(queue.fullUploadSize(), 0);
|
| + EXPECT_EQ(queue.partialUploadSize(), 0);
|
| +
|
| + {
|
| + DebugScopedSetImplThread implThread;
|
| + DebugScopedSetMainThreadBlocked mainThreadBlocked;
|
| + m_layerTreeHost->contentsTextureManager()->clearAllMemory(resourceProvider.get());
|
| + }
|
| +
|
| + // Reupload after eviction
|
| + testLayer->setTexturePriorities(calculator);
|
| + {
|
| + DebugScopedSetImplThread implThread;
|
| + testLayer->update(queue, &occlusionTracker, stats);
|
| + }
|
| + EXPECT_EQ(queue.fullUploadSize(), 1);
|
| + EXPECT_EQ(queue.partialUploadSize(), 0);
|
| +}
|
| +
|
| +} // anonymous namespace
|
|
|