vassalengine / vassal

VASSAL, the open-source boardgame engine
https://vassalengine.org
GNU Lesser General Public License v2.1
429 stars 103 forks source link

Vassal 3.7.0 Out of Memory errors with large maps (e.g. Blind Swords) #12721

Closed riverwanderer closed 1 year ago

riverwanderer commented 1 year ago

Blind Swords players have reported memory issues with Vassal 3.7 that they have not experienced with Vassal 3.6.

Blind Swords modules have a large hi-res map - e.g. 50Mb, 10275 × 6675 pixels). Example module can be downloaded here.

Log file from someone who experienced the issue: errorLog-3.7.0.txt

User report: "When I loaded the game module, I kept getting 'Out of Memory' messages. The only way I could get out of this was to restart my laptop ... which I had to do multiple times. My Heap size had been 512*, the same as Wayne's. In the end, I increased it to 3000 but I still had map loading problems, with some of the map having greyed out blocks. We struggled through our session and got to the end, but it was a continuous pain when scrolling across the map and waiting for it all to reload."

*The user was unaware of the tiling Heap that is set in the module manager, so he is referring here to the module heap size. This user was using a Windows machine with 32Gb of memory.

I installed the module on a MacBook with 8Gb memory. I did not experience out of memory errors, though scrolling was impeded somewhat by screen repainting that took 2-3 seconds. In my test, tiling heap was 6144Mb and module heap was 512Mb.

uckelman commented 1 year ago

If I set the module max heap to 2048MB with a 3.7.1 development build, I tiles aren't being evicted from the cache as they're being painted. At 1024MB, they are.

uckelman commented 1 year ago

With 3.6.19, 1024MB max heap seems to be sufficient.

BrentEaston commented 1 year ago

commit d9ff788aabfff7745030d90cbeedd27a87d12386 Author: Joel Uckelman uckelman@nomic.net Date: Mon Aug 7 13:06:24 2023 +0100

Extend Boards by a pixel to account for location rounding.

.../src/main/java/VASSAL/build/module/Map.java | 30 ++- .../VASSAL/build/module/map/boardPicker/Board.java | 43 +++- .../tools/imageop/FixedScaleOpBitmapImpl.java | 254 +++++++++++++++++++++ 3 files changed, 315 insertions(+), 12 deletions(-) create mode 100644 vassal-app/src/main/java/VASSAL/tools/imageop/FixedScaleOpBitmapImpl.java

uckelman commented 1 year ago

Fixed by PR #12727.