xref: /aosp_15_r20/external/intel-media-driver/media_softlet/agnostic/common/os/mos_cache_manager.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /* Copyright (c) 2024, Intel Corporation
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a
4 * copy of this software and associated documentation files (the "Software"),
5 * to deal in the Software without restriction, including without limitation
6 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 * and/or sell copies of the Software, and to permit persons to whom the
8 * Software is furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included
11 * in all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19 * OTHER DEALINGS IN THE SOFTWARE.
20 */
21 //!
22 //! \file     mos_cache_manager.cpp
23 //! \brief    Defines the common classes for cache management
24 //!           this file is for the base interface which is shared by all features.
25 //!
26 
27 #include "mos_cache_manager.h"
28 #include "media_class_trace.h"
29 #include "mos_util_debug.h"
30 
31 class MosCacheManager
32 {
33 public:
34     MosCacheManager();
35     virtual ~MosCacheManager();
36 
37     static bool GetCacheSetting(MOS_COMPONENT id, uint32_t feature, bool bOut, ENGINE_TYPE engineType, MOS_CACHE_ELEMENT &element, bool isHeapSurf);
38 
Register(CACHE_COMPONENTS id,std::map<uint64_t,MOS_CACHE_ELEMENT> * cacheTablesPtr)39     static bool Register(CACHE_COMPONENTS id, std::map<uint64_t, MOS_CACHE_ELEMENT> *cacheTablesPtr)
40     {
41         if (GetInst().m_dataSet[id] == nullptr)
42         {
43             GetInst().m_dataSet[id] = cacheTablesPtr;
44         }
45         return true;
46     }
47 
48 private:
GetInst()49     static MosCacheManager &GetInst()
50     {
51         static MosCacheManager inst;
52         return inst;
53     }
54 
55     std::map<uint64_t, MOS_CACHE_ELEMENT> *m_dataSet[MAX_CACHE_COMPONENTS] = {};
56 
57     MEDIA_CLASS_DEFINE_END(MosCacheManager)
58 };
59 
MosCacheManager()60 MosCacheManager::MosCacheManager()
61 {
62 }
63 
~MosCacheManager()64 MosCacheManager::~MosCacheManager()
65 {
66 }
67 
GetCacheSetting(MOS_COMPONENT id,uint32_t feature,bool bOut,ENGINE_TYPE engineType,MOS_CACHE_ELEMENT & element,bool isHeapSurf)68 bool MosCacheManager::GetCacheSetting(MOS_COMPONENT id, uint32_t feature, bool bOut, ENGINE_TYPE engineType, MOS_CACHE_ELEMENT &element, bool isHeapSurf)
69 {
70     auto &inst = GetInst();
71     uint64_t usage = MOS_CACHE_OBJECT(id, feature, isHeapSurf, bOut, engineType).value;
72     for (int i = 0; i < MAX_CACHE_COMPONENTS; i++)
73     {
74         if (inst.m_dataSet[i])
75         {
76             std::map<uint64_t, MOS_CACHE_ELEMENT> *cacheMap = static_cast<std::map<uint64_t, MOS_CACHE_ELEMENT> *>(GetInst().m_dataSet[i]);
77             auto                        it       = cacheMap->find(usage);
78             if (it != cacheMap->end())
79             {
80                 element = it->second;
81                 return true;
82             }
83         }
84     }
85     MOS_OS_ASSERTMESSAGE("Cache Element was not found for component %d, feature %d, bOut %d, engineType %d, isHeapSurf %d!", id, feature, bOut, engineType, isHeapSurf);
86     return false;
87 }
88 
RegisterCacheSettings(CACHE_COMPONENTS id,std::map<uint64_t,MOS_CACHE_ELEMENT> * cacheTablesPtr)89 bool RegisterCacheSettings(CACHE_COMPONENTS id, std::map<uint64_t, MOS_CACHE_ELEMENT> *cacheTablesPtr)
90 {
91     return MosCacheManager::Register(id, cacheTablesPtr);
92 }
93 
LoadCacheSettings(MOS_COMPONENT id,uint32_t feature,bool bOut,ENGINE_TYPE engineType,MOS_CACHE_ELEMENT & element,bool isHeapSurf)94 bool LoadCacheSettings(MOS_COMPONENT id, uint32_t feature, bool bOut, ENGINE_TYPE engineType, MOS_CACHE_ELEMENT &element, bool isHeapSurf)
95 {
96     return MosCacheManager::GetCacheSetting(id, feature, bOut, engineType, element, isHeapSurf);
97 }