Index: cc/content_layer_unittest.cc |
diff --git a/cc/content_layer_unittest.cc b/cc/content_layer_unittest.cc |
index c7f32bec60fd0d7cf6726a59c3f7f9ac6db5b520..56b8d198e959a3e593a2b00ffc98518095d9504c 100644 |
--- a/cc/content_layer_unittest.cc |
+++ b/cc/content_layer_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "cc/bitmap_content_layer_updater.h" |
#include "cc/content_layer_client.h" |
#include "cc/rendering_stats.h" |
+#include "cc/resource_update_queue.h" |
#include "cc/test/geometry_test_utils.h" |
#include "skia/ext/platform_canvas.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -17,6 +18,25 @@ using namespace WebKit; |
namespace cc { |
namespace { |
+class FakeContentLayer : public ContentLayer { |
+public: |
+ explicit FakeContentLayer(ContentLayerClient* client) : ContentLayer(client) { } |
+ |
+ virtual void setNeedsDisplayRect(const gfx::RectF& dirtyRect) OVERRIDE |
+ { |
+ m_lastDirtyRect = dirtyRect; |
+ ContentLayer::setNeedsDisplayRect(dirtyRect); |
+ } |
+ gfx::RectF lastDirtyRect() const { return m_lastDirtyRect; } |
+ |
+protected: |
+ virtual ~FakeContentLayer() { } |
+ virtual void createUpdaterIfNeeded() OVERRIDE { } |
+ |
+private: |
+ gfx::RectF m_lastDirtyRect; |
+}; |
+ |
class MockContentLayerClient : public ContentLayerClient { |
public: |
explicit MockContentLayerClient(gfx::Rect opaqueLayerRect) |
@@ -49,5 +69,59 @@ TEST(ContentLayerTest, ContentLayerPainterWithDeviceScale) |
EXPECT_RECT_EQ(gfx::ToEnclosingRect(opaqueRectInContentSpace), resultingOpaqueRect); |
} |
+TEST(ContentLayerTest, UseLCDTextEnableCount) |
+{ |
+ scoped_refptr<FakeContentLayer> layer = new FakeContentLayer(NULL); |
+ layer->setBounds(gfx::Size(100, 100)); |
+ ResourceUpdateQueue queue; |
+ RenderingStats stats; |
+ |
+ // By default LCD text is disabled. |
+ EXPECT_FALSE(layer->useLCDText()); |
+ |
+ // LCD text can be enabled once. |
+ layer->drawProperties().can_use_lcd_text = true; |
+ layer->update(queue, NULL, stats); |
+ EXPECT_TRUE(layer->useLCDText()); |
+ |
+ // LCD text can always be disabled. |
+ layer->drawProperties().can_use_lcd_text = false; |
+ layer->update(queue, NULL, stats); |
+ EXPECT_FALSE(layer->useLCDText()); |
+ |
+ // LCD text cannot be enabled anymore. |
+ layer->drawProperties().can_use_lcd_text = true; |
+ layer->update(queue, NULL, stats); |
+ EXPECT_FALSE(layer->useLCDText()); |
+} |
+ |
+TEST(ContentLayerTest, UseLCDTextChangeTriggersRepaint) |
+{ |
+ scoped_refptr<FakeContentLayer> layer = new FakeContentLayer(NULL); |
+ layer->setBounds(gfx::Size(100, 100)); |
+ gfx::RectF dirtyRect(100, 100); |
+ ResourceUpdateQueue queue; |
+ RenderingStats stats; |
+ |
+ // By default LCD text is disabled. |
+ EXPECT_FALSE(layer->useLCDText()); |
+ |
+ // Enable LCD text and verify that it triggers invalidation. |
+ layer->drawProperties().can_use_lcd_text = true; |
+ layer->update(queue, NULL, stats); |
+ EXPECT_TRUE(layer->useLCDText()); |
+ EXPECT_EQ(dirtyRect, layer->lastDirtyRect()); |
+ |
+ // Reset dirty rect. |
+ layer->setNeedsDisplayRect(gfx::RectF()); |
+ EXPECT_EQ(gfx::RectF(), layer->lastDirtyRect()); |
+ |
+ // Disable LCD text and verify that it triggers invalidation. |
+ layer->drawProperties().can_use_lcd_text = false; |
+ layer->update(queue, NULL, stats); |
+ EXPECT_FALSE(layer->useLCDText()); |
+ EXPECT_EQ(dirtyRect, layer->lastDirtyRect()); |
+} |
+ |
} // namespace |
} // namespace cc |