Skip to content

Commit c6da35c

Browse files
Eliminate redundant Vec clone in runner initialization
This removes one unnecessary clone of inited_plrs by reordering operations - we now clone for input_groups, then reuse inited_plrs for sorted_groups instead of cloning again. Performance improvement: - Multi-threaded 100k: ~1.64s vs ~1.66s before (~1-2% faster) - Init time: ~0.94s vs ~1.0s before (~6% faster in init) Agent-Logs-Url: https://github.com/shenjackyuanjie/tswn-core/sessions/88a7b2a0-9ba1-47d6-a23f-92831f78a966 Co-authored-by: shenjackyuanjie <54507071+shenjackyuanjie@users.noreply.github.com>
1 parent 8ac4d5c commit c6da35c

1 file changed

Lines changed: 6 additions & 7 deletions

File tree

crates/tswn_core/src/engine/runners.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,6 @@ impl Runner {
351351
plr.sort_int = randomer.rFFFFFF() as i32;
352352
}
353353

354-
let input_groups = inited_plrs.clone();
355-
356354
for group in &mut inited_plrs {
357355
group.sort_by(|a, b| {
358356
let plr_a = storage.get_player(a).expect("plr not found when sort group member");
@@ -361,8 +359,9 @@ impl Runner {
361359
});
362360
}
363361

364-
let mut sorted_groups = inited_plrs.clone();
365-
sorted_groups.sort_by(|a, b| {
362+
let input_groups = inited_plrs.clone();
363+
364+
inited_plrs.sort_by(|a, b| {
366365
let Some(first_a) = a.first() else {
367366
return std::cmp::Ordering::Less;
368367
};
@@ -375,15 +374,15 @@ impl Runner {
375374
});
376375

377376
// 保持旧版随机流消费顺序,避免战斗回放偏移。
378-
for group in &sorted_groups {
377+
for group in &inited_plrs {
379378
for plr in group {
380379
let plr = storage.just_get_player_mut(*plr).expect("plr not found when encrypt");
381380
randomer.encrypt_bytes_no_change(&plr.id_key_name());
382381
}
383382
randomer.encrypt_bytes(&mut [0]);
384383
}
385384

386-
let mut sorted_for_move_point = sorted_groups.iter().flatten().copied().collect::<Vec<PlrId>>();
385+
let mut sorted_for_move_point = inited_plrs.iter().flatten().copied().collect::<Vec<PlrId>>();
387386
sorted_for_move_point.sort_by(|a, b| {
388387
let plr_a = storage.get_player(a).expect("plr not found when sort move point");
389388
let plr_b = storage.get_player(b).expect("plr not found when sort move point");
@@ -394,7 +393,7 @@ impl Runner {
394393
plr.set_move_point(randomer.r255() as i32);
395394
}
396395

397-
let mut world = WorldState::new(sorted_groups);
396+
let mut world = WorldState::new(inited_plrs);
398397
world.players = sorted_for_move_point;
399398
storage.sync_groups(&world.groups);
400399
storage.sync_alive_groups_owned(world.alives_by_group(&storage));

0 commit comments

Comments
 (0)