From 8cd6b9275ab14c69a0482e43277da7b071d1978c Mon Sep 17 00:00:00 2001 From: RipleyTom Date: Tue, 14 Mar 2023 21:11:40 +0100 Subject: [PATCH] Fix timestamps in signaling_handler --- rpcs3/Emu/NP/signaling_handler.cpp | 22 ++++++++++++++-------- rpcs3/Emu/NP/signaling_handler.h | 2 ++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/NP/signaling_handler.cpp b/rpcs3/Emu/NP/signaling_handler.cpp index 5eb415569c..a29b139628 100644 --- a/rpcs3/Emu/NP/signaling_handler.cpp +++ b/rpcs3/Emu/NP/signaling_handler.cpp @@ -184,6 +184,11 @@ bool signaling_handler::validate_signaling_packet(const signaling_packet* sp) return true; } +u64 signaling_handler::get_micro_timestamp(const std::chrono::steady_clock::time_point& time_point) +{ + return std::chrono::duration_cast(time_point.time_since_epoch()).count(); +} + void signaling_handler::process_incoming_messages() { auto msgs = get_sign_msgs(); @@ -249,14 +254,15 @@ void signaling_handler::process_incoming_messages() } sent_packet.command = signal_ping; - sent_packet.timestamp_sender = now.time_since_epoch().count(); + sent_packet.timestamp_sender = get_micro_timestamp(now); send_signaling_packet(sent_packet, si->addr, si->port); queue_signaling_packet(sent_packet, si, now + REPEAT_PING_DELAY); }; const auto update_rtt = [&](u64 rtt_timestamp) { - u32 rtt = now.time_since_epoch().count() - rtt_timestamp; + u64 timestamp_now = get_micro_timestamp(now); + u64 rtt = timestamp_now - rtt_timestamp; si->last_rtts[(si->rtt_counters % 6)] = rtt; si->rtt_counters++; @@ -267,7 +273,7 @@ void signaling_handler::process_incoming_messages() sum += si->last_rtts[index]; } - si->rtt = (sum / num_rtts) / 1000; + si->rtt = (sum / num_rtts); }; switch (sp->command) @@ -289,7 +295,7 @@ void signaling_handler::process_incoming_messages() schedule_repeat = true; sent_packet.command = signal_connect_ack; sent_packet.timestamp_sender = sp->timestamp_sender; - sent_packet.timestamp_receiver = now.time_since_epoch().count(); + sent_packet.timestamp_receiver = get_micro_timestamp(now); update_si_addr(si, op_addr, op_port); break; case signal_connect_ack: @@ -298,7 +304,7 @@ void signaling_handler::process_incoming_messages() schedule_repeat = false; setup_ping(); sent_packet.command = signal_confirm; - sent_packet.timestamp_receiver = now.time_since_epoch().count(); + sent_packet.timestamp_receiver = sp->timestamp_receiver; retire_packet(si, signal_connect); update_si_addr(si, op_addr, op_port); update_si_mapped_addr(si, sp->sent_addr, sp->sent_port); @@ -375,10 +381,10 @@ void signaling_handler::operator()() { case signal_connect: case signal_ping: - sig.packet.timestamp_sender = now.time_since_epoch().count(); + sig.packet.timestamp_sender = get_micro_timestamp(now); break; case signal_connect_ack: - sig.packet.timestamp_receiver = now.time_since_epoch().count(); + sig.packet.timestamp_receiver = get_micro_timestamp(now); break; default: break; @@ -586,7 +592,7 @@ void signaling_handler::start_sig(u32 conn_id, u32 addr, u16 port) std::lock_guard lock(data_mutex); auto& sent_packet = sig_packet; sent_packet.command = signal_connect; - sent_packet.timestamp_sender = steady_clock::now().time_since_epoch().count(); + sent_packet.timestamp_sender = get_micro_timestamp(steady_clock::now()); ensure(sig_peers.contains(conn_id)); std::shared_ptr si = ::at32(sig_peers, conn_id); diff --git a/rpcs3/Emu/NP/signaling_handler.h b/rpcs3/Emu/NP/signaling_handler.h index bbfe78b04a..cf611ff625 100644 --- a/rpcs3/Emu/NP/signaling_handler.h +++ b/rpcs3/Emu/NP/signaling_handler.h @@ -116,6 +116,8 @@ private: vm::ptr sig2_cb{}; vm::ptr sig2_cb_arg{}; + static u64 get_micro_timestamp(const std::chrono::steady_clock::time_point& time_point); + u32 get_always_conn_id(const SceNpId& npid); static void update_si_addr(std::shared_ptr& si, u32 new_addr, u16 new_port); static void update_si_mapped_addr(std::shared_ptr& si, u32 new_addr, u16 new_port);