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 #ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_FRAME_REPORT_H
17 #define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_FRAME_REPORT_H
18 
19 #include <string>
20 
21 #include "base/utils/macros.h"
22 #include "base/utils/noncopyable.h"
23 
24 namespace OHOS::Ace {
25 using FrameInitFunc = void (*)();
26 using FrameGetEnableFunc = int (*)();
27 using BeginFlushAnimationFunc = void (*)();
28 using EndFlushAnimationFunc = void (*)();
29 using BeginFlushBuildFunc = void (*)();
30 using EndFlushBuildFunc = void (*)();
31 using BeginFlushLayoutFunc = void (*)();
32 using EndFlushLayoutFunc = void (*)();
33 using BeginFlushRenderFunc = void (*)();
34 using EndFlushRenderFunc = void (*)();
35 using BeginFlushRenderFinishFunc = void (*)();
36 using EndFlushRenderFinishFunc = void (*)();
37 using BeginProcessPostFlushFunc = void (*)();
38 using BeginListFlingFunc = void (*)();
39 using EndListFlingFunc = void (*)();
40 using FlushBeginFunc = void (*)();
41 using FlushEndFunc = void (*)();
42 using SetFrameParamFunc = void (*)(int, int, int, int);
43 using EnableSelfRenderFunc = void (*)();
44 using DisableSelfRenderFunc = void (*)();
45 
46 class ACE_EXPORT FrameReport final {
47 public:
48     static FrameReport& GetInstance();
49     void Init();
50     int GetEnable();
51     void BeginFlushAnimation();
52     void EndFlushAnimation();
53 
54     void BeginFlushBuild();
55     void EndFlushBuild();
56     void BeginFlushLayout();
57     void EndFlushLayout();
58     void BeginFlushRender();
59     void EndFlushRender();
60     void BeginFlushRenderFinish();
61     void EndFlushRenderFinish();
62     void BeginProcessPostFlush();
63     void BeginListFling();
64     void EndListFling();
65     void FlushBegin();
66     void FlushEnd();
67     void SetFrameParam(int requestId, int load, int schedFrameNum, int value);
68     void EnableSelfRender();
69     void DisableSelfRender();
70 
71 private:
72     FrameReport();
73     ~FrameReport();
74     bool LoadLibrary();
75     void CloseLibrary();
76     void* LoadSymbol(const char* symName);
77     int GetFrameReportEnable();
78     void* frameSchedHandle_ = nullptr;
79     bool frameSchedSoLoaded_ = false;
80     bool enable_ = false;
81 
82     ACE_EXPORT FrameInitFunc frameInitFunc_ = nullptr;
83     ACE_EXPORT FrameGetEnableFunc frameGetEnableFunc_ = nullptr;
84     ACE_EXPORT BeginFlushAnimationFunc beginFlushAnimationFunc_ = nullptr;
85     ACE_EXPORT EndFlushAnimationFunc endFlushAnimationFunc_ = nullptr;
86     ACE_EXPORT BeginFlushBuildFunc beginFlushBuildFunc_ = nullptr;
87     ACE_EXPORT EndFlushBuildFunc endFlushBuildFunc_ = nullptr;
88     ACE_EXPORT BeginFlushLayoutFunc beginFlushLayoutFunc_ = nullptr;
89     ACE_EXPORT EndFlushLayoutFunc endFlushLayoutFunc_ = nullptr;
90     ACE_EXPORT BeginFlushRenderFunc beginFlushRenderFunc_ = nullptr;
91     ACE_EXPORT EndFlushRenderFunc endFlushRenderFunc_ = nullptr;
92     ACE_EXPORT BeginFlushRenderFinishFunc beginFlushRenderFinishFunc_ = nullptr;
93     ACE_EXPORT EndFlushRenderFinishFunc endFlushRenderFinishFunc_ = nullptr;
94     ACE_EXPORT BeginProcessPostFlushFunc beginProcessPostFunc_ = nullptr;
95     ACE_EXPORT BeginListFlingFunc beginListFlingFunc_ = nullptr;
96     ACE_EXPORT EndListFlingFunc endListFlingFunc_ = nullptr;
97     ACE_EXPORT FlushBeginFunc flushBeginFunc_ = nullptr;
98     ACE_EXPORT FlushEndFunc flushEndFunc_ = nullptr;
99     ACE_EXPORT SetFrameParamFunc setFrameParamFunc_ = nullptr;
100     ACE_EXPORT EnableSelfRenderFunc enableSelfRenderFunc_ = nullptr;
101     ACE_EXPORT DisableSelfRenderFunc disableSelfRenderFunc_ = nullptr;
102 };
103 } // namespace OHOS::Ace
104 #endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_FRAME_REPORT_H
105