13c3173acSopenharmony_ci/* 23c3173acSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 33c3173acSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43c3173acSopenharmony_ci * you may not use this file except in compliance with the License. 53c3173acSopenharmony_ci * You may obtain a copy of the License at 63c3173acSopenharmony_ci * 73c3173acSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83c3173acSopenharmony_ci * 93c3173acSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103c3173acSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113c3173acSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123c3173acSopenharmony_ci * See the License for the specific language governing permissions and 133c3173acSopenharmony_ci * limitations under the License. 143c3173acSopenharmony_ci */ 153c3173acSopenharmony_ci 163c3173acSopenharmony_ci#include "qos_policy.h" 173c3173acSopenharmony_ci#include <unistd.h> 183c3173acSopenharmony_ci#include "concurrent_task_log.h" 193c3173acSopenharmony_ci 203c3173acSopenharmony_cistatic struct QosPolicyDatas g_defaultQosPolicy = { 213c3173acSopenharmony_ci .policyType = QOS_POLICY_DEFAULT, 223c3173acSopenharmony_ci .policyFlag = QOS_FLAG_ALL, 233c3173acSopenharmony_ci .policys = { 243c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 253c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 263c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 273c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 283c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 293c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 303c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 313c3173acSopenharmony_ci } 323c3173acSopenharmony_ci}; 333c3173acSopenharmony_ci 343c3173acSopenharmony_cistatic struct QosPolicyDatas g_foregroundQosPolicy = { 353c3173acSopenharmony_ci .policyType = QOS_POLICY_FRONT, 363c3173acSopenharmony_ci .policyFlag = QOS_FLAG_ALL, 373c3173acSopenharmony_ci .policys = { 383c3173acSopenharmony_ci {10, 10, 0, 200, 0, SCHED_POLICY_OTHER}, 393c3173acSopenharmony_ci {5, 5, 0, 250, 0, SCHED_POLICY_OTHER}, 403c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 413c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 423c3173acSopenharmony_ci {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 433c3173acSopenharmony_ci {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER}, 443c3173acSopenharmony_ci {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER}, 453c3173acSopenharmony_ci#else 463c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 473c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 483c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 493c3173acSopenharmony_ci#endif 503c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 513c3173acSopenharmony_ci } 523c3173acSopenharmony_ci}; 533c3173acSopenharmony_ci 543c3173acSopenharmony_cistatic struct QosPolicyDatas g_backgroundQosPolicy = { 553c3173acSopenharmony_ci .policyType = QOS_POLICY_BACK, 563c3173acSopenharmony_ci .policyFlag = QOS_FLAG_ALL & ~QOS_FLAG_RT, 573c3173acSopenharmony_ci .policys = { 583c3173acSopenharmony_ci {15, 15, 0, 150, 0, SCHED_POLICY_OTHER}, 593c3173acSopenharmony_ci {10, 10, 0, 200, 0, SCHED_POLICY_OTHER}, 603c3173acSopenharmony_ci {5, 5, 0, 250, 0, SCHED_POLICY_OTHER}, 613c3173acSopenharmony_ci {0, 0, 0, 300, 0, SCHED_POLICY_OTHER}, 623c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 633c3173acSopenharmony_ci {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER}, 643c3173acSopenharmony_ci {-5, -5, 0, 350, 0, SCHED_POLICY_OTHER}, 653c3173acSopenharmony_ci#else 663c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 673c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 683c3173acSopenharmony_ci#endif 693c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 703c3173acSopenharmony_ci } 713c3173acSopenharmony_ci}; 723c3173acSopenharmony_ci 733c3173acSopenharmony_cistatic struct QosPolicyDatas g_systemServerQosPolicy = { 743c3173acSopenharmony_ci .policyType = QOS_POLICY_SYSTEM_SERVER, 753c3173acSopenharmony_ci .policyFlag = QOS_FLAG_ALL, 763c3173acSopenharmony_ci .policys = { 773c3173acSopenharmony_ci {10, 10, 0, 200, 0, SCHED_POLICY_OTHER}, 783c3173acSopenharmony_ci {5, 5, 0, 250, 0, SCHED_POLICY_OTHER}, 793c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 803c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 813c3173acSopenharmony_ci {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 823c3173acSopenharmony_ci {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER}, 833c3173acSopenharmony_ci {-10, -10, 0, 1024, 1, SCHED_POLICY_FIFO | SCHED_RESET_ON_FORK}, 843c3173acSopenharmony_ci#else 853c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 863c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 873c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 883c3173acSopenharmony_ci#endif 893c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 903c3173acSopenharmony_ci } 913c3173acSopenharmony_ci}; 923c3173acSopenharmony_ci 933c3173acSopenharmony_cistatic struct QosPolicyDatas g_focusQosPolicy = { 943c3173acSopenharmony_ci .policyType = QOS_POLICY_FOCUS, 953c3173acSopenharmony_ci .policyFlag = QOS_FLAG_ALL, 963c3173acSopenharmony_ci .policys = { 973c3173acSopenharmony_ci {10, 10, 0, 200, 0, SCHED_POLICY_OTHER}, 983c3173acSopenharmony_ci {5, 5, 0, 250, 0, SCHED_POLICY_OTHER}, 993c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1003c3173acSopenharmony_ci#ifdef QOS_EXT_ENABLE 1013c3173acSopenharmony_ci {-10, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1023c3173acSopenharmony_ci {-10, -10, 0, 1024, 0, SCHED_POLICY_OTHER}, 1033c3173acSopenharmony_ci {-10, -10, 0, 1024, 1, SCHED_POLICY_RT_EX | SCHED_RESET_ON_FORK}, 1043c3173acSopenharmony_ci#else 1053c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1063c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1073c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1083c3173acSopenharmony_ci#endif 1093c3173acSopenharmony_ci {0, 0, 0, 1024, 0, SCHED_POLICY_OTHER}, 1103c3173acSopenharmony_ci } 1113c3173acSopenharmony_ci}; 1123c3173acSopenharmony_ci 1133c3173acSopenharmony_cinamespace OHOS { 1143c3173acSopenharmony_cinamespace ConcurrentTask { 1153c3173acSopenharmony_ciint QosPolicy::SetQosPolicy(struct QosPolicyDatas *policyDatas) 1163c3173acSopenharmony_ci{ 1173c3173acSopenharmony_ci return QosPolicySet(policyDatas); 1183c3173acSopenharmony_ci} 1193c3173acSopenharmony_ci 1203c3173acSopenharmony_civoid QosPolicy::Init() 1213c3173acSopenharmony_ci{ 1223c3173acSopenharmony_ci int ret; 1233c3173acSopenharmony_ci 1243c3173acSopenharmony_ci ret = SetQosPolicy(&g_defaultQosPolicy); 1253c3173acSopenharmony_ci if (ret) { 1263c3173acSopenharmony_ci CONCUR_LOGE("%{public}d set g_defaultQosPolicy failed", getuid()); 1273c3173acSopenharmony_ci } 1283c3173acSopenharmony_ci 1293c3173acSopenharmony_ci ret = SetQosPolicy(&g_foregroundQosPolicy); 1303c3173acSopenharmony_ci if (ret) { 1313c3173acSopenharmony_ci CONCUR_LOGE("%{public}d set g_foregroundQosPolicy failed", getuid()); 1323c3173acSopenharmony_ci } 1333c3173acSopenharmony_ci 1343c3173acSopenharmony_ci ret = SetQosPolicy(&g_backgroundQosPolicy); 1353c3173acSopenharmony_ci if (ret) { 1363c3173acSopenharmony_ci CONCUR_LOGE("%{public}d set g_backgroundQosPolicy failed", getuid()); 1373c3173acSopenharmony_ci } 1383c3173acSopenharmony_ci 1393c3173acSopenharmony_ci ret = SetQosPolicy(&g_systemServerQosPolicy); 1403c3173acSopenharmony_ci if (ret) { 1413c3173acSopenharmony_ci CONCUR_LOGE("%{public}d set g_systemServerQosPolicy failed", getuid()); 1423c3173acSopenharmony_ci } 1433c3173acSopenharmony_ci 1443c3173acSopenharmony_ci ret = SetQosPolicy(&g_focusQosPolicy); 1453c3173acSopenharmony_ci if (ret) { 1463c3173acSopenharmony_ci CONCUR_LOGE("%{public}d set g_focusQosPolicy failed", getuid()); 1473c3173acSopenharmony_ci } 1483c3173acSopenharmony_ci 1493c3173acSopenharmony_ci CONCUR_LOGI("set qos policy finish"); 1503c3173acSopenharmony_ci} 1513c3173acSopenharmony_ci} 1523c3173acSopenharmony_ci} 153