Skip to content

Commit a474619

Browse files
revert: remove regressed snapshot membership buffer reuse (#88)
This reverts commit db0a5e2. Co-authored-by: Arbousier1 <elderli@foxmail.com>
1 parent fcc0df7 commit a474619

1 file changed

Lines changed: 15 additions & 49 deletions

File tree

src/main/java/top/ellan/mahjong/table/render/TableRenderSnapshotFactory.java

Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,32 @@
44
import top.ellan.mahjong.render.TableRenderSubject;
55
import top.ellan.mahjong.render.snapshot.TableRenderSnapshot;
66
import top.ellan.mahjong.render.snapshot.TableSeatRenderSnapshot;
7-
import java.util.Collections;
87
import java.util.Comparator;
98
import java.util.EnumMap;
109
import java.util.HashMap;
10+
import java.util.HashSet;
1111
import java.util.List;
1212
import java.util.Map;
1313
import java.util.Objects;
14+
import java.util.Set;
1415
import java.util.UUID;
1516
import org.bukkit.Location;
1617
import org.bukkit.entity.Player;
1718

1819
public final class TableRenderSnapshotFactory {
19-
private static final Comparator<SerializedViewerId> SERIALIZED_VIEWER_ID_COMPARATOR =
20-
Comparator.comparing(SerializedViewerId::serializedId);
21-
2220
public TableRenderSnapshot create(TableRenderSubject session, long version, long cancellationNonce) {
2321
Location tableCenter = session.center();
2422
boolean started = session.isStarted();
2523
List<SerializedViewerId> serializedOnlineViewerIds = session.viewers().stream()
2624
.map(Player::getUniqueId)
2725
.distinct()
2826
.map(viewerId -> new SerializedViewerId(viewerId, viewerId.toString()))
29-
.sorted(SERIALIZED_VIEWER_ID_COMPARATOR)
27+
.sorted(Comparator.comparing(SerializedViewerId::serializedId))
3028
.toList();
3129
List<UUID> onlineViewerIds = serializedOnlineViewerIds.stream()
3230
.map(SerializedViewerId::id)
3331
.toList();
34-
Map<UUID, SerializedViewerId> serializedOnlineViewersById = new HashMap<>(
35-
Math.max(16, (int) (serializedOnlineViewerIds.size() / 0.75F) + 1)
36-
);
37-
for (SerializedViewerId viewer : serializedOnlineViewerIds) {
38-
serializedOnlineViewersById.put(viewer.id(), viewer);
39-
}
40-
StringBuilder viewerMembershipBuffer = this.viewerMembershipBuffer(serializedOnlineViewerIds);
32+
Set<UUID> onlineViewerIdSet = new HashSet<>(onlineViewerIds);
4133
SeatWind[] seatWinds = SeatWind.values();
4234
EnumMap<SeatWind, UUID> seatPlayerIds = new EnumMap<>(SeatWind.class);
4335
for (SeatWind wind : seatWinds) {
@@ -46,28 +38,13 @@ public TableRenderSnapshot create(TableRenderSubject session, long version, long
4638
Map<UUID, String> viewerMembershipSignatures = new HashMap<>();
4739
Map<UUID, List<UUID>> viewerIdsExcluding = new HashMap<>();
4840
for (UUID playerId : seatPlayerIds.values()) {
49-
if (viewerMembershipSignatures.containsKey(playerId)) {
50-
continue;
51-
}
52-
SerializedViewerId excludedViewer = playerId == null
53-
? null
54-
: serializedOnlineViewersById.get(playerId);
55-
if (playerId != null && excludedViewer == null) {
41+
if (viewerMembershipSignatures.containsKey(playerId)
42+
|| playerId != null && !onlineViewerIdSet.contains(playerId)) {
5643
continue;
5744
}
5845
viewerMembershipSignatures.put(
5946
playerId,
60-
excludedViewer == null
61-
? viewerMembershipBuffer.toString()
62-
: this.viewerMembershipSignature(
63-
viewerMembershipBuffer,
64-
excludedViewer,
65-
Collections.binarySearch(
66-
serializedOnlineViewerIds,
67-
excludedViewer,
68-
SERIALIZED_VIEWER_ID_COMPARATOR
69-
)
70-
)
47+
this.viewerMembershipSignature(serializedOnlineViewerIds, playerId)
7148
);
7249
viewerIdsExcluding.put(
7350
playerId,
@@ -82,7 +59,7 @@ public TableRenderSnapshot create(TableRenderSubject session, long version, long
8259
session,
8360
wind,
8461
seatPlayerIds.get(wind),
85-
serializedOnlineViewersById,
62+
onlineViewerIdSet,
8663
viewerMembershipSignatures,
8764
viewerIdsExcluding
8865
)
@@ -154,7 +131,7 @@ private TableSeatRenderSnapshot captureSeatSnapshot(
154131
TableRenderSubject session,
155132
SeatWind wind,
156133
UUID playerId,
157-
Map<UUID, SerializedViewerId> serializedOnlineViewersById,
134+
Set<UUID> onlineViewerIdSet,
158135
Map<UUID, String> viewerMembershipSignatures,
159136
Map<UUID, List<UUID>> viewerIdsExcluding
160137
) {
@@ -168,7 +145,7 @@ private TableSeatRenderSnapshot captureSeatSnapshot(
168145
occupied && session.isRiichi(playerId),
169146
occupied && session.isReady(playerId),
170147
occupied && session.isQueuedToLeave(playerId),
171-
occupied && serializedOnlineViewersById.containsKey(playerId),
148+
occupied && onlineViewerIdSet.contains(playerId),
172149
viewerMembershipSignatures.getOrDefault(playerId, ""),
173150
occupied ? session.selectedHandTileIndex(playerId) : -1,
174151
occupied ? session.selectedHandTileIndices(playerId) : List.of(),
@@ -183,25 +160,14 @@ private TableSeatRenderSnapshot captureSeatSnapshot(
183160
);
184161
}
185162

186-
private StringBuilder viewerMembershipBuffer(List<SerializedViewerId> onlineViewerIds) {
163+
private String viewerMembershipSignature(List<SerializedViewerId> onlineViewerIds, UUID excludedPlayerId) {
187164
StringBuilder builder = new StringBuilder(onlineViewerIds.size() * 36);
188165
for (SerializedViewerId viewer : onlineViewerIds) {
189-
builder.append(viewer.serializedId());
166+
if (!viewer.id().equals(excludedPlayerId)) {
167+
builder.append(viewer.serializedId());
168+
}
190169
}
191-
return builder;
192-
}
193-
194-
private String viewerMembershipSignature(
195-
StringBuilder viewerMembershipBuffer,
196-
SerializedViewerId excludedViewer,
197-
int excludedViewerIndex
198-
) {
199-
String serializedId = excludedViewer.serializedId();
200-
int start = excludedViewerIndex * serializedId.length();
201-
viewerMembershipBuffer.delete(start, start + serializedId.length());
202-
String signature = viewerMembershipBuffer.toString();
203-
viewerMembershipBuffer.insert(start, serializedId);
204-
return signature;
170+
return builder.toString();
205171
}
206172

207173
private List<UUID> viewerIdsExcluding(List<UUID> onlineViewerIds, UUID excludedPlayerId) {

0 commit comments

Comments
 (0)