#ifndef GPU_IPC_SERVICE_BUILT_IN_SHADER_CACHE_LOADER_H_
#define GPU_IPC_SERVICE_BUILT_IN_SHADER_CACHE_LOADER_H_
#include <memory>
#include <vector>
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
#include "base/synchronization/waitable_event.h"
#include "gpu/ipc/service/gpu_ipc_service_export.h"
namespace gpu {
class GPU_IPC_SERVICE_EXPORT BuiltInShaderCacheLoader {
public:
struct CacheEntry {
CacheEntry();
CacheEntry(CacheEntry&& other);
~CacheEntry();
std::vector<uint8_t> key;
std::vector<uint8_t> value;
};
static void StartLoading();
static std::unique_ptr<std::vector<CacheEntry>> TakeEntries();
private:
FRIEND_TEST_ALL_PREFIXES(BuiltInShaderCacheTest, Basic);
BuiltInShaderCacheLoader();
~BuiltInShaderCacheLoader();
void Load(const base::FilePath& path = base::FilePath());
void LoadImpl(const base::FilePath& path);
std::unique_ptr<std::vector<CacheEntry>> TakeEntriesImpl();
std::vector<BuiltInShaderCacheLoader::CacheEntry> entries_;
base::WaitableEvent loaded_signaler_;
};
}
#endif