Merge branch 'xMAC94x/server_parallize' into 'master'

handle msg as part of the servers state for best parallelisation. also include agent there

See merge request veloren/veloren!1878
This commit is contained in:
Marcel 2021-03-11 21:52:18 +00:00
commit 5d32690fbf
4 changed files with 15 additions and 15 deletions

View File

@ -495,19 +495,6 @@ impl Server {
// 3) Handle inputs from clients
self.handle_new_connections(&mut frontend_events);
let before_message_system = Instant::now();
// Run message receiving sys before the systems in common for decreased latency
// (e.g. run before controller system)
//TODO: run in parallel
run_now::<sys::msg::general::Sys>(&self.state.ecs());
run_now::<sys::msg::register::Sys>(&self.state.ecs());
run_now::<sys::msg::character_screen::Sys>(&self.state.ecs());
run_now::<sys::msg::in_game::Sys>(&self.state.ecs());
run_now::<sys::msg::terrain::Sys>(&self.state.ecs());
run_now::<sys::msg::ping::Sys>(&self.state.ecs());
run_now::<sys::agent::Sys>(&self.state.ecs());
let before_state_tick = Instant::now();
// 4) Tick the server's LocalState.
@ -516,6 +503,7 @@ impl Server {
self.state.tick(
dt,
|dispatcher_builder| {
sys::msg::add_server_systems(dispatcher_builder);
sys::add_server_systems(dispatcher_builder);
#[cfg(feature = "worldgen")]
rtsim::add_server_systems(dispatcher_builder);
@ -703,7 +691,7 @@ impl Server {
let tt = &tick_metrics.tick_time;
tt.with_label_values(&["new connections"])
.set((before_message_system - before_new_connections).as_nanos() as i64);
.set((before_state_tick - before_new_connections).as_nanos() as i64);
tt.with_label_values(&["handle server events"])
.set((before_update_terrain_and_regions - before_handle_events).as_nanos() as i64);
tt.with_label_values(&["update terrain and region map"])

View File

@ -21,6 +21,7 @@ use std::{
pub type PersistenceScheduler = SysScheduler<persistence::Sys>;
pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) {
dispatch::<agent::Sys>(dispatch_builder, &[]);
dispatch::<terrain::Sys>(dispatch_builder, &[]);
dispatch::<waypoint::Sys>(dispatch_builder, &[]);
dispatch::<invite_timeout::Sys>(dispatch_builder, &[]);

View File

@ -6,7 +6,18 @@ pub mod register;
pub mod terrain;
use crate::client::Client;
use common_ecs::dispatch;
use serde::de::DeserializeOwned;
use specs::DispatcherBuilder;
pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) {
dispatch::<character_screen::Sys>(dispatch_builder, &[]);
dispatch::<general::Sys>(dispatch_builder, &[]);
dispatch::<in_game::Sys>(dispatch_builder, &[]);
dispatch::<ping::Sys>(dispatch_builder, &[]);
dispatch::<register::Sys>(dispatch_builder, &[]);
dispatch::<terrain::Sys>(dispatch_builder, &[]);
}
/// handles all send msg and calls a handle fn
/// Aborts when a error occurred returns cnt of successful msg otherwise

View File

@ -25,7 +25,7 @@ impl<'a> System<'a> for Sys {
ReadStorage<'a, Client>,
);
const NAME: &'static str = "msg::in_game";
const NAME: &'static str = "msg::terrain";
const ORIGIN: Origin = Origin::Server;
const PHASE: Phase = Phase::Create;