def testAPIConformity(self): c = NonRegisteredCache("c") mgr = CacheMemoryManager() # dont clean up while we are testing mgr.disable() import weakref d = NonRegisteredCache("testwr") s = weakref.WeakSet() s.add(d) del d gc.collect() l = list(s) assert len(l) == 0, l[0].name c1 = NonRegisteredCache("c1") c1a = c1 c2 = NonRegisteredCache("c2") mgr.addFirstClassCache(c) mgr.addCache(c1) mgr.addCache(c1a) mgr.addCache(c2) fcc = mgr.getFirstClassCaches() assert len(fcc) == 1, "too many first class caches" assert c in fcc, "did not register fcc correctly" del fcc cs = mgr.getCaches() assert len(cs) == 3, "wrong number of caches" refcs = [c, c1, c2] for cache in refcs: assert cache in cs, "{} not stored".format(cache.name) del cs del refcs del cache del c1a gc.collect() cs = mgr.getCaches() assert c1 in cs assert len(cs) == 3, str([x.name for x in cs]) del cs del c2 gc.collect() cs = mgr.getCaches() assert len(cs) == 2, str([x.name for x in cs])
def testAPIConformity(self): c = NonRegisteredCache("c") mgr = CacheMemoryManager() # dont clean up while we are testing mgr.disable() import weakref d = NonRegisteredCache("testwr") s = weakref.WeakSet() s.add(d) del d gc.collect() l = list(s) assert len(l) == 0, l[0].name c1 = NonRegisteredCache("c1") c1a = c1 c2 = NonRegisteredCache("c2") mgr.addFirstClassCache(c) mgr.addCache(c1) mgr.addCache(c1a) mgr.addCache(c2) fcc = mgr.getFirstClassCaches() assert len(fcc) == 1, "too many first class caches" assert c in fcc, "did not register fcc correctly" del fcc cs = mgr.getCaches() assert len(cs) == 3, "wrong number of caches" refcs = [c, c1, c2] for cache in refcs: assert cache in cs, "{} not stored".format(cache.name) del cs del refcs del cache del c1a gc.collect() cs = mgr.getCaches() assert c1 in cs assert len(cs) == 3, str([x.name for x in cs]) del cs del c2 gc.collect() cs = mgr.getCaches() assert len(cs) == 2, str([x.name for x in cs])
class MemUsageDialog(QDialog): def __init__(self, parent=None, update=True): QDialog.__init__(self, parent=parent) layout = QVBoxLayout() self.tree = QTreeWidget() layout.addWidget(self.tree) self.setLayout(layout) self._mgr = CacheMemoryManager() self._tracked_caches = {} # tree setup code self.tree.setHeaderLabels( ["cache", "memory", "roi", "dtype", "type", "info", "id"]) self._idIndex = self.tree.columnCount() - 1 self.tree.setColumnHidden(self._idIndex, True) self.tree.setSortingEnabled(True) self.tree.clear() self._root = TreeNode() # refresh every x seconds (see showEvent()) self.timer = QTimer(self) if update: self.timer.timeout.connect(self._updateReport) def _updateReport(self): # we keep track of dirty reports so we just have to update the tree # instead of reconstructing it reports = [] for c in self._mgr.getFirstClassCaches(): r = MemInfoNode() c.generateReport(r) reports.append(r) self._root.handleChildrenReports(reports, root=self.tree.invisibleRootItem()) def hideEvent(self, event): self.timer.stop() def showEvent(self, show): # update once so we don't have to wait for initial report self._updateReport() # update every 5 sec. self.timer.start(5 * 1000)
class MemUsageDialog(QDialog): def __init__(self, parent=None, update=True): QDialog.__init__(self, parent=parent) layout = QVBoxLayout() self.tree = QTreeWidget() layout.addWidget(self.tree) self.setLayout(layout) self._mgr = CacheMemoryManager() self._tracked_caches = {} # tree setup code self.tree.setHeaderLabels( ["cache", "memory", "roi", "dtype", "type", "info", "id"]) self._idIndex = self.tree.columnCount() - 1 self.tree.setColumnHidden(self._idIndex, True) self.tree.setSortingEnabled(True) self.tree.clear() self._root = TreeNode() # refresh every x seconds (see showEvent()) self.timer = QTimer(self) if update: self.timer.timeout.connect(self._updateReport) def _updateReport(self): # we keep track of dirty reports so we just have to update the tree # instead of reconstructing it reports = [] for c in self._mgr.getFirstClassCaches(): r = MemInfoNode() c.generateReport(r) reports.append(r) self._root.handleChildrenReports( reports, root=self.tree.invisibleRootItem()) def hideEvent(self, event): self.timer.stop() def showEvent(self, show): # update once so we don't have to wait for initial report self._updateReport() # update every 5 sec. self.timer.start(5*1000)