Browse Source

speedup C dependency scanning even more

Scanning the dependencies for kdelibs/khtml/ (when all files are scanned) is
now down to 4.6 s from 6.3 s before this change (without the
headerLocationCache it takes about 14 s here).
It doesn't really make sense to include the complete include path as part
of the key for the map, since the include path will be the same for
all files in a project, so it doesn't add anything.

Alex
Alexander Neundorf 16 years ago
parent
commit
8a5ae4c15e
1 changed files with 7 additions and 23 deletions
  1. 7 23
      Source/cmDependsC.cxx

+ 7 - 23
Source/cmDependsC.cxx

@@ -149,10 +149,8 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
   std::set<cmStdString> dependencies;
   std::set<cmStdString> scanned;
 
-  // Use reserve to allocate enough memory for both strings,
+  // Use reserve to allocate enough memory for tempPathStr
   // so that during the loops no memory is allocated or freed
-  std::string cacheKey;
-  cacheKey.reserve(4*1024);
   std::string tempPathStr;
   tempPathStr.reserve(4*1024);
 
@@ -181,22 +179,8 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
       }
     else
       {
-      // With GCC distribution of STL, assigning to a string directly
-      // throws away the internal buffer of the left-hand-side.  We
-      // want to keep the pre-allocated buffer so we use C-style
-      // string assignment and then operator+=.  We could call
-      // .clear() instead of assigning to an empty string but the
-      // method does not exist on some older compilers.
-      cacheKey = "";
-      cacheKey += current.FileName;
-
-      for(std::vector<std::string>::const_iterator i = 
-            this->IncludePath.begin(); i != this->IncludePath.end(); ++i)
-        {
-        cacheKey+=*i;
-        }
       std::map<cmStdString, cmStdString>::iterator
-        headerLocationIt=this->HeaderLocationCache.find(cacheKey);
+        headerLocationIt=this->HeaderLocationCache.find(current.FileName);
       if (headerLocationIt!=this->HeaderLocationCache.end())
         {
         fullName=headerLocationIt->second;
@@ -214,16 +198,16 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
           }
         else
           {
-            tempPathStr += *i;
-            tempPathStr+="/";
-            tempPathStr+=current.FileName;
+          tempPathStr += *i;
+          tempPathStr+="/";
+          tempPathStr+=current.FileName;
           }
 
         // Look for the file in this location.
         if(cmSystemTools::FileExists(tempPathStr.c_str(), true))
           {
-            fullName = tempPathStr;
-            HeaderLocationCache[cacheKey]=fullName;
+          fullName = tempPathStr;
+          HeaderLocationCache[current.FileName]=fullName;
           break;
           }
         }