2858826921
Testing has demonstrated that del self.x does not make the memory used to store x available for garbage collection. There is clearly an additional reference from another place. In fact *after* del self.x then the memory can be made available for GC by assignment (e.g. self.x = None). However I haven't found how to release this reference and there is nothing in self.__dict__ that can help. For now we'll use a twp-step process where we set the variable to None before deleting it. This has a big impact on memory usage. For Software it is almost 1k (a.k.a. about 10% impact on free RAM). Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
# SPDX-License-Identifier: LGPL-3.0-or-later
|
|
# Copyright (C) 2020 Daniel Thompson
|
|
"""Watch Face Chooser
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
A tool to select a suitable watch face.
|
|
|
|
.. figure:: res/FacesApp.png
|
|
:width: 179
|
|
|
|
The app is intended to be enabled by default and has, therefore, been carefully
|
|
structured to minimize memory usage when the app is not active.
|
|
"""
|
|
|
|
import wasp
|
|
import icons
|
|
|
|
class FacesApp():
|
|
"""Choose a default watch face."""
|
|
NAME = 'Faces'
|
|
ICON = icons.clock
|
|
|
|
def foreground(self):
|
|
"""Activate the application."""
|
|
choices = []
|
|
choices.append(('clock', 'Clock'))
|
|
choices.append(('chrono', 'Chrono'))
|
|
choices.append(('dual_clock', 'DualClock'))
|
|
choices.append(('fibonacci_clock', 'FibonacciClock'))
|
|
choices.append(('word_clock', 'WordClock'))
|
|
|
|
self.choices = choices
|
|
self.choice = 0
|
|
self.si = wasp.widgets.ScrollIndicator()
|
|
|
|
self._update()
|
|
wasp.system.request_event(wasp.EventMask.SWIPE_UPDOWN)
|
|
|
|
def background(self):
|
|
self.choices = None
|
|
del self.choices
|
|
self.choice = None
|
|
del self.choice
|
|
self.si = None
|
|
del self.si
|
|
|
|
# When the watch face redraws then the change to the scrolling indicator
|
|
# is a little subtle. Let's provide some haptic feedback too so the user
|
|
# knows something has happened.
|
|
wasp.watch.vibrator.pulse()
|
|
|
|
def swipe(self, event):
|
|
"""Notify the application of a touchscreen swipe event."""
|
|
choice = self.choice
|
|
if event[0] == wasp.EventType.DOWN:
|
|
choice = choice - 1 if choice > 0 else len(self.choices)-1
|
|
if event[0] == wasp.EventType.UP:
|
|
choice = choice + 1 if choice < len(self.choices)-1 else 0
|
|
self.choice = choice
|
|
|
|
mute = wasp.watch.display.mute
|
|
mute(True)
|
|
self._update()
|
|
mute(False)
|
|
|
|
def _update(self):
|
|
"""Draw the display from scratch."""
|
|
wasp.watch.drawable.fill()
|
|
(module, label) = self.choices[self.choice]
|
|
wasp.system.register('apps.{}.{}App'.format(module, label), watch_face=True)
|
|
wasp.system.quick_ring[0].preview()
|
|
self.si.draw()
|