Skip to content

Commit a4a302a

Browse files
woodserNorrinRadd
authored andcommitted
do not re-filter offers for every offer book change
1 parent c245d6e commit a4a302a

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

core/src/main/java/haveno/core/offer/OfferBookService.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@ public void onRemoved(Collection<ProtectedStorageEntry> protectedStorageEntries)
149149
Offer offer = new Offer(offerPayload);
150150
offer.setPriceFeedService(priceFeedService);
151151
announceOfferRemoved(offer);
152+
153+
// check if invalid offers are now valid
154+
synchronized (invalidOffers) {
155+
for (Offer invalidOffer : new ArrayList<Offer>(invalidOffers)) {
156+
try {
157+
validateOfferPayload(invalidOffer.getOfferPayload());
158+
removeInvalidOffer(invalidOffer.getId());
159+
replaceValidOffer(invalidOffer);
160+
announceOfferAdded(invalidOffer);
161+
} catch (Exception e) {
162+
// ignore
163+
}
164+
}
165+
}
152166
}
153167
});
154168
}, OfferBookService.class.getSimpleName());
@@ -298,20 +312,6 @@ private void announceOfferRemoved(Offer offer) {
298312
synchronized (offerBookChangedListeners) {
299313
offerBookChangedListeners.forEach(listener -> listener.onRemoved(offer));
300314
}
301-
302-
// check if invalid offers are now valid
303-
synchronized (invalidOffers) {
304-
for (Offer invalidOffer : new ArrayList<Offer>(invalidOffers)) {
305-
try {
306-
validateOfferPayload(invalidOffer.getOfferPayload());
307-
removeInvalidOffer(invalidOffer.getId());
308-
replaceValidOffer(invalidOffer);
309-
announceOfferAdded(invalidOffer);
310-
} catch (Exception e) {
311-
// ignore
312-
}
313-
}
314-
}
315315
}
316316

317317
private boolean hasValidOffer(String offerId) {

desktop/src/main/java/haveno/desktop/main/offer/offerbook/OfferBookViewModel.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,11 @@ public OfferBookViewModel(User user,
174174
tradeCurrencyListChangeListener = c -> fillCurrencies();
175175

176176
// refresh filter on changes
177-
offerBook.getOfferBookListItems().addListener((ListChangeListener<OfferBookListItem>) c -> {
178-
filterOffers();
179-
});
177+
// TODO: This is removed because it's expensive to re-filter offers for every change (high cpu for many offers).
178+
// This was used to ensure offer list is fully refreshed, but is unnecessary after refactoring OfferBookService to clone offers?
179+
// offerBook.getOfferBookListItems().addListener((ListChangeListener<OfferBookListItem>) c -> {
180+
// filterOffers();
181+
// });
180182

181183
filterItemsListener = c -> {
182184
final Optional<OfferBookListItem> highestAmountOffer = filteredItems.stream()

0 commit comments

Comments
 (0)