Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit baff640d authored by Jin Qian's avatar Jin Qian
Browse files

storaged: handle negative delta in io usage

When UID is uninstalled and reinstalled, IO usage of the UID is
reset. This caused problem in accounting since it assumes IO usage
is always increasing for the same UID. In such case, use the current
usage instead of negative delta for accounting.

Bug: 34198239
Change-Id: I74661feccc05d19ba8a0feff8a2e38d72c7d1465
parent cee1918b
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -204,18 +204,23 @@ void uid_monitor::update_curr_io_stats_locked()
        }

        struct uid_io_usage& usage = curr_io_stats[uid.name];
        usage.bytes[READ][FOREGROUND][charger_stat] +=
            uid.io[FOREGROUND].read_bytes -
        int64_t fg_rd_delta = uid.io[FOREGROUND].read_bytes -
            last_uid_io_stats[uid.uid].io[FOREGROUND].read_bytes;
        usage.bytes[READ][BACKGROUND][charger_stat] +=
            uid.io[BACKGROUND].read_bytes -
        int64_t bg_rd_delta = uid.io[BACKGROUND].read_bytes -
            last_uid_io_stats[uid.uid].io[BACKGROUND].read_bytes;
        usage.bytes[WRITE][FOREGROUND][charger_stat] +=
            uid.io[FOREGROUND].write_bytes -
        int64_t fg_wr_delta = uid.io[FOREGROUND].write_bytes -
            last_uid_io_stats[uid.uid].io[FOREGROUND].write_bytes;
        int64_t bg_wr_delta = uid.io[BACKGROUND].write_bytes -
            last_uid_io_stats[uid.uid].io[BACKGROUND].write_bytes;

        usage.bytes[READ][FOREGROUND][charger_stat] +=
            (fg_rd_delta < 0) ? uid.io[FOREGROUND].read_bytes : fg_rd_delta;
        usage.bytes[READ][BACKGROUND][charger_stat] +=
            (bg_rd_delta < 0) ? uid.io[BACKGROUND].read_bytes : bg_rd_delta;
        usage.bytes[WRITE][FOREGROUND][charger_stat] +=
            (fg_wr_delta < 0) ? uid.io[FOREGROUND].write_bytes : fg_wr_delta;
        usage.bytes[WRITE][BACKGROUND][charger_stat] +=
            uid.io[BACKGROUND].write_bytes -
            last_uid_io_stats[uid.uid].io[BACKGROUND].write_bytes;;
            (bg_wr_delta < 0) ? uid.io[BACKGROUND].write_bytes : bg_wr_delta;
    }

    last_uid_io_stats = uid_io_stats;