// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/files/scoped_temp_dir.h"
#include "base/memory/ptr_util.h"
#include "base/test/metrics/histogram_tester.h"
#include "gpu/ipc/service/built_in_shader_cache_loader.h"
#include "gpu/ipc/service/built_in_shader_cache_writer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gpu {
TEST(BuiltInShaderCacheTest, Basic) {
const std::vector<uint8_t> kKey1{1, 2, 3, 4, 5};
const std::vector<uint8_t> kValue1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
const std::vector<uint8_t> kKey2{9, 101, 55};
std::vector<uint8_t> kValue2(257);
for (int i = 0; i < 257; ++i) {
kValue2[i] = static_cast<uint8_t>(i);
}
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
auto path = temp_dir.GetPath().AppendASCII("shaders");
{
BuiltInShaderCacheWriter writer(path);
writer.OnValueAddedToCache(kKey1, kValue1);
writer.OnValueAddedToCache(kKey2, kValue2);
}
{
base::HistogramTester histogram_tester;
BuiltInShaderCacheLoader loader;
loader.Load(path);
auto entries = loader.TakeEntriesImpl();
ASSERT_EQ(2u, entries->size());
EXPECT_EQ(kKey1, (*entries)[0].key);
EXPECT_EQ(kValue1, (*entries)[0].value);
EXPECT_EQ(kKey2, (*entries)[1].key);
EXPECT_EQ(kValue2, (*entries)[1].value);
}
}
} // namespace gpu