paint_cache_unittest.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2018 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/paint_cache.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. namespace cc {
  7. namespace {
  8. constexpr size_t kDefaultBudget = 1024u;
  9. SkPath CreatePath() {
  10. SkPath path;
  11. path.addCircle(2, 2, 5);
  12. return path;
  13. }
  14. class PaintCacheTest : public ::testing::TestWithParam<uint32_t> {
  15. public:
  16. PaintCacheDataType GetType() {
  17. return static_cast<PaintCacheDataType>(GetParam());
  18. }
  19. };
  20. TEST_P(PaintCacheTest, ClientBasic) {
  21. ClientPaintCache client_cache(kDefaultBudget);
  22. EXPECT_FALSE(client_cache.Get(GetType(), 1u));
  23. client_cache.Put(GetType(), 1u, 1u);
  24. EXPECT_TRUE(client_cache.Get(GetType(), 1u));
  25. }
  26. TEST_P(PaintCacheTest, ClientPurgeForBudgeting) {
  27. ClientPaintCache client_cache(kDefaultBudget);
  28. client_cache.Put(GetType(), 1u, kDefaultBudget - 100);
  29. client_cache.Put(GetType(), 2u, kDefaultBudget);
  30. client_cache.Put(GetType(), 3u, kDefaultBudget);
  31. EXPECT_EQ(client_cache.bytes_used(), 3 * kDefaultBudget - 100);
  32. client_cache.FinalizePendingEntries();
  33. ClientPaintCache::PurgedData purged_data;
  34. client_cache.Purge(&purged_data);
  35. EXPECT_EQ(client_cache.bytes_used(), kDefaultBudget);
  36. const auto& ids = purged_data[static_cast<uint32_t>(GetType())];
  37. ASSERT_EQ(ids.size(), 2u);
  38. EXPECT_EQ(ids[0], 1u);
  39. EXPECT_EQ(ids[1], 2u);
  40. EXPECT_FALSE(client_cache.Get(GetType(), 1u));
  41. EXPECT_FALSE(client_cache.Get(GetType(), 2u));
  42. EXPECT_TRUE(client_cache.Get(GetType(), 3u));
  43. }
  44. TEST_P(PaintCacheTest, ClientPurgeAll) {
  45. ClientPaintCache client_cache(kDefaultBudget);
  46. client_cache.Put(GetType(), 1u, 1u);
  47. EXPECT_EQ(client_cache.bytes_used(), 1u);
  48. client_cache.FinalizePendingEntries();
  49. EXPECT_TRUE(client_cache.PurgeAll());
  50. EXPECT_EQ(client_cache.bytes_used(), 0u);
  51. EXPECT_FALSE(client_cache.PurgeAll());
  52. }
  53. TEST_P(PaintCacheTest, CommitPendingEntries) {
  54. ClientPaintCache client_cache(kDefaultBudget);
  55. client_cache.Put(GetType(), 1u, 1u);
  56. EXPECT_TRUE(client_cache.Get(GetType(), 1u));
  57. client_cache.AbortPendingEntries();
  58. EXPECT_FALSE(client_cache.Get(GetType(), 1u));
  59. client_cache.Put(GetType(), 1u, 1u);
  60. client_cache.FinalizePendingEntries();
  61. EXPECT_TRUE(client_cache.Get(GetType(), 1u));
  62. }
  63. TEST_P(PaintCacheTest, ServiceBasic) {
  64. ServicePaintCache service_cache;
  65. switch (GetType()) {
  66. case PaintCacheDataType::kPath: {
  67. auto path = CreatePath();
  68. auto id = path.getGenerationID();
  69. SkPath cached_path;
  70. EXPECT_EQ(false, service_cache.GetPath(id, &cached_path));
  71. service_cache.PutPath(id, path);
  72. EXPECT_EQ(true, service_cache.GetPath(id, &cached_path));
  73. EXPECT_EQ(path, cached_path);
  74. service_cache.Purge(GetType(), 1, &id);
  75. EXPECT_EQ(false, service_cache.GetPath(id, &cached_path));
  76. service_cache.PutPath(id, path);
  77. } break;
  78. }
  79. EXPECT_FALSE(service_cache.empty());
  80. service_cache.PurgeAll();
  81. EXPECT_TRUE(service_cache.empty());
  82. }
  83. INSTANTIATE_TEST_SUITE_P(
  84. P,
  85. PaintCacheTest,
  86. ::testing::Values(static_cast<uint32_t>(PaintCacheDataType::kPath)));
  87. } // namespace
  88. } // namespace cc