1 /* 2 * Copyright (c) 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 OHOS_HIVIEWDFX_EVENT_PUBLISH_H 17 #define OHOS_HIVIEWDFX_EVENT_PUBLISH_H 18 19 #include <mutex> 20 #include <string> 21 #include <thread> 22 23 #include "json/json.h" 24 #include "hisysevent.h" 25 #include "singleton.h" 26 27 namespace OHOS { 28 namespace HiviewDFX { 29 namespace HiAppEvent { 30 const std::string DOMAIN_OS = "OS"; 31 const std::string EVENT_APP_CRASH = "APP_CRASH"; 32 const std::string EVENT_APP_FREEZE = "APP_FREEZE"; 33 const std::string EVENT_APP_LAUNCH = "APP_LAUNCH"; 34 const std::string EVENT_SCROLL_JANK = "SCROLL_JANK"; 35 const std::string EVENT_CPU_USAGE_HIGH = "CPU_USAGE_HIGH"; 36 const std::string EVENT_BATTERY_USAGE = "BATTERY_USAGE"; 37 const std::string EVENT_RESOURCE_OVERLIMIT = "RESOURCE_OVERLIMIT"; 38 const std::string EVENT_ADDRESS_SANITIZER = "ADDRESS_SANITIZER"; 39 const std::string EVENT_MAIN_THREAD_JANK = "MAIN_THREAD_JANK"; 40 const std::string EVENT_APP_START = "APP_START"; 41 } // namespace HiAppEvent 42 class EventPublish : public OHOS::DelayedRefSingleton<EventPublish> { 43 public: EventPublish()44 EventPublish() {}; ~EventPublish()45 ~EventPublish() {}; 46 47 public: 48 void PushEvent(int32_t uid, const std::string& eventName, HiSysEvent::EventType eventType, 49 const std::string& paramJson); 50 51 private: 52 void StartSendingThread(); 53 void SendEventToSandBox(); 54 void StartOverLimitThread(int32_t uid, const std::string& eventName, 55 const std::string& bundleName, Json::Value& eventJson); 56 void SendOverLimitEventToSandBox(int32_t uid, const std::string& eventName, 57 const std::string& bundleName, Json::Value eventJson); 58 59 private: 60 std::mutex mutex_; 61 std::unique_ptr<std::thread> sendingThread_ = nullptr; 62 std::unique_ptr<std::thread> sendingOverlimitThread_ = nullptr; 63 }; 64 } // namespace HiviewDFX 65 } // namespace OHOS 66 67 #endif // OHOS_HIVIEWDFX_EVENT_PUBLISH_H