processing-android
processing-android copied to clipboard
OutOfMemoryError reported by apps using processing-core
The "ANRs & crashes" report from Google indicate that java.lang.OutOfMemoryError come from:
A ) 60% processing.core.PApplet.loadImage on this line: params[0].wichArray[params[0].pImageNum] = loadImage(params[0].file);
in this class
///////////////////////////////////////////////////////////////////////////////
private class BitmapWorkerTask extends AsyncTask<MyTaskParams, Void, PImage> {
// load image in background.
@Override
protected PImage doInBackground(MyTaskParams... params) {
params[0].wichArray[params[0].pImageNum] = loadImage(params[0].file);
return params[0].wichArray[params[0].pImageNum];
}
@Override
protected void onPostExecute(PImage result) {
ressourceCounter++;
}
}
///////////////////////////////////////////////////////////////////////////////
B ) +- 30 % The ones that point me to a "ProGuard deobfuscation" file:
processing.opengl.PGL.allocateDirectIntBuffer processing.opengl.Texture.loadPixels processing.core.PApplet.loadImage processing.core.PImage.loadPixels
@rich-gg This may be related to #482. In fact, that issue is making me thing that, in general, loading pixels arrays is causing these out-of-memory errors. For instance, every time a PImage is drawn with the OpenGL renderers, its pixels array gets allocated to copy the image to GPU memory. If you are dealing with many high-res images, all these pixel array could exhaust the memory available to the app. In the case of the issue I'm making reference to, the app save the curren contexts of the screen into a pixels array that needs to be big enough to store the entire screen, which could have a very large resolution. Anyways, finally looking into this :-)
Opened a separate issue on the use of pixels to initialize textures: #483
Both #482 and #483 are now fixed, and will push a new release of the mode soon.