clear_for_opaque_raster_unittest.cc 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "cc/paint/clear_for_opaque_raster.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. #include "ui/gfx/geometry/rect.h"
  7. #include "ui/gfx/geometry/size_f.h"
  8. #include "ui/gfx/geometry/vector2d_f.h"
  9. namespace cc {
  10. TEST(ClearForOpaqueRasterTest, NoTransform) {
  11. const gfx::Vector2dF translation;
  12. const gfx::Vector2dF scale(1, 1);
  13. const gfx::Size content_size(100, 100);
  14. const gfx::Rect bitmap_rect(content_size);
  15. gfx::Rect inner_rect;
  16. gfx::Rect outer_rect;
  17. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  18. translation, scale, content_size, bitmap_rect, bitmap_rect, outer_rect,
  19. inner_rect));
  20. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  21. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 25, 50, 50),
  22. outer_rect, inner_rect));
  23. }
  24. TEST(ClearForOpaqueRasterTest, WithTranslation) {
  25. const gfx::Vector2dF translation(0.3f, 0.7f);
  26. const gfx::Vector2dF scale(1, 1);
  27. const gfx::Size content_size(100, 100);
  28. const gfx::Rect bitmap_rect(content_size);
  29. gfx::Rect inner_rect;
  30. gfx::Rect outer_rect;
  31. // Full playback (touching all edges).
  32. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  33. translation, scale, content_size, bitmap_rect, bitmap_rect, outer_rect,
  34. inner_rect));
  35. EXPECT_EQ(gfx::Rect(0, 0, 100, 100), outer_rect);
  36. EXPECT_EQ(gfx::Rect(1, 1, 99, 99), inner_rect);
  37. // Touches the left edge only.
  38. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  39. translation, scale, content_size, bitmap_rect, gfx::Rect(0, 25, 50, 50),
  40. outer_rect, inner_rect));
  41. EXPECT_EQ(gfx::Rect(0, 25, 50, 50), outer_rect);
  42. EXPECT_EQ(gfx::Rect(1, 25, 49, 50), inner_rect);
  43. // Touches the top edge only.
  44. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  45. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 0, 50, 50),
  46. outer_rect, inner_rect));
  47. EXPECT_EQ(gfx::Rect(25, 0, 50, 50), outer_rect);
  48. EXPECT_EQ(gfx::Rect(25, 1, 50, 49), inner_rect);
  49. // Touches the right edge only.
  50. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  51. translation, scale, content_size, bitmap_rect, gfx::Rect(50, 25, 50, 50),
  52. outer_rect, inner_rect));
  53. // Touches the bottom edge only.
  54. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  55. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 50, 50, 50),
  56. outer_rect, inner_rect));
  57. // Touches no edges.
  58. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  59. translation, scale, content_size, bitmap_rect, gfx::Rect(1, 1, 98, 98),
  60. outer_rect, inner_rect));
  61. }
  62. TEST(ClearForOpaqueRasterTest, WithScale) {
  63. const gfx::Vector2dF translation;
  64. const gfx::Vector2dF scale(1.5f, 1.5f);
  65. const gfx::Size content_size(100, 100);
  66. const gfx::Rect bitmap_rect(content_size);
  67. gfx::Rect inner_rect;
  68. gfx::Rect outer_rect;
  69. // Full playback (touching all edges).
  70. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  71. translation, scale, content_size, bitmap_rect, bitmap_rect, outer_rect,
  72. inner_rect));
  73. EXPECT_EQ(gfx::Rect(0, 0, 101, 101), outer_rect);
  74. EXPECT_EQ(gfx::Rect(0, 0, 99, 99), inner_rect);
  75. // Touches the left edge only.
  76. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  77. translation, scale, content_size, bitmap_rect, gfx::Rect(0, 25, 50, 50),
  78. outer_rect, inner_rect));
  79. // Touches the top edge only.
  80. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  81. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 0, 50, 50),
  82. outer_rect, inner_rect));
  83. // Touches the right edge only.
  84. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  85. translation, scale, content_size, bitmap_rect, gfx::Rect(50, 25, 50, 50),
  86. outer_rect, inner_rect));
  87. EXPECT_EQ(gfx::Rect(50, 25, 51, 50), outer_rect);
  88. EXPECT_EQ(gfx::Rect(50, 25, 49, 50), inner_rect);
  89. // Touches the bottom edge only.
  90. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  91. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 50, 50, 50),
  92. outer_rect, inner_rect));
  93. EXPECT_EQ(gfx::Rect(25, 50, 50, 51), outer_rect);
  94. EXPECT_EQ(gfx::Rect(25, 50, 50, 49), inner_rect);
  95. // Touches no edges.
  96. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  97. translation, scale, content_size, bitmap_rect, gfx::Rect(1, 1, 98, 98),
  98. outer_rect, inner_rect));
  99. }
  100. TEST(ClearForOpaqueRasterTest, WithTranslationAndScale) {
  101. const gfx::Vector2dF translation(0.3f, 0.7f);
  102. const gfx::Vector2dF scale(1.5f, 1.5f);
  103. const gfx::Size content_size(100, 100);
  104. const gfx::Rect bitmap_rect(content_size);
  105. gfx::Rect inner_rect;
  106. gfx::Rect outer_rect;
  107. // Full playback (touching all edges).
  108. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  109. translation, scale, content_size, bitmap_rect, bitmap_rect, outer_rect,
  110. inner_rect));
  111. EXPECT_EQ(gfx::Rect(0, 0, 101, 101), outer_rect);
  112. EXPECT_EQ(gfx::Rect(1, 1, 98, 98), inner_rect);
  113. // Touches the left edge only.
  114. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  115. translation, scale, content_size, bitmap_rect, gfx::Rect(0, 25, 50, 50),
  116. outer_rect, inner_rect));
  117. EXPECT_EQ(gfx::Rect(0, 25, 50, 50), outer_rect);
  118. EXPECT_EQ(gfx::Rect(1, 25, 49, 50), inner_rect);
  119. // Touches the top edge only.
  120. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  121. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 0, 50, 50),
  122. outer_rect, inner_rect));
  123. EXPECT_EQ(gfx::Rect(25, 0, 50, 50), outer_rect);
  124. EXPECT_EQ(gfx::Rect(25, 1, 50, 49), inner_rect);
  125. // Touches the right edge only.
  126. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  127. translation, scale, content_size, bitmap_rect, gfx::Rect(50, 25, 50, 50),
  128. outer_rect, inner_rect));
  129. EXPECT_EQ(gfx::Rect(50, 25, 51, 50), outer_rect);
  130. EXPECT_EQ(gfx::Rect(50, 25, 49, 50), inner_rect);
  131. // Touches the bottom edge only.
  132. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  133. translation, scale, content_size, bitmap_rect, gfx::Rect(25, 50, 50, 50),
  134. outer_rect, inner_rect));
  135. EXPECT_EQ(gfx::Rect(25, 50, 50, 51), outer_rect);
  136. EXPECT_EQ(gfx::Rect(25, 50, 50, 49), inner_rect);
  137. // Touches no edges.
  138. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  139. translation, scale, content_size, bitmap_rect, gfx::Rect(1, 1, 98, 98),
  140. outer_rect, inner_rect));
  141. // With bitmap_rect non-zero offset.
  142. EXPECT_TRUE(CalculateClearForOpaqueRasterRects(
  143. translation, scale, content_size, gfx::Rect(25, 25, 75, 75),
  144. gfx::Rect(50, 50, 50, 50), outer_rect, inner_rect));
  145. EXPECT_EQ(gfx::Rect(25, 25, 51, 51), outer_rect);
  146. EXPECT_EQ(gfx::Rect(25, 25, 49, 49), inner_rect);
  147. }
  148. TEST(ClearForOpaqueRasterTest, PlaybackRectBelowContentRect) {
  149. const gfx::Vector2dF translation(0.0f, 0.1f);
  150. const gfx::Vector2dF scale(1.0f, 1.0f);
  151. const gfx::Size content_size(100, 100);
  152. const gfx::Rect bitmap_rect(50, 50, 100, 100);
  153. const gfx::Rect playback_rect(50, 100, 100, 3);
  154. gfx::Rect inner_rect;
  155. gfx::Rect outer_rect;
  156. EXPECT_FALSE(CalculateClearForOpaqueRasterRects(
  157. translation, scale, content_size, bitmap_rect, playback_rect, outer_rect,
  158. inner_rect));
  159. }
  160. } // namespace cc