]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Fix and simplify calculation of cache size change
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 16 Sep 2020 14:44:45 +0000 (16:44 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 17 Sep 2020 20:17:51 +0000 (22:17 +0200)
src/Result.cpp
src/Util.hpp
src/ccache.cpp
src/compress.cpp

index cbad746e1fa6828efea36074fd996c52a0a89829..7c1af27f62207bd2fb97d681dd92c6aaebf4778f 100644 (file)
@@ -408,11 +408,11 @@ Result::Writer::write_raw_file_entry(const std::string& path,
       "Failed to store {} as raw file {}: {}", path, raw_file, e.what());
   }
   const auto new_stat = Stat::stat(raw_file);
-  const auto size_delta =
-    (new_stat.size_on_disk() - old_stat.size_on_disk()) / 1024;
-  const auto files_delta = (new_stat ? 1 : 0) - (old_stat ? 1 : 0);
-  m_ctx.counter_updates.increment(Statistic::cache_size_kibibyte, size_delta);
-  m_ctx.counter_updates.increment(Statistic::files_in_cache, files_delta);
+  m_ctx.counter_updates.increment(
+    Statistic::cache_size_kibibyte,
+    Util::size_change_kibibyte(old_stat, new_stat));
+  m_ctx.counter_updates.increment(Statistic::files_in_cache,
+                                  (new_stat ? 1 : 0) - (old_stat ? 1 : 0));
 }
 
 } // namespace Result
index f694f3f1a7e16310db6c17ca932f47cfb62f31f1..e14e7f087f42e62952f7d22a67cfe7bf7e1c341e 100644 (file)
@@ -390,6 +390,15 @@ void set_cloexec_flag(int fd);
 // Set environment variable `name` to `value`.
 void setenv(const std::string& name, const std::string& value);
 
+// Return size change in KiB between `old_stat`  and `new_stat`.
+inline int64_t
+size_change_kibibyte(const Stat& old_stat, const Stat& new_stat)
+{
+  return (static_cast<int64_t>(new_stat.size_on_disk())
+          - static_cast<int64_t>(old_stat.size_on_disk()))
+         / 1024;
+}
+
 // Split `input` into words at any of the characters listed in `separators`.
 // These words are a view into `input`; empty words are omitted. `separators`
 // must neither be the empty string nor a nullptr.
index c66c9b50d3f890d6e776174476d56396622fb75f..bc8778a6dac3b9a1a16a67b2d16db658bb641cc9 100644 (file)
@@ -753,9 +753,7 @@ update_manifest_file(Context& ctx)
     log("Failed to add result name to {}", ctx.manifest_path());
   } else {
     const auto st = Stat::stat(ctx.manifest_path(), Stat::OnError::log);
-
-    const int64_t size_delta_kibibyte =
-      (st.size_on_disk() - old_st.size_on_disk()) / 1024;
+    const int64_t size_delta_kibibyte = Util::size_change_kibibyte(old_st, st);
     const int64_t files_delta = !old_st && st ? 1 : 0;
 
     if (ctx.stats_file() == ctx.manifest_stats_file()) {
@@ -972,9 +970,9 @@ to_cache(Context& ctx,
   if (!new_dest_stat) {
     throw Failure(Statistic::internal_error);
   }
-  const auto size_delta =
-    (new_dest_stat.size_on_disk() - orig_dest_stat.size_on_disk()) / 1024;
-  ctx.counter_updates.increment(Statistic::cache_size_kibibyte, size_delta);
+  ctx.counter_updates.increment(
+    Statistic::cache_size_kibibyte,
+    Util::size_change_kibibyte(orig_dest_stat, new_dest_stat));
   ctx.counter_updates.increment(Statistic::files_in_cache,
                                 orig_dest_stat ? 0 : 1);
 
index b73dfae0cb4532300f070988e801ac73ed5e208f..bf78166195bbb38839b09c9453bea50e3fde19a6 100644 (file)
@@ -197,10 +197,9 @@ recompress_file(RecompressionStatistics& statistics,
   atomic_new_file.commit();
   auto new_stat = Stat::stat(cache_file.path(), Stat::OnError::log);
 
-  const uint64_t size_delta =
-    (new_stat.size_on_disk() - old_stat.size_on_disk()) / 1024;
   Statistics::update(stats_file, [=](Counters& cs) {
-    cs.increment(Statistic::cache_size_kibibyte, size_delta);
+    cs.increment(Statistic::cache_size_kibibyte,
+                 Util::size_change_kibibyte(old_stat, new_stat));
   });
 
   statistics.update(content_size, old_stat.size(), new_stat.size(), 0);