Prechádzať zdrojové kódy

ENH: Optimize performance by caching stat results

Andy Cedilnik 20 rokov pred
rodič
commit
a51dfefe79
2 zmenil súbory, kde vykonal 11 pridanie a 1 odobranie
  1. 4 1
      Source/cmake.cxx
  2. 7 0
      Source/cmake.h

+ 4 - 1
Source/cmake.cxx

@@ -21,6 +21,7 @@
 #include "cmLocalGenerator.h"
 #include "cmCommands.h"
 #include "cmCommand.h"
+#include "cmFileTimeComparison.h"
 
 #if defined(CMAKE_BUILD_WITH_CMAKE)
 # include "cmDependsFortran.h" // For -E cmake_copy_f90_mod callback.
@@ -95,6 +96,7 @@ cmake::cmake()
 {
   m_DebugTryCompile = false;
   m_ClearBuildSystem = false;
+  m_FileComparison = new cmFileTimeComparison;
   
 #ifdef __APPLE__
   struct rlimit rlp;
@@ -157,6 +159,7 @@ cmake::~cmake()
 #ifdef CMAKE_BUILD_WITH_CMAKE
   delete m_VariableWatch;
 #endif
+  delete m_FileComparison;
 }
 
 void cmake::CleanupCommandsAndMacros()
@@ -1739,7 +1742,7 @@ int cmake::CheckBuildSystem()
         out != outputs.end(); ++out)
       {
       int result = 0;
-      if(!cmSystemTools::FileTimeCompare(out->c_str(), dep->c_str(), &result) ||
+      if(!m_FileComparison->FileTimeCompare(out->c_str(), dep->c_str(), &result) ||
          result < 0)
         {
         return 1;

+ 7 - 0
Source/cmake.h

@@ -48,6 +48,7 @@ class cmCacheManager;
 class cmMakefile;
 class cmCommand;
 class cmVariableWatch;
+class cmFileTimeComparison;
 
 class cmake
 {
@@ -262,6 +263,11 @@ class cmake
    */
   int AddCMakePaths(const char *arg0);
 
+  /**
+   * Get the file comparison class
+   */
+  cmFileTimeComparison* GetFileComparison() { return m_FileComparison; }
+
 protected:
   typedef cmGlobalGenerator* (*CreateGeneratorFunctionType)();
   typedef std::map<cmStdString, CreateGeneratorFunctionType> RegisteredGeneratorsMap;
@@ -313,6 +319,7 @@ private:
   std::string m_CheckBuildSystem;
   bool m_ClearBuildSystem;
   bool m_DebugTryCompile;
+  cmFileTimeComparison* m_FileComparison;
   
   void UpdateConversionPathTable();
 };