From 80d89c20fdb231f87dce189ef76d9e2ec1d1dc04 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 28 Apr 2020 08:50:13 +0200 Subject: [PATCH] top: use batched subject_infos of trace session Issue #3610 --- repos/os/src/app/top/main.cc | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/repos/os/src/app/top/main.cc b/repos/os/src/app/top/main.cc index f471e25c8..0a6997d25 100644 --- a/repos/os/src/app/top/main.cc +++ b/repos/os/src/app/top/main.cc @@ -82,14 +82,16 @@ struct Trace_subject_registry bool _reconstruct_trace_connection = false; + template unsigned update_subjects(Genode::Pd_session &pd, - Genode::Trace::Connection &trace) + Genode::Trace::Connection &trace, + FN const &fn) { Genode::Ram_quota ram_quota; do { try { - return trace.subjects(_subjects, MAX_SUBJECTS); + return trace.for_each_subject_info(fn); } catch (Genode::Out_of_ram) { trace.upgrade_ram(4096); } @@ -107,17 +109,7 @@ struct Trace_subject_registry void update(Genode::Pd_session &pd, Genode::Trace::Connection &trace, Genode::Allocator &alloc) { - unsigned const num_subjects = update_subjects(pd, trace); - - if (num_subjects == MAX_SUBJECTS) - Genode::error("Not enough memory for all threads - " - "calculated utilization is not sane nor " - "complete !", num_subjects); - - /* add and update existing entries */ - for (unsigned i = 0; i < num_subjects; i++) { - - Genode::Trace::Subject_id const id = _subjects[i]; + update_subjects(pd, trace, [&](Genode::Trace::Subject_id const &id, Genode::Trace::Subject_info const &info) { Entry *e = _lookup(id); if (!e) { @@ -125,7 +117,7 @@ struct Trace_subject_registry _entries.insert(e); } - e->update(trace.subject_info(id)); + e->update(info); /* remove dead threads which did not run in the last period */ if (e->info.state() == Genode::Trace::Subject_info::DEAD && @@ -135,7 +127,7 @@ struct Trace_subject_registry _entries.remove(e); Genode::destroy(alloc, e); } - } + }); if (_reconstruct_trace_connection) throw Genode::Out_of_ram();