aboutsummaryrefslogtreecommitdiff
path: root/engines/toon/path.cpp
diff options
context:
space:
mode:
authorBluddy2011-04-28 17:06:03 +0300
committerBluddy2011-04-28 18:02:07 +0300
commit781e178df3c71441adf96c15c92edad6eab2b59d (patch)
treecb8831f2a8b7c099ce9aa0dbf4d9a9addea06ff2 /engines/toon/path.cpp
parent78a0db127ab5ccbe53adf86dde1f040364ad3282 (diff)
downloadscummvm-rg350-781e178df3c71441adf96c15c92edad6eab2b59d.tar.gz
scummvm-rg350-781e178df3c71441adf96c15c92edad6eab2b59d.tar.bz2
scummvm-rg350-781e178df3c71441adf96c15c92edad6eab2b59d.zip
TOON: Reduced fragmentation by using a fixed value for pathfinding allocation
Toon makes some rather big allocations for pathfinding, alternating between 3MB and 6MB). In small devices, this creates really bad fragmentation which can cause crashes. I set the size at a fixed 6MB.
Diffstat (limited to 'engines/toon/path.cpp')
-rw-r--r--engines/toon/path.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/engines/toon/path.cpp b/engines/toon/path.cpp
index 677876fd8e..26355863f6 100644
--- a/engines/toon/path.cpp
+++ b/engines/toon/path.cpp
@@ -409,7 +409,11 @@ void PathFinding::init(Picture *mask) {
_height = mask->getHeight();
_currentMask = mask;
_heap->unload();
- _heap->init(_width * _height);
+ // In order to reduce memory fragmentation on small devices, we use the maximum
+ // possible size here which is TOON_BACKBUFFER_WIDTH. Even though this is
+ // 1280 as opposed to the possible 640, it actually helps memory allocation on
+ // those devices.
+ _heap->init(TOON_BACKBUFFER_WIDTH * _height); // should really be _width
delete[] _gridTemp;
_gridTemp = new int32[_width*_height];
}