mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
* Merge #12783: macOS: disable AppNap during sync 1e0f3c44992fb82e6bf36c2ef9277b0759c17c4c macOS: disable AppNap during sync (Alexey Ivanov) Pull request description: Code based on pull/5804. Tested only on macOS 10.13.3 and should support 10.9+. What macOS versions bitcoin core currently supports? Tree-SHA512: 85809b8d8d8a05169437b4268988da0b7372c29c6da3223ebdc106dc16dcb6d3caa5c52ace3591467005b50a63fd8b2ab1cb071cb4f450032932df25d5063315 * Refactor * Drop `#include <memory>` from `src/qt/bitcoingui.h` Was included by mistake.
This commit is contained in:
parent
7eeee33144
commit
d57cbc615b
@ -97,9 +97,6 @@
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
|
||||
<key>LSAppNapIsDisabled</key>
|
||||
<string>True</string>
|
||||
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<string>True</string>
|
||||
|
||||
|
@ -103,7 +103,8 @@ QT_MOC_CPP = \
|
||||
|
||||
BITCOIN_MM = \
|
||||
qt/macdockiconhandler.mm \
|
||||
qt/macnotificationhandler.mm
|
||||
qt/macnotificationhandler.mm \
|
||||
qt/macos_appnap.mm
|
||||
|
||||
QT_MOC = \
|
||||
qt/dash.moc \
|
||||
@ -142,6 +143,7 @@ BITCOIN_QT_H = \
|
||||
qt/intro.h \
|
||||
qt/macdockiconhandler.h \
|
||||
qt/macnotificationhandler.h \
|
||||
qt/macos_appnap.h \
|
||||
qt/modaloverlay.h \
|
||||
qt/masternodelist.h \
|
||||
qt/networkstyle.h \
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "utilitydialog.h"
|
||||
|
||||
#ifdef ENABLE_WALLET
|
||||
#include "privatesend/privatesend-client.h"
|
||||
#include "walletframe.h"
|
||||
#include "walletmodel.h"
|
||||
#endif // ENABLE_WALLET
|
||||
@ -266,6 +267,10 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *
|
||||
connect(progressBar, SIGNAL(clicked(QPoint)), this, SLOT(showModalOverlay()));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
m_app_nap_inhibitor = new CAppNapInhibitor;
|
||||
#endif
|
||||
}
|
||||
|
||||
BitcoinGUI::~BitcoinGUI()
|
||||
@ -277,6 +282,7 @@ BitcoinGUI::~BitcoinGUI()
|
||||
if(trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu)
|
||||
trayIcon->hide();
|
||||
#ifdef Q_OS_MAC
|
||||
delete m_app_nap_inhibitor;
|
||||
delete appMenuBar;
|
||||
MacDockIconHandler::cleanup();
|
||||
#endif
|
||||
@ -950,6 +956,19 @@ void BitcoinGUI::updateHeadersSyncProgressLabel()
|
||||
|
||||
void BitcoinGUI::setNumBlocks(int count, const QDateTime& blockDate, double nVerificationProgress, bool header)
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
// Disabling macOS App Nap on initial sync, disk, reindex operations and mixing.
|
||||
bool disableAppNap = !masternodeSync.IsSynced();
|
||||
#ifdef ENABLE_WALLET
|
||||
disableAppNap |= privateSendClient.fPrivateSendRunning;
|
||||
#endif // ENABLE_WALLET
|
||||
if (disableAppNap) {
|
||||
m_app_nap_inhibitor->disableAppNap();
|
||||
} else {
|
||||
m_app_nap_inhibitor->enableAppNap();
|
||||
}
|
||||
#endif // Q_OS_MAC
|
||||
|
||||
if (modalOverlay)
|
||||
{
|
||||
if (header)
|
||||
|
@ -19,6 +19,10 @@
|
||||
#include <QPushButton>
|
||||
#include <QSystemTrayIcon>
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
#include <qt/macos_appnap.h>
|
||||
#endif
|
||||
|
||||
class ClientModel;
|
||||
class NetworkStyle;
|
||||
class Notificator;
|
||||
@ -131,6 +135,10 @@ private:
|
||||
HelpMessageDialog *helpMessageDialog;
|
||||
ModalOverlay *modalOverlay;
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
CAppNapInhibitor* m_app_nap_inhibitor = nullptr;
|
||||
#endif
|
||||
|
||||
/** Keep track of previous number of blocks, to detect progress */
|
||||
int prevBlocks;
|
||||
int spinnerFrame;
|
||||
|
24
src/qt/macos_appnap.h
Normal file
24
src/qt/macos_appnap.h
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright (c) 2011-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_QT_MACOS_APPNAP_H
|
||||
#define BITCOIN_QT_MACOS_APPNAP_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
class CAppNapInhibitor final
|
||||
{
|
||||
public:
|
||||
explicit CAppNapInhibitor();
|
||||
~CAppNapInhibitor();
|
||||
|
||||
void disableAppNap();
|
||||
void enableAppNap();
|
||||
|
||||
private:
|
||||
class CAppNapImpl;
|
||||
std::unique_ptr<CAppNapImpl> impl;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_QT_MACOS_APPNAP_H
|
71
src/qt/macos_appnap.mm
Normal file
71
src/qt/macos_appnap.mm
Normal file
@ -0,0 +1,71 @@
|
||||
// Copyright (c) 2011-2018 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "macos_appnap.h"
|
||||
|
||||
#include <AvailabilityMacros.h>
|
||||
#include <Foundation/NSProcessInfo.h>
|
||||
#include <Foundation/Foundation.h>
|
||||
|
||||
class CAppNapInhibitor::CAppNapImpl
|
||||
{
|
||||
public:
|
||||
~CAppNapImpl()
|
||||
{
|
||||
if(activityId)
|
||||
enableAppNap();
|
||||
}
|
||||
|
||||
void disableAppNap()
|
||||
{
|
||||
if (!activityId)
|
||||
{
|
||||
@autoreleasepool {
|
||||
const NSActivityOptions activityOptions =
|
||||
NSActivityUserInitiatedAllowingIdleSystemSleep &
|
||||
~(NSActivitySuddenTerminationDisabled |
|
||||
NSActivityAutomaticTerminationDisabled);
|
||||
|
||||
id processInfo = [NSProcessInfo processInfo];
|
||||
if ([processInfo respondsToSelector:@selector(beginActivityWithOptions:reason:)])
|
||||
{
|
||||
activityId = [processInfo beginActivityWithOptions: activityOptions reason:@"Temporarily disable App Nap for dash-qt."];
|
||||
[activityId retain];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void enableAppNap()
|
||||
{
|
||||
if(activityId)
|
||||
{
|
||||
@autoreleasepool {
|
||||
id processInfo = [NSProcessInfo processInfo];
|
||||
if ([processInfo respondsToSelector:@selector(endActivity:)])
|
||||
[processInfo endActivity:activityId];
|
||||
|
||||
[activityId release];
|
||||
activityId = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
NSObject* activityId;
|
||||
};
|
||||
|
||||
CAppNapInhibitor::CAppNapInhibitor() : impl(new CAppNapImpl()) {}
|
||||
|
||||
CAppNapInhibitor::~CAppNapInhibitor() = default;
|
||||
|
||||
void CAppNapInhibitor::disableAppNap()
|
||||
{
|
||||
impl->disableAppNap();
|
||||
}
|
||||
|
||||
void CAppNapInhibitor::enableAppNap()
|
||||
{
|
||||
impl->enableAppNap();
|
||||
}
|
Loading…
Reference in New Issue
Block a user