Image.Type.Filled and Image.fillAmount performance on Android

Hello All,

I am playing around little with new UI system in Unity3D and trying to find out how it behaves on Android.
In overall I am really impressed with performance level achieved by the Team, but I was able to introduce stuttering by inserting only few elements on scene.

The goal I am trying to get is muti-timer:

40057-timer.png

So, blue thing is one timer and red thing is second timer.
Both timers represents of course different amount of time so animates with different speed.

With new UI I was able to achieve above thing by using three Images which are lying one on another.
Red and Blue Images are Type=Filled and in Update or Coroutine (tested both) I am changing fillAmount property. Black Image is simple Image with no actions on it. It’s more like background.

This “Image combination” fills up around 60-70% of whole screen.

On the screen there is also one small Image (dot) flying around in front of the timer. (on whole screen) Thanks to that I am checking how smooth all works.
I am moving small dot in Update by applying Translate.

In Editor all works smoothly.
But on Android device (Samsung Galaxy Tab2, Galaxy Mini2) there is stuttering. I mean my small reference dot is not moving smoothly but jumps like there were some lags.
Only on Galaxy S2 everything works ok all the time.

When one of the timers is ending round, so fillAmount goes to 0 then dot starts to move more smoothly.

Also when I disable one of timers (setActive = false) then it runs ok on all my test devices.

All of sprites used here are circles so I am aware that there are many transparent pixels around and this for sure has influence on performance. But I did also test when there was solid color in background and there was no difference. Stuttering was still there. So it looks like transparency is not a problem.

My question. Is my approach reasonable and good?
Are there some found issues with overlapping of UI elements?

I am working on Unity3D free, so I don’t have access to Profiler. Unfortunately.

Thanks for help!

I think I found the problem here…
After few more tests I found that CanvasScaler can be the guilty one.

I have used “Scale with screen size” option with referenced 1024x600
resolution.
And I have noticed that if resolution of game screen was different than
referenced, then whole Canvas was scaled. Property “Scale” on RectTransform
was modified.
We can see it even in Editor.
If I set reference resolution to resolution of my testing device eg. for
galaxy Tab2 1200x800, Scale is 1 and everything works smoothly with all
sprites enabled and on scene.

I am surprised. Does this “Scale” property have so much influence on
performance? Why? With only four gameObjects on scene? I don’t even want to know
what would happen if I add 100…

I guess that to make this simple test work smoothly on different
resolutions I will have to write my own Scaler, which will not touch Scale
property, but Width and Height of every of my Images… Sad.