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