目录

使用perfHint系统性能优化(C/C++)

从API版本26.0.0版本开始,新增支持perfHint系统性能优化特性。

perfHint(Performance Hint)是系统性能优化的简称,用于向系统提供性能场景信息。

场景介绍

允许应用程序向系统提供性能场景信息,系统据此在API生效范围内尽可能优化应用性能,以提升用户体验。

约束与限制

接口说明

perfHint系统性能优化场景提供以下C接口,具体API说明详见接口文档。

接口名 描述
HMS_FAST_PerfHintConfigBuilder_Create 创建构建器实例。
HMS_FAST_PerfHintConfigBuilder_Destroy 销毁构建器。
HMS_FAST_PerfHintConfigBuilder_SetSceneType 设置需要系统性能优化的场景类型。
HMS_FAST_PerfHintConfigBuilder_SetSceneState 设置需要系统性能优化的场景状态。
HMS_FAST_PerfHintConfigBuilder_SetDurationType 设置需要系统性能优化的持续时间选项。
HMS_FAST_PerfHintConfigBuilder_SetTids 设置需要优化QoS的线程ID。
HMS_FAST_PerfHintConfigBuilder_Build 创建系统性能优化配置参数。
HMS_FAST_PerfHintConfig_Destroy 销毁系统性能优化配置参数。
HMS_FAST_SchedulingOptimization_PerfHint 系统性能优化接口,允许应用程序向系统提供性能场景信息,系统据此在API生效范围内尽可能优化应用性能,以提升用户体验。

使用指导

应用要使用SchedulingOptimization提供的系统性能优化能力,需要添加对应的头文件。

[h2]在CMake脚本中链接动态库

find_library(
    lib_scheduling_optimization
    NAMES scheduling_optimization.z
)
target_link_libraries(entry PRIVATE ${lib_scheduling_optimization})

[h2]添加头文件

需要开发者引入scheduling_optimization.h头文件后,才可以使用系统性能优化相关API。

#include "FASTKit/scheduling_optimization.h"

完整示例

应用可以通过HMS_FAST_SchedulingOptimization_PerfHint接口进行系统性能优化。

#include <iostream>
#include "FASTKit/scheduling_optimization.h"

void demoSchedulingOptimization()
{
    HMS_FAST_PerfHintConfigBuilder* builder = nullptr;
    HMS_FAST_PerfHintConfig* config = nullptr;
    HMS_FAST_SchedulingOptimization_ErrorCode ret;
    int tids[] = {1001, 1002};

    // 创建构建器
    ret = HMS_FAST_PerfHintConfigBuilder_Create(&builder);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to create builder, error: " << ret << std::endl;
        return;
    }

    // 设置场景类型
    ret = HMS_FAST_PerfHintConfigBuilder_SetSceneType(builder, HMS_FAST_APP_LAUNCH);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to set scene type, error: " << ret << std::endl;
        goto cleanup;
    }

    // 设置场景状态
    ret = HMS_FAST_PerfHintConfigBuilder_SetSceneState(builder, HMS_FAST_BEGIN);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to set scene state, error: " << ret << std::endl;
        goto cleanup;
    }

    // 设置持续时间类型
    ret = HMS_FAST_PerfHintConfigBuilder_SetDurationType(builder, HMS_FAST_SHORT);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to set duration type, error: " << ret << std::endl;
        goto cleanup;
    }

    // 设置线程ID(可选)
    ret = HMS_FAST_PerfHintConfigBuilder_SetTids(builder, tids, 2);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to set tids, error: " << ret << std::endl;
        goto cleanup;
    }

    // 构建配置参数
    ret = HMS_FAST_PerfHintConfigBuilder_Build(builder, &config);
    if (ret != HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cerr << "Failed to build config, error: " << ret << std::endl;
        goto cleanup;
    }

    // 执行系统性能优化
    ret = HMS_FAST_SchedulingOptimization_PerfHint(config);
    if (ret == HMS_FAST_ERR_SCHEDULING_OPTIMIZATION_SUCCESS) {
        std::cout << "Scheduling optimization performed successfully" << std::endl;
    } else {
        std::cerr << "Failed to perform scheduling optimization, error: " << ret << std::endl;
    }

cleanup:
    // 销毁配置参数
    if (config) {
        HMS_FAST_PerfHintConfig_Destroy(config);
    }

    // 销毁构建器
    if (builder) {
        HMS_FAST_PerfHintConfigBuilder_Destroy(builder);
    }
}