I want to optimize parallax scrolling with several large bitmaps. On my Nexus 5, everything looks smooth, and the Traceview dump looks like this:

The doFrame () method uses ~ 18 ms to complete.
However, when using my Nexus 7 or Android 6 emulator (Genymotion), the Traceview dump looks like this:

The nSyncAndDrawFrame method now takes ~ 300 ms when starting the same application.
The interesting part of the code is in the onDraw () of the parallax view:
for (int i = 0; i < parallaxConfigManager.getNumberOfLayers(); i++) { Bitmap layer = parallaxConfigManager.getLayer(i); float dx = (offset * parallaxConfigManager.getScrollSpeedFactorForLayer(i) * imageScaleFactor); int offset = Math.round(-parallaxConfigManager.getBoardOffset(i) + dx); srcRect.offsetTo(offset, 0); int realWidth = getRealWidth(srcRect, layer.getWidth()); float scaleFactor = destRect.width() / (float) srcRect.width(); if (realWidth < srcRect.width()) { destRect.left = (int) (scaleFactor * Math.max(0, -srcRect.left)); destRect.right = destRect.left + (int) (scaleFactor * realWidth); } destRect.bottom = Math.min(screenHeight, (int) (scaleFactor * layer.getHeight())); canvas.drawBitmap(layer, srcRect, destRect, paint); destRect.left = 0; destRect.right = screenWidth; }
However, this code is fast enough. The slower part is in android nSyncAndDrawFrame () androids.
What could be the problem? Is there a way to get deeper into this problem? Right now this method is a black box because I do not see my own call stack.
android bitmap parallax
Ulrich scheller
source share