Skip to content

Commit 95b8c27

Browse files
committed
Optimized snapshot size, making sure the FrameIndex is added one time per peer.
1 parent e5bde99 commit 95b8c27

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

scene_synchronizer.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2128,13 +2128,16 @@ void ServerSynchronizer::generate_snapshot(
21282128
r_snapshot_db.add(false);
21292129
}
21302130

2131+
std::vector<int> frame_index_added_for_peer;
2132+
21312133
if (p_group.is_trickled_node_list_changed() || p_force_full_snapshot) {
21322134
for (int i = 0; i < int(p_group.get_trickled_sync_objects().size()); ++i) {
21332135
if (p_group.get_trickled_sync_objects()[i]._unknown || p_force_full_snapshot) {
21342136
generate_snapshot_object_data(
21352137
p_group.get_trickled_sync_objects()[i].od,
21362138
SNAPSHOT_GENERATION_MODE_FORCE_NODE_PATH_ONLY,
21372139
NS::SyncGroup::Change(),
2140+
frame_index_added_for_peer,
21382141
r_snapshot_db);
21392142
}
21402143
}
@@ -2151,6 +2154,7 @@ void ServerSynchronizer::generate_snapshot(
21512154
node_data,
21522155
mode,
21532156
relevant_node_data[i].change,
2157+
frame_index_added_for_peer,
21542158
r_snapshot_db);
21552159
}
21562160
}
@@ -2163,6 +2167,7 @@ void ServerSynchronizer::generate_snapshot_object_data(
21632167
const NS::ObjectData *p_object_data,
21642168
SnapshotGenerationMode p_mode,
21652169
const NS::SyncGroup::Change &p_change,
2170+
std::vector<int> &r_frame_index_added_for_peer,
21662171
DataBuffer &r_snapshot_db) const {
21672172
if (p_object_data->app_object_handle == ObjectHandle::NONE) {
21682173
return;
@@ -2191,12 +2196,16 @@ void ServerSynchronizer::generate_snapshot_object_data(
21912196
{
21922197
bool frame_input_encoded = false;
21932198
if (p_object_data->get_controlled_by_peer() > 0) {
2194-
const PeerNetworkedController *peer_controller = scene_synchronizer->get_controller_for_peer(p_object_data->get_controlled_by_peer());
2195-
if (peer_controller) {
2196-
// Has controller FrameInput
2197-
r_snapshot_db.add(true);
2198-
r_snapshot_db.add(peer_controller->get_current_frame_index().id);
2199-
frame_input_encoded = true;
2199+
if (!VecFunc::has(r_frame_index_added_for_peer, p_object_data->get_controlled_by_peer())) {
2200+
// The FrameIndex was not added yet to this snapshot, so add it now.
2201+
const PeerNetworkedController *peer_controller = scene_synchronizer->get_controller_for_peer(p_object_data->get_controlled_by_peer());
2202+
if (peer_controller) {
2203+
// Has controller FrameInput
2204+
r_snapshot_db.add(true);
2205+
r_snapshot_db.add(peer_controller->get_current_frame_index().id);
2206+
r_frame_index_added_for_peer.push_back(p_object_data->get_controlled_by_peer());
2207+
frame_input_encoded = true;
2208+
}
22002209
}
22012210
}
22022211

@@ -3158,7 +3167,7 @@ bool ClientSynchronizer::parse_sync_data(
31583167
}
31593168

31603169
{
3161-
// Fetch latencys
3170+
// Fetch latency
31623171
while (true) {
31633172
bool has_next_latency = false;
31643173
p_snapshot.read(has_next_latency);

scene_synchronizer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,7 @@ class ServerSynchronizer final : public Synchronizer {
667667
const NS::ObjectData *p_object_data,
668668
SnapshotGenerationMode p_mode,
669669
const NS::SyncGroup::Change &p_change,
670+
std::vector<int> &r_frame_index_added_for_peer,
670671
DataBuffer &r_snapshot_db) const;
671672

672673
void process_trickled_sync(double p_delta);

0 commit comments

Comments
 (0)