We have a custom board with i.MX6DL SoC which is running Android 7.1.2 based on the NXP sources. Performance is decent at 720p (HDMI) and worse but tolerable at 1080p. However, when we run Android 8.0.0 (also from NXP sources) on the same board, UI performance is terrible even at 720p. We also ran tests with SabreSD (i.MX6Q) on Android 8.0.0 and see sluggish UI transitions, although it is slightly better than our i.MX6DL board (not surprising given the extra two cores and increased L2 cache).
Is anyone else seeing poor UI performance with Android 8.0 on i.MX6 or i.MX7? For example, there is a significant lag in the Settings app between touch and the subsequent transition to the new activity. On Android 7.1.2, there was very little delay. Note that we have 2GB RAM, and most of that is free on Android 8, so we don't seem to be memory constrained.
What could be the cause of the poor UI in Android 8.0.0 on i.MX6? I know with Android 8, Google introduced the VNDK and it seems NXP has migrated Vivante to that and the ION graphic memory allocator. Are these just not optimized for the i.MX6? Was the focus for Android 8.0 primarily on i.MX8?
Thanks for any input.
I have an open case with NXP, but it is not progressing. We and our FAEs are pushing and supposedly the NXP internal team has picked up the case, but I get no feedback.
This certainly seems like a big regression in the graphics drivers or HAL that affects i.MX6 generally. I know i.MX6 isn't exactly new, but the performance on Android 8 should be similar to Android 7, which was passable. I view this as a defect for i.MX6 that can and should be fixed.
The image filter does not test GPU, it is test SKIA(software), It doesn't use GPU. So, gpu enabled or disabled, the number is the same.
PassMark 2D Image Filter results on Android 8.0.0 is slower
than it is on Android 7.1.2. The root cause is the allocated
buffer from ION is not cacheable when usage include READ_OFTEN
or WRITE_OFTEN. After add falg ION_FLAG_CACHED when allocate
memory from ION_HEAP_TYPE_SYSTEM_CONTIG pool, performance has
some improvement but still has gap comparing the result with
Android 7.1.2, if repeat run Image Filter test can get better
score, seems the performane related with cache hit.
It seems the ION_FLAG_CACHED flag is set by default. However, the 2D performance is still very slow. Is there anything else we can try?
vendor/nxp-opensource/kernel_imx/drivers/staging/android/uapi/ion.h:60:#define ION_FLAG_CACHED 1
Hello Allen,
The focus of Android 8, was always for the i.MX8 family processors, but we migrated to the i.MX6QuadPlus and i.MX7 since it was in our roadmap, nevertheless we see some decent performance on our test, we are testing using the pre-build images that we provide in our official web page and the SABRE Boards.
Can you please try this way to see if the performance it is not satisfactory for you?
Thanks in advanced for your feedback
Best Regards
TIC Support Team
I think I have discovered a problem with all i.MX6 variants in the 2D graphics area. I observe the window display latency on Android 8 on i.MX6 Android 8.0.0 demo images for both SabreSD-DL and SabreSD-Quad. Note that if you run PassMark Mobile on the boards, the 2D Image Filter test is about 10x slower on Android 8 than on Android 7. I suspect the 2D operations in this test are also the cause of the poor window display performance.
Note that this affects i.MX6 DualLite and Quad.
Details:
We managed to find a SabreSD with i.MX6DL (which is discontinued) and compared its performance with our custom board. Window display latency (from touch to window display) is about the same on both DL boards with Android 8, and the latency is significantly better on Android 7 with both boards.
We have a stripped down Android app that I instrumented to mark the start time as the "on click" method for a button that shows a Fragment with a few simple text boxes, and I mark the stop time as the "on focus" for the first text box in the fragment. This is actually a subset of the latency, since it doesn't include the time from touch (lift) detection to "on click" or the longer time between "on focus" and the window completely finished drawing. But it is representative of the delay and shows how much the delay increases from Android 7 to Android 8.
I ran the window latency test app and PassMark Mobile on:
I am attaching a spreadsheet with the results, but notice the following:
We are looking for a Sabre board with i.MX6DL so we can compare the NXP target platform performance to that of our own board. Once we have one, we will try the sabresd_6dq image. Today, the only other 6DL board we have is Wandboard, which only has images for Android 7.1.1 and I gave up trying to get Android 8 running on it (mainly u-boot & kernel problems). The SabreSD with i.MX6DL will be ideal since that is the reference platform for NXP.
The SabreSD-6Quad that we used for comparison is running the Android 8.0.0-1.0.0 image from the NXP site. I tried disabling cores 2-3 through the sysfs, but that doesn't really simulate the 6DL, so getting the SabreSD-6DL will be key.
Thanks for the quick response!
Allen