ComponentKit/TransactionalDataSources/Common/Internal/CKDataSourceQOSHelper.mm (26 lines of code) (raw):
/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#import "CKDataSourceQOSHelper.h"
static qos_class_t qosClassFromDataSourceQOS(CKDataSourceQOS qos)
{
switch (qos) {
case CKDataSourceQOSUserInteractive:
return QOS_CLASS_USER_INTERACTIVE;
case CKDataSourceQOSUserInitiated:
return QOS_CLASS_USER_INITIATED;
case CKDataSourceQOSDefault:
return QOS_CLASS_DEFAULT;
}
}
dispatch_block_t blockUsingDataSourceQOS(dispatch_block_t block, CKDataSourceQOS qos, BOOL isBackgroundMode)
{
switch (qos) {
case CKDataSourceQOSUserInteractive:
case CKDataSourceQOSUserInitiated:
return dispatch_block_create_with_qos_class(DISPATCH_BLOCK_ENFORCE_QOS_CLASS, qosClassFromDataSourceQOS(qos), 0, block);
case CKDataSourceQOSDefault:
if (isBackgroundMode) {
/// We should enforce the block to be executed with `QOS_CLASS_BACKGROUND` if background mode is on.
return dispatch_block_create_with_qos_class(DISPATCH_BLOCK_ENFORCE_QOS_CLASS, QOS_CLASS_BACKGROUND, 0, block);
} else {
/// If the desired QOS is the default there is no need to enforce it by dispatching async on the _workQueue defined QOS.
return block;
}
}
}