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
This commit is contained in:
Jin Qian 2017-02-16 18:34:31 -08:00
parent cee1918b08
commit baff640d5d
1 changed files with 13 additions and 8 deletions

View File

@ -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;