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