10b9a52e3Sopenharmony_ci/*
20b9a52e3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
30b9a52e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40b9a52e3Sopenharmony_ci * you may not use this file except in compliance with the License.
50b9a52e3Sopenharmony_ci * You may obtain a copy of the License at
60b9a52e3Sopenharmony_ci *
70b9a52e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80b9a52e3Sopenharmony_ci *
90b9a52e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100b9a52e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110b9a52e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120b9a52e3Sopenharmony_ci * See the License for the specific language governing permissions and
130b9a52e3Sopenharmony_ci * limitations under the License.
140b9a52e3Sopenharmony_ci */
150b9a52e3Sopenharmony_ci
160b9a52e3Sopenharmony_ci#ifndef OHOS_FRAME_AWARE_SCHED_COMMON_INCLUDE_RTG_INTERFACE_H
170b9a52e3Sopenharmony_ci#define OHOS_FRAME_AWARE_SCHED_COMMON_INCLUDE_RTG_INTERFACE_H
180b9a52e3Sopenharmony_ci
190b9a52e3Sopenharmony_ci#include <string>
200b9a52e3Sopenharmony_ci#include <vector>
210b9a52e3Sopenharmony_ci
220b9a52e3Sopenharmony_cinamespace OHOS {
230b9a52e3Sopenharmony_cinamespace RME {
240b9a52e3Sopenharmony_ciusing namespace std;
250b9a52e3Sopenharmony_ci
260b9a52e3Sopenharmony_ci#define MAX_TID_NUM 5
270b9a52e3Sopenharmony_ci#define MAX_SUBPROCESS_NUM 8
280b9a52e3Sopenharmony_ci#define MULTI_FRAME_NUM 5
290b9a52e3Sopenharmony_ci
300b9a52e3Sopenharmony_cistruct rtg_enable_data {
310b9a52e3Sopenharmony_ci    int enable;
320b9a52e3Sopenharmony_ci    int len;
330b9a52e3Sopenharmony_ci    char *data;
340b9a52e3Sopenharmony_ci};
350b9a52e3Sopenharmony_ci
360b9a52e3Sopenharmony_cistruct rtg_str_data {
370b9a52e3Sopenharmony_ci    int type;
380b9a52e3Sopenharmony_ci    int len;
390b9a52e3Sopenharmony_ci    char *data;
400b9a52e3Sopenharmony_ci};
410b9a52e3Sopenharmony_ci
420b9a52e3Sopenharmony_cistruct proc_state_data {
430b9a52e3Sopenharmony_ci    int grp_id;
440b9a52e3Sopenharmony_ci    int state_param;
450b9a52e3Sopenharmony_ci};
460b9a52e3Sopenharmony_ci
470b9a52e3Sopenharmony_cienum grp_ctrl_cmd {
480b9a52e3Sopenharmony_ci    CMD_CREATE_RTG_GRP,
490b9a52e3Sopenharmony_ci    CMD_ADD_RTG_THREAD,
500b9a52e3Sopenharmony_ci    CMD_REMOVE_RTG_THREAD,
510b9a52e3Sopenharmony_ci    CMD_CLEAR_RTG_GRP,
520b9a52e3Sopenharmony_ci    CMD_DESTROY_RTG_GRP
530b9a52e3Sopenharmony_ci};
540b9a52e3Sopenharmony_ci
550b9a52e3Sopenharmony_cistruct rtg_grp_data {
560b9a52e3Sopenharmony_ci    int rtg_cmd;
570b9a52e3Sopenharmony_ci    int grp_id;
580b9a52e3Sopenharmony_ci    int prio_type;
590b9a52e3Sopenharmony_ci    int rt_cnt;
600b9a52e3Sopenharmony_ci    int tid_num;
610b9a52e3Sopenharmony_ci    int tids[MAX_TID_NUM];
620b9a52e3Sopenharmony_ci};
630b9a52e3Sopenharmony_ci
640b9a52e3Sopenharmony_cistruct rtg_info {
650b9a52e3Sopenharmony_ci    int rtg_num;
660b9a52e3Sopenharmony_ci    int rtgs[MULTI_FRAME_NUM];
670b9a52e3Sopenharmony_ci};
680b9a52e3Sopenharmony_ci
690b9a52e3Sopenharmony_cienum rtg_sched_cmdid {
700b9a52e3Sopenharmony_ci    SET_ENABLE = 1,
710b9a52e3Sopenharmony_ci    SET_RTG,
720b9a52e3Sopenharmony_ci    SET_CONFIG,
730b9a52e3Sopenharmony_ci    SET_RTG_ATTR,
740b9a52e3Sopenharmony_ci    BEGIN_FRAME_FREQ = 5,
750b9a52e3Sopenharmony_ci    END_FRAME_FREQ,
760b9a52e3Sopenharmony_ci    END_SCENE,
770b9a52e3Sopenharmony_ci    SET_MIN_UTIL,
780b9a52e3Sopenharmony_ci    SET_MARGIN,
790b9a52e3Sopenharmony_ci    LIST_RTG,
800b9a52e3Sopenharmony_ci    LIST_RTG_THREAD,
810b9a52e3Sopenharmony_ci    SEARCH_RTG,
820b9a52e3Sopenharmony_ci    GET_ENABLE,
830b9a52e3Sopenharmony_ci    SET_MAX_UTIL,
840b9a52e3Sopenharmony_ci    RTG_CTRL_MAX_NR,
850b9a52e3Sopenharmony_ci};
860b9a52e3Sopenharmony_ci
870b9a52e3Sopenharmony_cibool GetAppExpelAbility(const std::string &appBundleName);
880b9a52e3Sopenharmony_ci
890b9a52e3Sopenharmony_ciextern "C" {
900b9a52e3Sopenharmony_ci    int EnableRtg(bool flag);
910b9a52e3Sopenharmony_ci    int AddThreadToRtg(int tid, int grpId, int prioType = 0, bool isBlue = false);
920b9a52e3Sopenharmony_ci    int AddThreadsToRtg(vector<int> tids, int grpId, int prioType = 0, bool isBlue = false);
930b9a52e3Sopenharmony_ci    int RemoveRtgThread(int tid, bool isBlue = false);
940b9a52e3Sopenharmony_ci    int RemoveRtgThreads(vector<int> tids, bool isBlue = false);
950b9a52e3Sopenharmony_ci    int DestroyRtgGrp(int grpId);
960b9a52e3Sopenharmony_ci    int SetFrameRateAndPrioType(int rtgId, int rate, int rtgType);
970b9a52e3Sopenharmony_ci    int BeginFrameFreq(int stateParam);
980b9a52e3Sopenharmony_ci    int EndFrameFreq(int stateParam);
990b9a52e3Sopenharmony_ci    int EndScene(int grpId);
1000b9a52e3Sopenharmony_ci    int SetMinUtil(int stateParam);
1010b9a52e3Sopenharmony_ci    int SetMaxUtil(int grpId, int stateParam);
1020b9a52e3Sopenharmony_ci    int SetMargin(int stateParam);
1030b9a52e3Sopenharmony_ci    int SearchRtgForTid(int tid);
1040b9a52e3Sopenharmony_ci    int GetRtgEnable();
1050b9a52e3Sopenharmony_ci}
1060b9a52e3Sopenharmony_ci} // namespace RME
1070b9a52e3Sopenharmony_ci} // namespace OHOS
1080b9a52e3Sopenharmony_ci#endif // OHOS_FRAME_AWARE_SCHED_COMMON_INCLUDE_RTG_INTERFACE_H
109