CIQ Simulator Stats (Profiler / Mem Usage) - How useful and reliable are these tools in comparing older vs newer models?

Can someone kindly help me understand how to navigate these tools, their information, and the difference between older and newer watch models?

For the same watch face code, according to the Profiler, an onUpdate() call yields an average time of 70,000 (us) on a Fenix 7 Pro, and that's significantly higher than the 40,000 (us) on a Fenix 6 Pro.  Shouldn't it be the other way around?

As for the memory usage stats, peak memory is at 99KB for the Fenix 6 Pro and 45KB for the Fenix 7 Pro. What's behind this difference?

Thanks,

G.

Top Replies

  • is usually fixing these quickly (so it's worth to open a bug report, i.e an issue on GitHub) and for the riskier features there are switches in the settings. However you're right, there is some…

All Replies

  • As for the memory usage stats, peak memory is at 99KB for the Fenix 6 Pro and 45KB for the Fenix 7 Pro. What's behind this difference?

    The f6 is a ciq 3 device while the f7 is ciq 4.

    With ciq 4, there a common graphics pool where things like images, bitmaps, and custom fonts are stored, while on a ciq 3 device, the same things are stored in your app's memory.

    With one of my watch faces, peak is 31k for the f6 and 24k for the f7.  It uses a few custom fonts. For the difference you see, I'm thinking you use images and bitmaps.

    If you look at the venu. you see it has a max of 507k for a watch face, while the venu 2. the max  is 123k.  The venu 2 is CIQ 4, so things are stored in the graphics pool and not the apps memory as they are on the venu, so the max size is smaller.

  • As far as the profiler, I just ran the same test, and the avg for the f6 is 1445us while for the f7, 9179us.  Zero difference in the code, and I'm thinking that accessing the graphics pool is slower and accounts for the difference. 

    With both the memory viewer and profiler, you may want to stick with the same target device when doing comparisons after making changes.

  • I'm thinking you use images and bitmaps.

    Yes. It's an analog watch face that utilizes bitmap fonts to draw the dial.

    With ciq 4, there a common graphics pool where things like images, bitmaps, and custom fonts are stored, while on a ciq 3 device, the same things are stored in your app's memory.

    Thanks. I suspected as much. Wouldn't it be important to also have stats on the graphics pool usage? Shall I assume we have no control over where to store those images?  

  • f6 is 1445us while for the f7, 9179us. 

    Thanks. That's still a significant relative difference across devices.

  • Thanks. I suspected as much. Wouldn't it be important to also have stats on the graphics pool usage? Shall I assume we have no control over where to store those images?  

    I know it's been requested, but I've not seen that.  Also note the graphics pool is common to all apps, including the native ones.  In the sim, you can't see the impact from the other apps on a real device.  The size of the graphics pool also differs per device.

    On CIQ 4 devices, the graphics pool is always used.  on pre ciq 4 devices, the apps's own memory is used..

  • With ciq 4, there a common graphics pool where things like images, bitmaps, and custom fonts are stored, while on a ciq 3 device, the same things are stored in your app's memory.

    I stumbled upon this thread when trying to understand the memory usage stats I get from different devices as well.

    What exactly does the CIQ3 apps store on bitmaps in the app's memory?

    I have been comparing an Fenix 6 and an Epix 2 Pro.

    I also see a higher memory allocation for <Data> for the F6 (12kB) than for the Epix2Pro (9.4kB). However, the F6 has about 20kB of PNGs as bitmaps in the resources, but only a quarter or so are loaded. So it is obviously not loading all bitmap resources in <Data>. Maybe it is only the ones actually loaded?

    Interesting is also that the F6 takes up more <Code> than the Epix2Pro, despite having a smaller code base (some features are omitted for older models). Is it common that the compiler for older devices is less efficient?

  • You should always look at the code+data size together because some if the optimizations were moving things between them (which doesn't really matter when both are in the memory)

  • In this case, the Epix2Pro beats the Fenix6 in both <Data> and <Code>. Even with the Fenix6 having a smaller code base and bitmaps with lower resolution.

    It's nice to see these optimizations on newer device, but unfortunately it is the older ones where the memory is tight. In the scenario I am currently testing I have 53.0kB peak on the Epix2Pro, versus 763.6kB available. On the Fenix 6 it is 58.6kB peak, versus 59.9kB available.

  • Yes, unfortunately you are right about the old devices. Have a look at the Prettier Monkey C VSCode extension, it has an optimizer that can reduce significantly the memory usage on old devices. I could include some new features after I started using it.

  • Have a look at the Prettier Monkey C VSCode extension, it has an optimizer that can reduce significantly the memory usage on old devices.

    Are there any specific settings in Prettier Monkey C that you can recommend?

    I tested it with the standard settings, it only netted me 0.1-0.2kB in my current test scenario on the Fenix6.