From 78e5a00a68c51236f5fca187778990303a0c4e30 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 26 Jul 2016 20:31:06 -0700 Subject: [PATCH] Only poll the ZeroTier service when the menu or Network List are visible. Reduces CPU idle prevention by a a LOT --- ZeroTier One/AppDelegate.swift | 14 ++++++++++++-- ZeroTier One/NetworkMonitor.swift | 12 +++++++++++- ZeroTier One/ShowNetworksViewController.swift | 6 ++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/ZeroTier One/AppDelegate.swift b/ZeroTier One/AppDelegate.swift index 224f4d24e..298363aa1 100644 --- a/ZeroTier One/AppDelegate.swift +++ b/ZeroTier One/AppDelegate.swift @@ -9,7 +9,7 @@ import Cocoa @NSApplicationMain -class AppDelegate: NSObject, NSApplicationDelegate { +class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { @IBOutlet weak var window: NSWindow! @@ -85,6 +85,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { self.showAbout() } } + + monitor.updateNetworkInfo() } func applicationWillTerminate(aNotification: NSNotification) { @@ -181,6 +183,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { func buildMenu() { let menu = NSMenu() + menu.delegate = self if let s = self.status { menu.addItem(NSMenuItem(title: "Node ID: \(s.address)", action: #selector(AppDelegate.copyNodeID), keyEquivalent: "")) @@ -230,7 +233,6 @@ class AppDelegate: NSObject, NSApplicationDelegate { menu.addItem(NSMenuItem(title: "Quit ZeroTier One", action: #selector(AppDelegate.quit), keyEquivalent: "q")) statusItem.menu = menu - } func toggleNetwork(sender: NSMenuItem) { @@ -253,5 +255,13 @@ class AppDelegate: NSObject, NSApplicationDelegate { pasteboard.setString(s.address, forType: NSPasteboardTypeString) } } + + func menuWillOpen(menu: NSMenu) { + monitor.start() + } + + func menuDidClose(menu: NSMenu) { + monitor.stop() + } } diff --git a/ZeroTier One/NetworkMonitor.swift b/ZeroTier One/NetworkMonitor.swift index 2071fbbb9..c744e6e82 100644 --- a/ZeroTier One/NetworkMonitor.swift +++ b/ZeroTier One/NetworkMonitor.swift @@ -21,7 +21,14 @@ class NetworkMonitor: NSObject { override init() { super.init() + } + deinit { + timer?.invalidate() + } + + func start() { + NSLog("ZeroTier monitor started") timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(updateNetworkInfo), @@ -29,8 +36,11 @@ class NetworkMonitor: NSObject { repeats: true) } - deinit { + + func stop() { + NSLog("ZeroTier monitor stopped") timer?.invalidate() + timer = nil } private func dataFile() -> String { diff --git a/ZeroTier One/ShowNetworksViewController.swift b/ZeroTier One/ShowNetworksViewController.swift index 97b52eb73..41d088de3 100644 --- a/ZeroTier One/ShowNetworksViewController.swift +++ b/ZeroTier One/ShowNetworksViewController.swift @@ -35,6 +35,8 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable override func viewWillAppear() { super.viewWillAppear() visible = true + + netMonitor.start() } override func viewWillDisappear() { @@ -43,6 +45,8 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable let filePath = dataFile() NSKeyedArchiver.archiveRootObject(self.networkList, toFile: filePath) visible = false + + netMonitor.stop() } func deleteNetworkFromList(nwid: String) { @@ -55,8 +59,6 @@ class ShowNetworksViewController: NSViewController, NSTableViewDelegate, NSTable if visible { tableView?.reloadData() } - - NSLog("Visible? \(visible)") } // NSTableViewDataSource