storaged: allow dump window to be less than an hour

This is useful for CTS where we just need dump from last few minutes.

Bug: 34198239
Bug: 34845096
Change-Id: Ic543e7184606f419f8989bf0cb992cd46e48845c
diff --git a/storaged/include/storaged.h b/storaged/include/storaged.h
index 0bdff74..591719e 100644
--- a/storaged/include/storaged.h
+++ b/storaged/include/storaged.h
@@ -302,7 +302,7 @@
         return mUidm.get_uid_io_stats();
     }
     std::map<uint64_t, std::vector<struct uid_record>> get_uid_records(
-            int hours, uint64_t threshold, bool force_report) {
+            double hours, uint64_t threshold, bool force_report) {
         return mUidm.dump(hours, threshold, force_report);
     }
     void update_uid_io_interval(int interval) {
diff --git a/storaged/include/storaged_uid_monitor.h b/storaged/include/storaged_uid_monitor.h
index f6250ae..031b7c4 100644
--- a/storaged/include/storaged_uid_monitor.h
+++ b/storaged/include/storaged_uid_monitor.h
@@ -92,7 +92,7 @@
     std::unordered_map<uint32_t, struct uid_info> get_uid_io_stats();
     // called by dumpsys
     std::map<uint64_t, std::vector<struct uid_record>> dump(
-        int hours, uint64_t threshold, bool force_report);
+        double hours, uint64_t threshold, bool force_report);
     // called by battery properties listener
     void set_charger_state(charger_stat_t stat);
     // called by storaged periodic_chore or dump with force_report
diff --git a/storaged/storaged_service.cpp b/storaged/storaged_service.cpp
index 8624b3b..9c8cbf0 100644
--- a/storaged/storaged_service.cpp
+++ b/storaged/storaged_service.cpp
@@ -88,7 +88,7 @@
         return PERMISSION_DENIED;
     }
 
-    int hours = 0;
+    double hours = 0;
     int time_window = 0;
     uint64_t threshold = 0;
     bool force_report = false;
@@ -97,7 +97,7 @@
         if (arg == String16("--hours")) {
             if (++i >= args.size())
                 break;
-            hours = stoi(String16::std_string(args[i]));
+            hours = stod(String16::std_string(args[i]));
             continue;
         }
         if (arg == String16("--time_window")) {
diff --git a/storaged/storaged_uid_monitor.cpp b/storaged/storaged_uid_monitor.cpp
index 2c20dba..3b893b5 100644
--- a/storaged/storaged_uid_monitor.cpp
+++ b/storaged/storaged_uid_monitor.cpp
@@ -150,7 +150,7 @@
 }
 
 std::map<uint64_t, std::vector<struct uid_record>> uid_monitor::dump(
-    int hours, uint64_t threshold, bool force_report)
+    double hours, uint64_t threshold, bool force_report)
 {
     if (force_report) {
         report();
@@ -162,7 +162,7 @@
     uint64_t first_ts = 0;
 
     if (hours != 0) {
-        first_ts = time(NULL) - (uint64_t)hours * HOUR_TO_SEC;
+        first_ts = time(NULL) - hours * HOUR_TO_SEC;
     }
 
     for (auto it = records.lower_bound(first_ts); it != records.end(); ++it) {