[go: nahoru, domu]

blob: a949ad77283d50066cd1be4b1a9aec8d5f419638 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cc/paint/paint_cache.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
namespace {
constexpr size_t kDefaultBudget = 1024u;
SkPath CreatePath() {
SkPath path;
path.addCircle(2, 2, 5);
return path;
}
class PaintCacheTest : public ::testing::TestWithParam<uint32_t> {
public:
PaintCacheDataType GetType() {
return static_cast<PaintCacheDataType>(GetParam());
}
};
TEST_P(PaintCacheTest, ClientBasic) {
ClientPaintCache client_cache(kDefaultBudget);
EXPECT_FALSE(client_cache.Get(GetType(), 1u));
client_cache.Put(GetType(), 1u, 1u);
EXPECT_TRUE(client_cache.Get(GetType(), 1u));
}
TEST_P(PaintCacheTest, ClientPurgeForBudgeting) {
ClientPaintCache client_cache(kDefaultBudget);
client_cache.Put(GetType(), 1u, kDefaultBudget - 100);
client_cache.Put(GetType(), 2u, kDefaultBudget);
client_cache.Put(GetType(), 3u, kDefaultBudget);
EXPECT_EQ(client_cache.bytes_used(), 3 * kDefaultBudget - 100);
client_cache.FinalizePendingEntries();
ClientPaintCache::PurgedData purged_data;
client_cache.Purge(&purged_data);
EXPECT_EQ(client_cache.bytes_used(), kDefaultBudget);
const auto& ids = purged_data[static_cast<uint32_t>(GetType())];
ASSERT_EQ(ids.size(), 2u);
EXPECT_EQ(ids[0], 1u);
EXPECT_EQ(ids[1], 2u);
EXPECT_FALSE(client_cache.Get(GetType(), 1u));
EXPECT_FALSE(client_cache.Get(GetType(), 2u));
EXPECT_TRUE(client_cache.Get(GetType(), 3u));
}
TEST_P(PaintCacheTest, ClientPurgeAll) {
ClientPaintCache client_cache(kDefaultBudget);
client_cache.Put(GetType(), 1u, 1u);
EXPECT_EQ(client_cache.bytes_used(), 1u);
client_cache.FinalizePendingEntries();
EXPECT_TRUE(client_cache.PurgeAll());
EXPECT_EQ(client_cache.bytes_used(), 0u);
EXPECT_FALSE(client_cache.PurgeAll());
}
TEST_P(PaintCacheTest, CommitPendingEntries) {
ClientPaintCache client_cache(kDefaultBudget);
client_cache.Put(GetType(), 1u, 1u);
EXPECT_TRUE(client_cache.Get(GetType(), 1u));
client_cache.AbortPendingEntries();
EXPECT_FALSE(client_cache.Get(GetType(), 1u));
client_cache.Put(GetType(), 1u, 1u);
client_cache.FinalizePendingEntries();
EXPECT_TRUE(client_cache.Get(GetType(), 1u));
}
TEST_P(PaintCacheTest, ServiceBasic) {
ServicePaintCache service_cache;
switch (GetType()) {
case PaintCacheDataType::kPath: {
auto path = CreatePath();
auto id = path.getGenerationID();
SkPath cached_path;
EXPECT_EQ(false, service_cache.GetPath(id, &cached_path));
service_cache.PutPath(id, path);
EXPECT_EQ(true, service_cache.GetPath(id, &cached_path));
EXPECT_EQ(path, cached_path);
service_cache.Purge(GetType(), 1, &id);
EXPECT_EQ(false, service_cache.GetPath(id, &cached_path));
service_cache.PutPath(id, path);
} break;
}
EXPECT_FALSE(service_cache.empty());
service_cache.PurgeAll();
EXPECT_TRUE(service_cache.empty());
}
INSTANTIATE_TEST_SUITE_P(
P,
PaintCacheTest,
::testing::Values(static_cast<uint32_t>(PaintCacheDataType::kPath)));
} // namespace
} // namespace cc