Make minimum gc sleep time tunnable

Bug: 241601436
Test: check smart idle maint log of StorageManagerService
Signed-off-by: Daeho Jeong <daehojeong@google.com>
Change-Id: I5a70e4ec2ca895551b6446a9dfd4bb5003a3fbd0
Merged-In: I5a70e4ec2ca895551b6446a9dfd4bb5003a3fbd0
diff --git a/IdleMaint.cpp b/IdleMaint.cpp
index 9d3450a..1e0ef81 100644
--- a/IdleMaint.cpp
+++ b/IdleMaint.cpp
@@ -86,7 +86,6 @@
 static const int GC_TIMEOUT_SEC = 420;
 static const int DEVGC_TIMEOUT_SEC = 120;
 static const int KBYTES_IN_SEGMENT = 2048;
-static const int MIN_GC_URGENT_SLEEP_TIME = 500;
 static const int ONE_MINUTE_IN_MS = 60000;
 static const int GC_NORMAL_MODE = 0;
 static const int GC_URGENT_MID_MODE = 3;
@@ -509,7 +508,7 @@
 }
 
 void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
-                     float reclaimWeight, int32_t gcPeriod) {
+                     float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime) {
     std::list<std::string> paths;
     bool needGC = true;
     int32_t sleepTime;
@@ -571,8 +570,8 @@
             needGC = false;
         } else {
             sleepTime = gcPeriod * ONE_MINUTE_IN_MS / neededSegments;
-            if (sleepTime < MIN_GC_URGENT_SLEEP_TIME) {
-                sleepTime = MIN_GC_URGENT_SLEEP_TIME;
+            if (sleepTime < minGCSleepTime) {
+                sleepTime = minGCSleepTime;
             }
         }
     }
diff --git a/IdleMaint.h b/IdleMaint.h
index 9a2af4a..e94f853 100644
--- a/IdleMaint.h
+++ b/IdleMaint.h
@@ -27,7 +27,7 @@
 int AbortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
 int32_t GetStorageLifeTime();
 void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
-                     float reclaimWeight, int32_t gcPeriod);
+                     float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime);
 void RefreshLatestWrite();
 int32_t GetWriteAmount();
 
diff --git a/VoldNativeService.cpp b/VoldNativeService.cpp
index 8ba3aaf..40186ef 100644
--- a/VoldNativeService.cpp
+++ b/VoldNativeService.cpp
@@ -495,11 +495,12 @@
 binder::Status VoldNativeService::setGCUrgentPace(int32_t neededSegments,
                                                   int32_t minSegmentThreshold,
                                                   float dirtyReclaimRate, float reclaimWeight,
-                                                  int32_t gcPeriod) {
+                                                  int32_t gcPeriod, int32_t minGCSleepTime) {
     ENFORCE_SYSTEM_OR_ROOT;
     ACQUIRE_LOCK;
 
-    SetGCUrgentPace(neededSegments, minSegmentThreshold, dirtyReclaimRate, reclaimWeight, gcPeriod);
+    SetGCUrgentPace(neededSegments, minSegmentThreshold, dirtyReclaimRate, reclaimWeight, gcPeriod,
+                    minGCSleepTime);
     return Ok();
 }
 
diff --git a/VoldNativeService.h b/VoldNativeService.h
index 423e8f9..0ea0b69 100644
--- a/VoldNativeService.h
+++ b/VoldNativeService.h
@@ -90,7 +90,8 @@
     binder::Status abortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
     binder::Status getStorageLifeTime(int32_t* _aidl_return);
     binder::Status setGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold,
-                                   float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod);
+                                   float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod,
+                                   int32_t minGCSleepTime);
     binder::Status refreshLatestWrite();
     binder::Status getWriteAmount(int32_t* _aidl_return);
 
diff --git a/binder/android/os/IVold.aidl b/binder/android/os/IVold.aidl
index d77c7da..24c6ff5 100644
--- a/binder/android/os/IVold.aidl
+++ b/binder/android/os/IVold.aidl
@@ -69,7 +69,7 @@
     int getStorageLifeTime();
     void setGCUrgentPace(int neededSegments, int minSegmentThreshold,
                          float dirtyReclaimRate, float reclaimWeight,
-                         int gcPeriod);
+                         int gcPeriod, int minGCSleepTime);
     void refreshLatestWrite();
     int getWriteAmount();