1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "rme_core_sched.h"
17 #include <hitrace_meter.h>
18 #include <memory>
19 #include <string>
20 #include <unistd.h>
21 #include "rtg_interface.h"
22 #include "rme_log_domain.h"
23 
24 #undef LOG_TAG
25 #define LOG_TAG "ueaClient-RmeCoreSched"
26 
27 namespace OHOS {
28 namespace RME {
29 namespace {
30     constexpr int MARGIN_BEGIN = -3;
31     constexpr int MARGIN_MIDDLE = -5;
32     constexpr int MARGIN_END = -13;
33 }
RmeCoreSched()34 RmeCoreSched::RmeCoreSched() {}
35 
~RmeCoreSched()36 RmeCoreSched::~RmeCoreSched()
37 {
38     EnableRtg(false);
39     return;
40 }
41 
Init()42 bool RmeCoreSched::Init()
43 {
44     StartTrace(HITRACE_TAG_ACE, "FrameS-Init");
45     int ret = GetRtgEnable();
46     if (ret > 0) {
47         RME_LOGE("[Init]: rtgEnabled! scheme Open!ret: %{public}d", ret);
48     } else {
49         RME_LOGE("[Init]: do not enabled!ret: %{public}d", ret);
50     }
51     FinishTrace(HITRACE_TAG_ACE);
52     return ret;
53 }
54 
HandleBeginScene()55 void RmeCoreSched::HandleBeginScene()
56 {
57     HITRACE_METER(HITRACE_TAG_ACE);
58 }
59 
BeginFlushAnimation()60 void RmeCoreSched::BeginFlushAnimation()
61 {
62     m_pid = getpid();
63     if (m_rtg <= 0) {
64         m_rtg = SearchRtgForTid(m_pid);
65         if (m_rtg <= 0) {
66             return;
67         }
68     }
69     int ret = BeginFrameFreq(0);
70     m_uiTid = gettid();
71     if (!m_uiHasSend) {
72         StartTrace(HITRACE_TAG_ACE,
73             ("FrameS-Begin&AddThread-rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str());
74         m_uiHasSend = true;
75     } else {
76         StartTrace(HITRACE_TAG_ACE, "FrameS-Begin");
77     }
78     FinishTrace(HITRACE_TAG_ACE);
79     return;
80 }
81 
EndFlushAnimation()82 void RmeCoreSched::EndFlushAnimation() {}
83 
BeginFlushBuild()84 void RmeCoreSched::BeginFlushBuild()
85 {
86     StartTrace(HITRACE_TAG_ACE,
87         ("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_BEGIN)).c_str());
88     SetMargin(MARGIN_BEGIN);
89     FinishTrace(HITRACE_TAG_ACE);
90 }
91 
EndFlushBuild()92 void RmeCoreSched::EndFlushBuild() {}
93 
BeginFlushLayout()94 void RmeCoreSched::BeginFlushLayout() {}
95 
EndFlushLayout()96 void RmeCoreSched::EndFlushLayout() {}
97 
BeginFlushRender()98 void RmeCoreSched::BeginFlushRender()
99 {
100     StartTrace(HITRACE_TAG_ACE,
101         ("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_MIDDLE)).c_str());
102     SetMargin(MARGIN_MIDDLE);
103     FinishTrace(HITRACE_TAG_ACE);
104 }
105 
EndFlushRender()106 void RmeCoreSched::EndFlushRender() {}
107 
BeginFlushRenderFinish()108 void RmeCoreSched::BeginFlushRenderFinish() {}
109 
EndFlushRenderFinish()110 void RmeCoreSched::EndFlushRenderFinish() {}
111 
BeginProcessPostFlush()112 void RmeCoreSched::BeginProcessPostFlush() {}
113 
ProcessCommandsStart()114 void RmeCoreSched::ProcessCommandsStart() {}
115 
AnimateStart()116 void RmeCoreSched::AnimateStart()
117 {
118     if (m_rtg <= 0) {
119         return;
120     }
121 }
122 
RenderStart()123 void RmeCoreSched::RenderStart()
124 {
125     StartTrace(HITRACE_TAG_ACE,
126         ("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_END)).c_str());
127     SetMargin(MARGIN_END);
128     FinishTrace(HITRACE_TAG_ACE);
129 }
130 
SendCommandsStart()131 void RmeCoreSched::SendCommandsStart()
132 {
133     if (m_rtg <= 0) {
134         return;
135     }
136     StartTrace(HITRACE_TAG_ACE, "SendCommandsStart-EndFreq");
137     EndFrameFreq(0);
138     FinishTrace(HITRACE_TAG_ACE);
139 }
140 
HandleEndScene()141 void RmeCoreSched::HandleEndScene()
142 {
143     HITRACE_METER(HITRACE_TAG_ACE);
144     if (m_rtg <= 0) {
145         return;
146     }
147     int ret = 0;
148     m_uiHasSend = false;
149     StartTrace(HITRACE_TAG_ACE,
150         ("FrameS-EndFrameFreq-rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str());
151     FinishTrace(HITRACE_TAG_ACE);
152 }
153 } // namespace RME
154 } // OHOS
155