filesystem: Cache RegisteredCacheUnion instead of constructing on demand
Prevents unnecessary re-reads of the metadata and unnecessary temporary objects.
This commit is contained in:
		| @@ -319,11 +319,18 @@ ResultVal<FileSys::VirtualDir> OpenSDMC() { | ||||
|     return sdmc_factory->Open(); | ||||
| } | ||||
|  | ||||
| std::unique_ptr<FileSys::RegisteredCacheUnion> GetUnionContents() { | ||||
|     return std::make_unique<FileSys::RegisteredCacheUnion>(std::vector<FileSys::RegisteredCache*>{ | ||||
| std::shared_ptr<FileSys::RegisteredCacheUnion> registered_cache_union; | ||||
|  | ||||
| std::shared_ptr<FileSys::RegisteredCacheUnion> GetUnionContents() { | ||||
|     if (registered_cache_union == nullptr) { | ||||
|         registered_cache_union = | ||||
|             std::make_shared<FileSys::RegisteredCacheUnion>(std::vector<FileSys::RegisteredCache*>{ | ||||
|                 GetSystemNANDContents(), GetUserNANDContents(), GetSDMCContents()}); | ||||
|     } | ||||
|  | ||||
|     return registered_cache_union; | ||||
| } | ||||
|  | ||||
| FileSys::RegisteredCache* GetSystemNANDContents() { | ||||
|     LOG_TRACE(Service_FS, "Opening System NAND Contents"); | ||||
|  | ||||
|   | ||||
| @@ -47,7 +47,7 @@ ResultVal<FileSys::VirtualDir> OpenSaveData(FileSys::SaveDataSpaceId space, | ||||
|                                             FileSys::SaveDataDescriptor save_struct); | ||||
| ResultVal<FileSys::VirtualDir> OpenSDMC(); | ||||
|  | ||||
| std::unique_ptr<FileSys::RegisteredCacheUnion> GetUnionContents(); | ||||
| std::shared_ptr<FileSys::RegisteredCacheUnion> GetUnionContents(); | ||||
|  | ||||
| FileSys::RegisteredCache* GetSystemNANDContents(); | ||||
| FileSys::RegisteredCache* GetUserNANDContents(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zach Hilman
					Zach Hilman