• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "hisysevent.h"
28 #include "paste_data.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 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 
63     static void ReportPasteboardFault(int dfxCode, const PasteboardFaultMsg &msg);
64     static void ReportTimeConsumingStatistic(const TimeConsumingStat &stat);
65     static void ReportPasteboardBehaviour(const PasteboardBehaviourMsg &msg);
66     static void StartTimerThread();
67     static std::map<int, int> InitDataMap();
68     static std::map<int, int> InitTimeMap();
69 
70     static void ReportUseBehaviour(PasteData& pastData, const char* state, int32_t result);
71 
72 private:
73     static void InvokePasteBoardBehaviour();
74     static void InitializeTimeConsuming(int initFlag);
75     static void CopyTimeConsumingCount(int dataLevel, int timeLevel);
76     static void PasteTimeConsumingCount(int dataLevel, int timeLevel);
77     static void RemotePasteTimeConsumingCount(int dataLevel, int timeLevel);
78     static void CopyTimeConsuming(const TimeConsumingStat &stat, int level);
79     static void PasteTimeConsuming(const TimeConsumingStat &stat, int level);
80     static const char *GetDataLevel(int dataLevel);
81     static void InvokeTimeConsuming();
82     static void ReportBehaviour(std::map<std::string, int> &behaviour, const char *statePasteboard);
83     static void ReportStatisticEvent(
84         const std::vector<std::map<int, int>> &timeConsumingStat, const std::string &pasteboardState);
85 
86     static std::mutex timeConsumingMutex_;
87     static std::vector<std::map<int, int>> copyTimeConsumingStat_;
88     static std::vector<std::map<int, int>> pasteTimeConsumingStat_;
89     static std::vector<std::map<int, int>> remotePasteTimeConsumingStat_;
90 
91     static std::mutex behaviourMutex_;
92     static std::map<std::string, int> copyPasteboardBehaviour_;
93     static std::map<std::string, int> pastePasteboardBehaviour_;
94     static std::map<std::string, int> remotePastePasteboardBehaviour_;
95 
96     static std::map<int, int> dataMap_;
97     static std::map<int, int> timeMap_;
98 
99     static std::string CoverEventID(int dfxCode);
100 
101 private:
102     static std::mutex runMutex_;
103     static bool running_;
104 
105     static inline constexpr int ONE_DAY_IN_HOURS = 24;
106     static inline constexpr int EXEC_HOUR_TIME = 23;
107     static inline constexpr int EXEC_MIN_TIME = 60;
108     static inline constexpr int ONE_MINUTE_IN_SECONDS = 60;
109     static inline constexpr int ONE_HOUR_IN_SECONDS = 1 * 60 * 60; // 1 hour
110 
111     // statistic key
112     static inline const char *ZERO_TO_HUNDRED_KB = "ZERO_TO_HUNDRED_KB";
113     static inline const char *HUNDRED_TO_FIVE_HUNDREDS_KB = "HUNDRED_TO_FIVE_HUNDREDS_KB";
114     static inline const char *FIVE_HUNDREDS_TO_THOUSAND_KB = "FIVE_HUNDREDS_TO_THOUSAND_KB";
115     static inline const char *ONE_TO_FIVE_MB = "ONE_TO_FIVE_MB";
116     static inline const char *FIVE_TO_TEN_MB = "FIVE_TO_TEN_MB";
117     static inline const char *TEN_TO_FIFTY_MB = "TEN_TO_FIFTY_MB";
118     static inline const char *OVER_FIFTY_MB = "OVER_FIFTY_MB";
119     static inline const char *CONSUMING_DATA = "CONSUMING_DATA";
120     static inline const char *DATA_LEVEL = "DATA_LEVEL";
121     static inline constexpr const char *NET_TYPE = "NET_TYPE";
122     // behaviour key
123     static inline const char *TOP_ONE_APP = "TOP_ONE_APP";
124     static inline const char *TOP_TOW_APP = "TOP_TOW_APP";
125     static inline const char *TOP_THREE_APP = "TOP_THREE_APP";
126     static inline const char *TOP_FOUR_APP = "TOP_FOUR_APP";
127     static inline const char *TOP_FIVE_APP = "TOP_FIVE_APP";
128     static inline const char *TOP_SIX_APP = "TOP_SIX_APP";
129     static inline const char *TOP_SEVEN_APP = "TOP_SEVEN_APP";
130     static inline const char *TOP_EIGHT_APP = "TOP_EIGHT_APP";
131     static inline const char *TOP_NINE_APP = "TOP_NINE_APP";
132     static inline const char *TOP_TEN_APP = "TOP_TEN_APP";
133 
134     static inline constexpr const char *REMOTE_PASTE_STATE = "REMOTE_PASTE_STATE";
135 
136     // use behaviour key
137     static inline const char *BOOTTIME = "BOOTTIME";
138     static inline const char *WALLTIME = "WALLTIME";
139     static inline const char *RESULT = "RESULT";
140     static inline const char *OPERATE_APP = "OPERATE_APP";
141     static inline const char *PRI_MIME_TYPE = "PRI_MIME_TYPE";
142     static inline const char *ISLOCALPASTE = "ISLOCALPASTE";
143     static inline const char *ISREMOTE = "ISREMOTE";
144     static inline const char *SHAREOPTION = "SHAREOPTION";
145 
146     static inline const int INIT_COPY_TIME_SONSUMING = 7;
147     static inline const int INIT_PASTE_TIME_SONSUMING = 8;
148     static inline constexpr const int INIT_REMOTE_PASTE_TIME_SONSUMING = 9;
149 };
150 } // namespace MiscServices
151 } // namespace OHOS
152 #endif // MISCSERVICES_PASTEBOARD_HI_VIEW_ADAPTER_H
153