cryptohome: Export evicted Drive cache sizes as UMA.

BUG=chromium:533750
TEST=existing unit tests

Change-Id: I9f722d361b790603c4baa7daceae0fbbeef1688b
Reviewed-on: https://chromium-review.googlesource.com/356331
Commit-Ready: Keigo Oka <oka@chromium.org>
Tested-by: Keigo Oka <oka@chromium.org>
Reviewed-by: Keigo Oka <oka@chromium.org>
Reviewed-by: Darren Krahn <dkrahn@chromium.org>
diff --git a/cryptohome/cryptohome_metrics.cc b/cryptohome/cryptohome_metrics.cc
index fb9c229..465ea53 100644
--- a/cryptohome/cryptohome_metrics.cc
+++ b/cryptohome/cryptohome_metrics.cc
@@ -27,6 +27,8 @@
 constexpr int kDictionaryAttackCounterNumBuckets = 100;
 constexpr char kChecksumStatusHistogram[] = "Cryptohome.ChecksumStatus";
 constexpr char kCryptohomeTpmResultsHistogram[] = "Cryptohome.TpmResults";
+constexpr char kCryptohomeFreedGCacheDiskSpaceInMbHistogram[] =
+    "Cryptohome.FreedGCacheDiskSpaceInMb";
 
 // Histogram parameters. This should match the order of 'TimerType'.
 // Min and max samples are in milliseconds.
@@ -159,4 +161,14 @@
                            kChecksumStatusNumBuckets);
 }
 
+void ReportFreedGCacheDiskSpaceInMb(int mb) {
+  if (!g_metrics) {
+    return;
+  }
+  g_metrics->SendToUMA(kCryptohomeFreedGCacheDiskSpaceInMbHistogram, mb,
+                       0 /* minimum value of the histogram samples */,
+                       1000 /* maximum value of the histogram samples (1GB) */,
+                       50 /* number of buckets */);
+}
+
 }  // namespace cryptohome
diff --git a/cryptohome/cryptohome_metrics.h b/cryptohome/cryptohome_metrics.h
index 17f4236..fdcc5be 100644
--- a/cryptohome/cryptohome_metrics.h
+++ b/cryptohome/cryptohome_metrics.h
@@ -100,6 +100,10 @@
 
 void ReportChecksum(ChecksumStatus status);
 
+// Reports removed GCache size by cryptohome to the
+// "Cryptohome.FreedGCacheDiskSpaceInMb" histogram.
+void ReportFreedGCacheDiskSpaceInMb(int mb);
+
 // Initialization helper.
 class ScopedMetricsInitializer {
  public:
diff --git a/cryptohome/homedirs.cc b/cryptohome/homedirs.cc
index 771339c..f8c1364 100644
--- a/cryptohome/homedirs.cc
+++ b/cryptohome/homedirs.cc
@@ -17,6 +17,7 @@
 #include <chromeos/constants/cryptohome.h>
 
 #include "cryptohome/credentials.h"
+#include "cryptohome/cryptohome_metrics.h"
 #include "cryptohome/cryptolib.h"
 #include "cryptohome/mount.h"
 #include "cryptohome/platform.h"
@@ -81,14 +82,20 @@
   DoForEveryUnmountedCryptohome(base::Bind(&HomeDirs::DeleteCacheCallback,
                                            base::Unretained(this)));
 
-  if (platform_->AmountOfFreeDiskSpace(shadow_root_) >= kEnoughFreeSpace)
+  int64_t freeDiskSpace = platform_->AmountOfFreeDiskSpace(shadow_root_);
+  if (freeDiskSpace >= kEnoughFreeSpace)
     return true;
 
   // Clean Cache directories for every user (except current one).
   DoForEveryUnmountedCryptohome(base::Bind(&HomeDirs::DeleteGCacheTmpCallback,
                                            base::Unretained(this)));
 
-  if (platform_->AmountOfFreeDiskSpace(shadow_root_) >= kEnoughFreeSpace)
+  int64_t oldFreeDiskSpace = freeDiskSpace;
+  freeDiskSpace = platform_->AmountOfFreeDiskSpace(shadow_root_);
+  ReportFreedGCacheDiskSpaceInMb((freeDiskSpace - oldFreeDiskSpace) / 1024 /
+                                 1024);
+
+  if (freeDiskSpace >= kEnoughFreeSpace)
     return true;
 
   // Initialize user timestamp cache if it has not been yet. This reads the