storaged: emplace recent_perf in load_perf_history_proto

If recent_perf contains existing content, overwrite in method
load_perf_history_proto.  If proto of recent_perf contains a lot of
history, the content would have grown with system_server crashes.

Test: setprop ro.storaged.flush_proto.interval 60
      while true;do sleep 5;stop;sleep 1;start;ps -A|grep storaged;done
      and look at value for rss should remain about 4MB over long term.
Bug: 119798824
Change-Id: I50aae7d61eb791a8fcddbbd829254baf8f708186
This commit is contained in:
Mark Salyzyn 2018-11-20 08:28:24 -08:00
parent 630d803dee
commit 0ade88c83d

View file

@ -87,12 +87,21 @@ void storage_info_t::load_perf_history_proto(const IOPerfHistory& perf_history)
day_start_tp += chrono::seconds(perf_history.day_start_sec());
nr_samples = perf_history.nr_samples();
if (nr_samples < recent_perf.size()) {
recent_perf.erase(recent_perf.begin() + nr_samples, recent_perf.end());
}
size_t i = 0;
for (auto bw : perf_history.recent_perf()) {
recent_perf.push_back(bw);
if (i < recent_perf.size()) {
recent_perf[i] = bw;
} else {
recent_perf.push_back(bw);
}
++i;
}
nr_days = perf_history.nr_days();
int i = 0;
i = 0;
for (auto bw : perf_history.daily_perf()) {
daily_perf[i++] = bw;
}