jamulus/mac/activity.mm
AronVietti 6ecada7f87 Fixes issue with AppNap causing stuttering/silence in background
Adds a mac only Activity class that controls the NSProccessInfo
Activity options. This exposes a C++ interface for the
Objective C calls and handles the Activity Id lifecycle. Currently
sets the Activity to background, latency critical, sleep disabled.

Added the Activity calls to main.cpp, starting it in the same
location that Windows priority is set, and ending it right before
the app exits.

Updated Jamulus.pro to add the new files and required lib.
2020-05-28 00:38:41 -07:00

54 lines
1.7 KiB
Plaintext

/******************************************************************************\
* Copyright (c) 2004-2020
*
* Author(s):
* Volker Fischer
*
******************************************************************************
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
\******************************************************************************/
#include "activity.h"
#include <Foundation/Foundation.h>
class CActivityId
{
public:
id<NSObject> activityId;
};
CActivity::CActivity() : pActivity(new CActivityId()) {}
CActivity::~CActivity()
{
delete pActivity;
}
void CActivity::BeginActivity()
{
NSActivityOptions options = NSActivityBackground | NSActivityIdleSystemSleepDisabled | NSActivityLatencyCritical;
pActivity->activityId = [[NSProcessInfo processInfo] beginActivityWithOptions: options reason:@"Jamulus provides low latency audio processing and should not be inturrupted by system throttling."];
}
void CActivity::EndActivity()
{
[[NSProcessInfo processInfo] endActivity: pActivity->activityId];
pActivity->activityId = nil;
}