1020a203aSopenharmony_ci/* 2020a203aSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3020a203aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4020a203aSopenharmony_ci * you may not use this file except in compliance with the License. 5020a203aSopenharmony_ci * You may obtain a copy of the License at 6020a203aSopenharmony_ci * 7020a203aSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8020a203aSopenharmony_ci * 9020a203aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10020a203aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11020a203aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12020a203aSopenharmony_ci * See the License for the specific language governing permissions and 13020a203aSopenharmony_ci * limitations under the License. 14020a203aSopenharmony_ci */ 15020a203aSopenharmony_ci 16020a203aSopenharmony_ci#include "freeze_common.h" 17020a203aSopenharmony_ci 18020a203aSopenharmony_ci#include "hiview_logger.h" 19020a203aSopenharmony_cinamespace OHOS { 20020a203aSopenharmony_cinamespace HiviewDFX { 21020a203aSopenharmony_cinamespace { 22020a203aSopenharmony_ci static const int APPLICATION_RESULT_ID = 0; 23020a203aSopenharmony_ci static const int SYSTEM_RESULT_ID = 1; 24020a203aSopenharmony_ci static const int SYSTEM_WARNING_RESULT_ID = 2; 25020a203aSopenharmony_ci} 26020a203aSopenharmony_ciDEFINE_LOG_LABEL(0xD002D01, "FreezeDetector"); 27020a203aSopenharmony_ciFreezeCommon::FreezeCommon() 28020a203aSopenharmony_ci{ 29020a203aSopenharmony_ci freezeRuleCluster_ = nullptr; 30020a203aSopenharmony_ci} 31020a203aSopenharmony_ci 32020a203aSopenharmony_ciFreezeCommon::~FreezeCommon() 33020a203aSopenharmony_ci{ 34020a203aSopenharmony_ci freezeRuleCluster_ = nullptr; 35020a203aSopenharmony_ci} 36020a203aSopenharmony_ci 37020a203aSopenharmony_cibool FreezeCommon::Init() 38020a203aSopenharmony_ci{ 39020a203aSopenharmony_ci freezeRuleCluster_ = std::make_shared<FreezeRuleCluster>(); 40020a203aSopenharmony_ci return freezeRuleCluster_->Init(); 41020a203aSopenharmony_ci} 42020a203aSopenharmony_ci 43020a203aSopenharmony_cibool FreezeCommon::IsFreezeEvent(const std::string& domain, const std::string& stringId) const 44020a203aSopenharmony_ci{ 45020a203aSopenharmony_ci return IsApplicationEvent(domain, stringId) || IsSystemEvent(domain, stringId) || 46020a203aSopenharmony_ci IsSysWarningEvent(domain, stringId); 47020a203aSopenharmony_ci} 48020a203aSopenharmony_ci 49020a203aSopenharmony_cibool FreezeCommon::IsApplicationEvent(const std::string& domain, const std::string& stringId) const 50020a203aSopenharmony_ci{ 51020a203aSopenharmony_ci return IsAssignedEvent(domain, stringId, APPLICATION_RESULT_ID); 52020a203aSopenharmony_ci} 53020a203aSopenharmony_ci 54020a203aSopenharmony_cibool FreezeCommon::IsSystemEvent(const std::string& domain, const std::string& stringId) const 55020a203aSopenharmony_ci{ 56020a203aSopenharmony_ci return IsAssignedEvent(domain, stringId, SYSTEM_RESULT_ID); 57020a203aSopenharmony_ci} 58020a203aSopenharmony_ci 59020a203aSopenharmony_cibool FreezeCommon::IsSysWarningEvent(const std::string& domain, const std::string& stringId) const 60020a203aSopenharmony_ci{ 61020a203aSopenharmony_ci return IsAssignedEvent(domain, stringId, SYSTEM_WARNING_RESULT_ID); 62020a203aSopenharmony_ci} 63020a203aSopenharmony_ci 64020a203aSopenharmony_cibool FreezeCommon::IsAssignedEvent(const std::string& domain, const std::string& stringId, int freezeId) const 65020a203aSopenharmony_ci{ 66020a203aSopenharmony_ci if (freezeRuleCluster_ == nullptr) { 67020a203aSopenharmony_ci HIVIEW_LOGW("freezeRuleCluster_ == nullptr."); 68020a203aSopenharmony_ci return false; 69020a203aSopenharmony_ci } 70020a203aSopenharmony_ci 71020a203aSopenharmony_ci std::map<std::string, std::pair<std::string, bool>> pairs; 72020a203aSopenharmony_ci switch (freezeId) { 73020a203aSopenharmony_ci case APPLICATION_RESULT_ID: 74020a203aSopenharmony_ci pairs = freezeRuleCluster_->GetApplicationPairs(); 75020a203aSopenharmony_ci break; 76020a203aSopenharmony_ci case SYSTEM_RESULT_ID: 77020a203aSopenharmony_ci pairs = freezeRuleCluster_->GetSystemPairs(); 78020a203aSopenharmony_ci break; 79020a203aSopenharmony_ci case SYSTEM_WARNING_RESULT_ID: 80020a203aSopenharmony_ci pairs = freezeRuleCluster_->GetSysWarningPairs(); 81020a203aSopenharmony_ci break; 82020a203aSopenharmony_ci default: 83020a203aSopenharmony_ci return false; 84020a203aSopenharmony_ci } 85020a203aSopenharmony_ci for (auto const &pair : pairs) { 86020a203aSopenharmony_ci if (stringId == pair.first && domain == pair.second.first) { 87020a203aSopenharmony_ci return true; 88020a203aSopenharmony_ci } 89020a203aSopenharmony_ci } 90020a203aSopenharmony_ci return false; 91020a203aSopenharmony_ci} 92020a203aSopenharmony_ci 93020a203aSopenharmony_cibool FreezeCommon::IsSystemResult(const FreezeResult& result) const 94020a203aSopenharmony_ci{ 95020a203aSopenharmony_ci return result.GetId() == SYSTEM_RESULT_ID; 96020a203aSopenharmony_ci} 97020a203aSopenharmony_ci 98020a203aSopenharmony_cibool FreezeCommon::IsApplicationResult(const FreezeResult& result) const 99020a203aSopenharmony_ci{ 100020a203aSopenharmony_ci return result.GetId() == APPLICATION_RESULT_ID; 101020a203aSopenharmony_ci} 102020a203aSopenharmony_ci 103020a203aSopenharmony_cibool FreezeCommon::IsSysWarningResult(const FreezeResult& result) const 104020a203aSopenharmony_ci{ 105020a203aSopenharmony_ci return result.GetId() == SYSTEM_WARNING_RESULT_ID; 106020a203aSopenharmony_ci} 107020a203aSopenharmony_ci 108020a203aSopenharmony_cibool FreezeCommon::IsBetaVersion() const 109020a203aSopenharmony_ci{ 110020a203aSopenharmony_ci return true; 111020a203aSopenharmony_ci} 112020a203aSopenharmony_ci 113020a203aSopenharmony_cistd::set<std::string> FreezeCommon::GetPrincipalStringIds() const 114020a203aSopenharmony_ci{ 115020a203aSopenharmony_ci std::set<std::string> set; 116020a203aSopenharmony_ci if (freezeRuleCluster_ == nullptr) { 117020a203aSopenharmony_ci HIVIEW_LOGW("freezeRuleCluster_ == nullptr."); 118020a203aSopenharmony_ci return set; 119020a203aSopenharmony_ci } 120020a203aSopenharmony_ci auto applicationPairs = freezeRuleCluster_->GetApplicationPairs(); 121020a203aSopenharmony_ci auto systemPairs = freezeRuleCluster_->GetSystemPairs(); 122020a203aSopenharmony_ci auto sysWarningPairs = freezeRuleCluster_->GetSysWarningPairs(); 123020a203aSopenharmony_ci for (auto const &pair : applicationPairs) { 124020a203aSopenharmony_ci if (pair.second.second) { 125020a203aSopenharmony_ci set.insert(pair.first); 126020a203aSopenharmony_ci } 127020a203aSopenharmony_ci } 128020a203aSopenharmony_ci for (auto const &pair : systemPairs) { 129020a203aSopenharmony_ci if (pair.second.second) { 130020a203aSopenharmony_ci set.insert(pair.first); 131020a203aSopenharmony_ci } 132020a203aSopenharmony_ci } 133020a203aSopenharmony_ci for (auto const &pair : sysWarningPairs) { 134020a203aSopenharmony_ci if (pair.second.second) { 135020a203aSopenharmony_ci set.insert(pair.first); 136020a203aSopenharmony_ci } 137020a203aSopenharmony_ci } 138020a203aSopenharmony_ci 139020a203aSopenharmony_ci return set; 140020a203aSopenharmony_ci} 141020a203aSopenharmony_ci 142020a203aSopenharmony_cistd::shared_ptr<FreezeRuleCluster> FreezeCommon::GetFreezeRuleCluster() const 143020a203aSopenharmony_ci{ 144020a203aSopenharmony_ci return freezeRuleCluster_; 145020a203aSopenharmony_ci} 146020a203aSopenharmony_ci} // namespace HiviewDFX 147020a203aSopenharmony_ci} // namespace OHOS