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