How to win with onPartialUpdate()

So I've noticed there's not many examples or explanations when it comes to using the, very strict, partial screen update feature.
First off let me start by saying WOW IT IS STRICT!

If you decide to use this feature it is definitely suited more towards digital clock faces where things on the screen don't really move, just change.
But I'm not really a digital clock face person and much prefer a simple analog face. Challenge accepted!

The onPartialUpdate() method works by only updating a small section of the screen at a time every 1 second. Anything on the screen you wish to redraw is allowed up to an averaged 30ms (yes, milliseconds) of processing time from the auxiliary low-power processor. The device averages the time it takes over the course of 1 minute. If anything you choose to update during the minute pushes the total average over the allowed total average of 30ms then the partial update feature will simply not work and your clock face will turn to stone after 1 minute.... until you wake the device again (pressing a button or tilting device).
Other devices may allow up to 50ms of processing time, but to work with all devices then you should observe the 30ms limit.

Just to put things in perspective, using the partial update to draw a simple black rectangle covering the entire screen will cost you around 50ms, which already exceeds the 30ms limit.... BUT, purely theoretically, if you were to only draw that rectangle once during the 1 minute and draw nothing else then your average crashes down to 0.8ms! (50/60=0.8) Result! So you can update large portions of the screen, just not very often.

I started by creating a simple analog watch face by drawing primitive lines on the canvas to represent an hour, minute and second hand in the main onUpdate section. Easy peasy.
Next, I add the same code to the onPartialUpdate() method to redraw the second hand every second, but using the setClip function to only redraw where the second hand is going to be by dividing the screen into sections that I will use to update, like so:


for example, when the second hand is anywhere between 28 and 32 I only want to redraw the middle to bottom of the screen, as shown.




if (clockTime.sec > 58 or clockTime.sec < 2) {
dc.setClip(93, 0, 54, 126);
}
else if (clockTime.sec > 1 and clockTime.sec < 14) {
dc.setClip(114, 0, 126, 126);
}

etc, etc.


But then I realized that by clearing that section of the screen and just drawing the seconds would "delete" the hour and minute hands, so those had to be redrawn as well. More processing power! But alternating between smaller and larger sections helps to bring down that all important millisecond average.



After a lot of struggling I think I got there. It doesn't look like much but still fun.
Feel free to have a look at the source that I've attached.
Also, the watchface is called tik on the Garmin IQ Store.