1

I'm doing a mobile app that intensively needs to use CPU and memory. For a week, I went on a microoptimizations rush that led to reducing the whole memory usage by 25% and CPU stopped peaking so often. That's good, but in some places the app still feels sluggish, especially in relatively old phones.

After optimizing code as much as I could (following close to every recommendation for this kind of optimizations), my next step focused on graphics. We are using SVG files, and for some reason, if we switch to a PNG file, the memory is drastically reduced, as well the CPU usage on interface generation, which in the end should lead to a faster UI change.

However, when you end up using the app, you barely notice the improvement, while the images look blurry, even if they're done with really sharp edges, and made perfectly for the screen. Also, it's using a process we cannot control to use a higher resolution image or a lower resource, so we've to stick with a one resolution.

As I mentioned, all of these are microoptimizations, meaning that if you just do one, there are no fireworks, but once you keep growing the list of changes and they stack up, the final status should be a good improvement. On the other hand, our designer is not pleased with the change, as he sees that if it's just a microoptimization, we should leave it with vector files.

I recognize myself that the change makes the app itself look poorly ambitious, compared to our previous versions, but since then, we haven't had any other client complaining about battery draining or the app being stale because of memory issues. So, after this.

Is a visually unnoticeable performance improvement a valid excuse to reduce graphics quality?

5
  • Quite simply, no - but you've contradicted yourself and said that you haven't had a client complain about battery drain or the app becoming stale, so it would appear that it's not unnoticeable - to the clients anyway. Have you done enough side-by-side testing to know that the performance change is minor? Your clients seem to disagree...
    – Charleh
    Nov 14, 2014 at 10:48
  • Hi @Charleh. To me, an absence of comments doesn't mean the issue is not there anymore. Reviews from Mobile stores are not really useful when they don't leave a message (well, often the comments are not useful enough, though), yet a bad rater could still have that problem and not telling us. Testing is done with a phone and a tablet that can handle pretty decently the app, but every device is different, so making any improvement to me is a must. Hence the question, would we benefit from doing this, or is this going to be our doom? Nov 14, 2014 at 11:17
  • I'd say that performance is a higher priority than graphical fidelity in this case, it really does depend on the app though - running a game at 20FPS with graphics on high can be frustrating vs running it at 100FPS with the graphics on low - it sounds like you want to optimise the app for all devices, so you need to cater for the lowest common denominator which is those devices that struggle with the CPU load of a vector based image format. The only thing I can't understand is why your memory usage would drop with PNG vs SVG, though it does depend on complexity of the SVGs
    – Charleh
    Nov 14, 2014 at 11:33
  • 1
    Also I don't understand how your PNGs can be blurry on a screen they are designed for. There is no distinction between a vector image and a PNG image when the PNG is rendered at a 1:1 ratio - the same pixels should be present in the same places. It sounds like you could have an issue with resampling... If you screenshot your vectors and then render them at the same size you should have the same graphics, unless you are scaling or resampling
    – Charleh
    Nov 14, 2014 at 11:35
  • Yeah @Charleh, I had doubts with that as well. It may be because my test device is not actually resampling at 1:1, but a little larger. I've tested it afterwards to an mdpi device (which should be the natural ratio), and it worked well. Also, the svgs are not that complex, but are massively used. I wouldn't say pngs are lighter, but we were able to use a spritesheet, since svg spritesheets might be slower. Nov 17, 2014 at 9:46

1 Answer 1

2

There is "see" (conscious observation) and there is "feel" (subconscious signal)

For example while 30 frames per seconds is the standard frame rate FPS for movies (33.33 ms between images) as this appears flicker free. However Android UI Project Butter set a target of 60 FPS (16.67 ms between images) because this provides "butter smooth" interactions.

Either way research indicates that should consider 50ms to be the limit for instantaneous interaction .

It appears that if you aren't measuring delay down to 16ms you can't get feel for the responsiveness user will "feel".

1
  • I'm pretty sure our app is not going to be voted as the fastest, since we have a barrier called emulated app. Since it's not native, I'm not able to take the most out of each phone, which is a pity. Thanks for taking the subconscious signal to collation. Nov 17, 2014 at 9:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.