aboutsummaryrefslogtreecommitdiff
path: root/server/src/benchmark.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-18 21:01:36 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-18 22:49:18 +0100
commit5cf50403fabbb3e79b771bc157d5a4c57c614570 (patch)
treeb6887878931212c8a35b8650af8527aa5a9f071c /server/src/benchmark.rs
parenteb9412a2847a199f04e74d8a17481b7d0c9e36a6 (diff)
downloadhurrycurry-5cf50403fabbb3e79b771bc157d5a4c57c614570.tar
hurrycurry-5cf50403fabbb3e79b771bc157d5a4c57c614570.tar.bz2
hurrycurry-5cf50403fabbb3e79b771bc157d5a4c57c614570.tar.zst
add benchmark to measure movement packet count
Diffstat (limited to 'server/src/benchmark.rs')
-rw-r--r--server/src/benchmark.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/server/src/benchmark.rs b/server/src/benchmark.rs
new file mode 100644
index 00000000..ec4f10e8
--- /dev/null
+++ b/server/src/benchmark.rs
@@ -0,0 +1,55 @@
+/*
+ Hurry Curry! - a game about cooking
+ Copyright (C) 2025 Hurry Curry! Contributors
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, version 3 of the License only.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+*/
+
+use crate::server::{Server, ServerConfig};
+use anyhow::Result;
+use hurrycurry_protocol::PacketC;
+use std::{path::PathBuf, time::Instant};
+use tokio::sync::broadcast;
+
+pub fn benchmark(data_path: PathBuf) -> Result<()> {
+ let mut server = Server::new(
+ data_path,
+ ServerConfig::default(),
+ broadcast::channel(1024).0,
+ )?;
+
+ server.load(server.index.generate_with_book("junior").unwrap(), None);
+
+ let start = Instant::now();
+ let mut packets = 0;
+ let mut packets_movement = 0;
+ loop {
+ if server.tick(1. / 50.).is_some() {
+ break;
+ }
+ while let Some(p) = server.packet_out.pop_front() {
+ packets += 1;
+ if let PacketC::Movement { .. } = &p {
+ packets_movement += 1;
+ }
+ }
+ }
+ println!("simulation took {:?}", start.elapsed());
+ println!(
+ "packets broadcast: {packets} ({packets_movement} movement, {} other)",
+ packets - packets_movement
+ );
+
+ Ok(())
+}