47 const int num_infos = work_balance_infos.size();
50 const double time_average =
total_time / num_infos;
52 double total_weight = 0;
54 new_weights.reserve(num_infos);
61 const double lerp_weight = 1.0 / num_infos;
63 bool has_big_difference =
false;
66 const double time_target =
mix(info.time_spent, time_average, lerp_weight);
67 const double new_weight = info.weight * time_target / info.time_spent;
68 new_weights.push_back(new_weight);
69 total_weight += new_weight;
71 if (std::fabs(1.0 - time_target / time_average) > 0.02) {
72 has_big_difference =
true;
76 if (!has_big_difference) {
80 const double total_weight_inv = 1.0 / total_weight;
81 for (
int i = 0; i < num_infos; ++i) {
83 info.
weight = new_weights[i] * total_weight_inv;