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