45 const int num_infos = work_balance_infos.size();
48 const double time_average =
total_time / num_infos;
50 double total_weight = 0;
52 new_weights.reserve(num_infos);
59 const double lerp_weight = 1.0 / num_infos;
61 bool has_big_difference =
false;
64 const double time_target =
mix(info.time_spent, time_average, lerp_weight);
65 const double new_weight = info.weight * time_target / info.time_spent;
66 new_weights.push_back(new_weight);
67 total_weight += new_weight;
69 if (std::fabs(1.0 - time_target / time_average) > 0.02) {
70 has_big_difference =
true;
74 if (!has_big_difference) {
78 const double total_weight_inv = 1.0 / total_weight;
79 for (
int i = 0;
i < num_infos; ++
i) {
81 info.
weight = new_weights[
i] * total_weight_inv;