xref: /aosp_15_r20/external/android-nn-driver/CacheDataHandler.hpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <HalInterfaces.h>
9 
10 #include <vector>
11 #include <unordered_map>
12 
13 #include <NeuralNetworks.h>
14 
15 namespace armnn_driver
16 {
17 
18 using HidlToken = android::hardware::hidl_array<uint8_t, ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN>;
19 
20 class CacheHandle
21 {
22 public:
CacheHandle(const HidlToken token,const size_t cacheSize)23     CacheHandle(const HidlToken token, const size_t cacheSize)
24     : m_HidlToken(token), m_CacheSize(cacheSize) {}
25 
~CacheHandle()26     ~CacheHandle() {};
27 
GetToken() const28     HidlToken GetToken() const
29     {
30         return m_HidlToken;
31     }
32 
GetCacheSize() const33     size_t GetCacheSize() const
34     {
35         return m_CacheSize;
36     }
37 
38 private:
39     const HidlToken m_HidlToken;
40     const size_t m_CacheSize;
41 };
42 
43 class CacheDataHandler
44 {
45 public:
CacheDataHandler()46     CacheDataHandler() {}
~CacheDataHandler()47     ~CacheDataHandler() {}
48 
49     void Register(const HidlToken token, const size_t hashValue, const size_t cacheSize);
50 
51     bool Validate(const HidlToken token, const size_t hashValue, const size_t cacheSize) const;
52 
53     size_t Hash(std::vector<uint8_t>& cacheData);
54 
55     size_t GetCacheSize(HidlToken token);
56 
57     void Clear();
58 
59 private:
60     CacheDataHandler(const CacheDataHandler&) = delete;
61     CacheDataHandler& operator=(const CacheDataHandler&) = delete;
62 
63     std::unordered_map<size_t, CacheHandle> m_CacheDataMap;
64 };
65 
66 CacheDataHandler& CacheDataHandlerInstance();
67 
68 } // armnn_driver
69