From 22db354cb2254925ec5799d9578fd5ed2d238671 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Wed, 16 Apr 2025 10:06:03 -0400 Subject: [PATCH] do not re-filter offers for every offer book change --- .../haveno/core/offer/OfferBookService.java | 28 +++++++++---------- .../offer/offerbook/OfferBookViewModel.java | 8 ++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/haveno/core/offer/OfferBookService.java b/core/src/main/java/haveno/core/offer/OfferBookService.java index 16faa81e57..50981a8fa6 100644 --- a/core/src/main/java/haveno/core/offer/OfferBookService.java +++ b/core/src/main/java/haveno/core/offer/OfferBookService.java @@ -149,6 +149,20 @@ public class OfferBookService { Offer offer = new Offer(offerPayload); offer.setPriceFeedService(priceFeedService); announceOfferRemoved(offer); + + // check if invalid offers are now valid + synchronized (invalidOffers) { + for (Offer invalidOffer : new ArrayList(invalidOffers)) { + try { + validateOfferPayload(invalidOffer.getOfferPayload()); + removeInvalidOffer(invalidOffer.getId()); + replaceValidOffer(invalidOffer); + announceOfferAdded(invalidOffer); + } catch (Exception e) { + // ignore + } + } + } } }); }, OfferBookService.class.getSimpleName()); @@ -298,20 +312,6 @@ public class OfferBookService { synchronized (offerBookChangedListeners) { offerBookChangedListeners.forEach(listener -> listener.onRemoved(offer)); } - - // check if invalid offers are now valid - synchronized (invalidOffers) { - for (Offer invalidOffer : new ArrayList(invalidOffers)) { - try { - validateOfferPayload(invalidOffer.getOfferPayload()); - removeInvalidOffer(invalidOffer.getId()); - replaceValidOffer(invalidOffer); - announceOfferAdded(invalidOffer); - } catch (Exception e) { - // ignore - } - } - } } private boolean hasValidOffer(String offerId) { diff --git a/desktop/src/main/java/haveno/desktop/main/offer/offerbook/OfferBookViewModel.java b/desktop/src/main/java/haveno/desktop/main/offer/offerbook/OfferBookViewModel.java index 821b081454..9a52902f3e 100644 --- a/desktop/src/main/java/haveno/desktop/main/offer/offerbook/OfferBookViewModel.java +++ b/desktop/src/main/java/haveno/desktop/main/offer/offerbook/OfferBookViewModel.java @@ -174,9 +174,11 @@ abstract class OfferBookViewModel extends ActivatableViewModel { tradeCurrencyListChangeListener = c -> fillCurrencies(); // refresh filter on changes - offerBook.getOfferBookListItems().addListener((ListChangeListener) c -> { - filterOffers(); - }); + // TODO: This is removed because it's expensive to re-filter offers for every change (high cpu for many offers). + // This was used to ensure offer list is fully refreshed, but is unnecessary after refactoring OfferBookService to clone offers? + // offerBook.getOfferBookListItems().addListener((ListChangeListener) c -> { + // filterOffers(); + // }); filterItemsListener = c -> { final Optional highestAmountOffer = filteredItems.stream()