From 6c7cc9b637ef77a606d27f62aa5cc7f19550962b Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Mon, 30 Sep 2013 22:43:44 +0200 Subject: clear cache of old files when opencl source changes Change-Id: I67bc06f80c284c85d2bb409380ba3a43611ec31c --- sc/source/core/opencl/openclwrapper.cxx | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 6fa86cc7e6d6..b15dc736b948 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -92,6 +92,36 @@ OString getCacheFolder() return rtl::OUStringToOString(url, RTL_TEXTENCODING_UTF8); } +void clearCache() +{ + OUString aCacheDirURL(rtl::OStringToOUString(OpenclDevice::maCacheFolder, RTL_TEXTENCODING_UTF8)); + osl::Directory aCacheDir(aCacheDirURL); + osl::FileBase::RC status = aCacheDir.open(); + if(status != osl::FileBase::E_None) + return; + + osl::DirectoryItem aItem; + OUString aSourceString = rtl::OStringToOUString(OpenclDevice::maSourceHash + ".bin", RTL_TEXTENCODING_UTF8); + while(osl::FileBase::E_None == aCacheDir.getNextItem(aItem)) + { + osl::FileStatus aFileStatus(osl_FileStatus_Mask_FileName|osl_FileStatus_Mask_FileURL); + status = aItem.getFileStatus(aFileStatus); + if(status != osl::FileBase::E_None) + continue; + + OUString aFileName = aFileStatus.getFileName(); + if(aFileName.endsWith(".bin")) + { + if(!aFileName.endsWith(aSourceString)) + { + // delete the file + OUString aFileUrl = aFileStatus.getFileURL(); + osl::File::remove(aFileUrl); + } + } + } +} + } OString OpenclDevice::maSourceHash = generateHashForSource(); @@ -259,6 +289,7 @@ std::vector > OpenclDevice::binaryGenerated( const int OpenclDevice::writeBinaryToFile( const OString& rFileName, const char* binary, size_t numBytes ) { + clearCache(); osl::File file(rtl::OStringToOUString(rFileName, RTL_TEXTENCODING_UTF8)); osl::FileBase::RC status = file.open( osl_File_OpenFlag_Write | osl_File_OpenFlag_Create ); -- cgit