1 /*
2  * Copyright (C) 2022-2023 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 MISCSERVICES_PASTEBOARD_HI_VIEW_ADAPTER_H
17 #define MISCSERVICES_PASTEBOARD_HI_VIEW_ADAPTER_H
18 
19 #include <map>
20 #include <mutex>
21 #include <string>
22 #include <sys/time.h>
23 #include <vector>
24 
25 #include "dfx_code_constant.h"
26 #include "dfx_types.h"
27 #include "paste_data.h"
28 #include "hisysevent_c.h"
29 
30 namespace OHOS {
31 namespace MiscServices {
32 enum DataConsumingLevel : std::int32_t {
33     DATA_LEVEL_ONE = 0,
34     DATA_LEVEL_TWO,
35     DATA_LEVEL_THREE,
36     DATA_LEVEL_FOUR,
37     DATA_LEVEL_FIVE,
38     DATA_LEVEL_SIX,
39     DATA_LEVEL_SEVEN,
40 };
41 enum TimeConsumingLevel : std::int32_t {
42     TIME_LEVEL_ONE = 0,
43     TIME_LEVEL_TWO,
44     TIME_LEVEL_THREE,
45     TIME_LEVEL_FOUR,
46     TIME_LEVEL_FIVE,
47     TIME_LEVEL_SIX,
48     TIME_LEVEL_SEVEN,
49     TIME_LEVEL_EIGHT,
50     TIME_LEVEL_NINE,
51     TIME_LEVEL_TEN,
52     TIME_LEVEL_ELEVEN,
53 };
54 
55 class API_EXPORT HiViewAdapter {
56 public:
57     ~HiViewAdapter();
58 
59     static inline const char *PASTEBOARD_STATE = "PASTEBOARD_STATE";
60     static inline const char *COPY_STATE = "COPY_STATE";
61     static inline const char *PASTE_STATE = "PASTE_STATE";
62     static inline const char *PASTEBOARD_DOMAIN = "PASTEBOARD";
63 
64     static void ReportPasteboardFault(int dfxCode, const PasteboardFaultMsg &msg);
65     static void ReportTimeConsumingStatistic(const TimeConsumingStat &stat);
66     static void ReportPasteboardBehaviour(const PasteboardBehaviourMsg &msg);
67     static void StartTimerThread();
68     static std::map<int, int> InitDataMap();
69     static std::map<int, int> InitTimeMap();
70 
71     static void ReportUseBehaviour(PasteData& pastData, const char* state, int32_t result);
72 
73 private:
74     static void InvokePasteBoardBehaviour();
75     static void InitializeTimeConsuming(int initFlag);
76     static void CopyTimeConsumingCount(int dataLevel, int timeLevel);
77     static void PasteTimeConsumingCount(int dataLevel, int timeLevel);
78     static void RemotePasteTimeConsumingCount(int dataLevel, int timeLevel);
79     static void CopyTimeConsuming(const TimeConsumingStat &stat, int level);
80     static void PasteTimeConsuming(const TimeConsumingStat &stat, int level);
81     static const char *GetDataLevel(int dataLevel);
82     static void InvokeTimeConsuming();
83     static void ReportBehaviour(std::map<std::string, int> &behaviour, const char *statePasteboard);
84     static void ReportStatisticEvent(
85         const std::vector<std::map<int, int>> &timeConsumingStat, const std::string &pasteboardState);
86 
87     static std::mutex timeConsumingMutex_;
88     static std::vector<std::map<int, int>> copyTimeConsumingStat_;
89     static std::vector<std::map<int, int>> pasteTimeConsumingStat_;
90     static std::vector<std::map<int, int>> remotePasteTimeConsumingStat_;
91 
92     static std::mutex behaviourMutex_;
93     static std::map<std::string, int> copyPasteboardBehaviour_;
94     static std::map<std::string, int> pastePasteboardBehaviour_;
95     static std::map<std::string, int> remotePastePasteboardBehaviour_;
96 
97     static std::map<int, int> dataMap_;
98     static std::map<int, int> timeMap_;
99 
100     static std::string CoverEventID(int dfxCode);
101 
102 private:
103     static std::mutex runMutex_;
104     static bool running_;
105 
106     static inline constexpr int ONE_DAY_IN_HOURS = 24;
107     static inline constexpr int EXEC_HOUR_TIME = 23;
108     static inline constexpr int EXEC_MIN_TIME = 60;
109     static inline constexpr int ONE_MINUTE_IN_SECONDS = 60;
110     static inline constexpr int ONE_HOUR_IN_SECONDS = 1 * 60 * 60; // 1 hour
111 
112     // statistic key
113     static inline const char *ZERO_TO_HUNDRED_KB = "ZERO_TO_HUNDRED_KB";
114     static inline const char *HUNDRED_TO_FIVE_HUNDREDS_KB = "HUNDRED_TO_FIVE_HUNDREDS_KB";
115     static inline const char *FIVE_HUNDREDS_TO_THOUSAND_KB = "FIVE_HUNDREDS_TO_THOUSAND_KB";
116     static inline const char *ONE_TO_FIVE_MB = "ONE_TO_FIVE_MB";
117     static inline const char *FIVE_TO_TEN_MB = "FIVE_TO_TEN_MB";
118     static inline const char *TEN_TO_FIFTY_MB = "TEN_TO_FIFTY_MB";
119     static inline const char *OVER_FIFTY_MB = "OVER_FIFTY_MB";
120     static inline const char *CONSUMING_DATA = "CONSUMING_DATA";
121     static inline const char *DATA_LEVEL = "DATA_LEVEL";
122     static inline constexpr const char *NET_TYPE = "NET_TYPE";
123     // behaviour key
124     static inline const char *TOP_ONE_APP = "TOP_ONE_APP";
125     static inline const char *TOP_TOW_APP = "TOP_TOW_APP";
126     static inline const char *TOP_THREE_APP = "TOP_THREE_APP";
127     static inline const char *TOP_FOUR_APP = "TOP_FOUR_APP";
128     static inline const char *TOP_FIVE_APP = "TOP_FIVE_APP";
129     static inline const char *TOP_SIX_APP = "TOP_SIX_APP";
130     static inline const char *TOP_SEVEN_APP = "TOP_SEVEN_APP";
131     static inline const char *TOP_EIGHT_APP = "TOP_EIGHT_APP";
132     static inline const char *TOP_NINE_APP = "TOP_NINE_APP";
133     static inline const char *TOP_TEN_APP = "TOP_TEN_APP";
134 
135     static inline constexpr const char *REMOTE_PASTE_STATE = "REMOTE_PASTE_STATE";
136 
137     // use behaviour key
138     static inline const char *BOOTTIME = "BOOTTIME";
139     static inline const char *WALLTIME = "WALLTIME";
140     static inline const char *RESULT = "RESULT";
141     static inline const char *OPERATE_APP = "OPERATE_APP";
142     static inline const char *PRI_MIME_TYPE = "PRI_MIME_TYPE";
143     static inline const char *ISLOCALPASTE = "ISLOCALPASTE";
144     static inline const char *ISREMOTE = "ISREMOTE";
145     static inline const char *SHAREOPTION = "SHAREOPTION";
146 
147     static inline const int INIT_COPY_TIME_SONSUMING = 7;
148     static inline const int INIT_PASTE_TIME_SONSUMING = 8;
149     static inline constexpr const int INIT_REMOTE_PASTE_TIME_SONSUMING = 9;
150 };
151 } // namespace MiscServices
152 } // namespace OHOS
153 #endif // MISCSERVICES_PASTEBOARD_HI_VIEW_ADAPTER_H
154