1/* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. 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#include <thread> 17#include <iostream> 18#include <chrono> 19#include <cstdlib> 20#include <unistd.h> 21#include <mutex> 22#include "include/heartbeat.h" 23#include "include/sp_utils.h" 24#include "sp_log.h" 25#include "include/startup_delay.h" 26#include "include/common.h" 27namespace OHOS { 28namespace SmartPerf { 29void Heartbeat::KillSpId() 30{ 31 std::string str; 32 std::string resultPid; 33 std::string cmd = CMD_COMMAND_MAP.at(CmdCommand::PIDOF_SP); 34 SPUtils::LoadCmd(cmd, resultPid); 35 std::vector<std::string> vec; 36 std::string token; 37 size_t pos = resultPid.find(' '); 38 do { 39 token = resultPid.substr(0, pos); 40 vec.push_back(token); 41 resultPid.erase(0, pos + 1); 42 } while ((pos = resultPid.find(' ')) != std::string::npos); 43 if (vec.size() > 0) { 44 std::string killCmd = CMD_COMMAND_MAP.at(CmdCommand::KILL_CMD); 45 for (size_t i = 0; i < vec.size(); i++) { 46 SPUtils::LoadCmd(killCmd + vec[i], str); 47 } 48 } 49} 50 51void Heartbeat::HeartbeatRule() 52{ 53 while (isrunning) { 54 auto end = std::chrono::steady_clock::now(); 55 LOGI("endTime: %lld", std::chrono::time_point_cast<std::chrono::microseconds>(end).time_since_epoch().count()); 56 auto duration = std::chrono::duration_cast<std::chrono::seconds>(end - updateStart).count(); 57 LOGI("ListeningTimeJitter: %lld", duration); 58 if (duration > timeout) { 59 LOGI("editor connect timeout have Disconnected successfully!"); 60 KillSpId(); 61 } 62 sleep(checkMessageTime); 63 } 64} 65 66void Heartbeat::UpdatestartTime() 67{ 68 std::unique_lock<std::mutex> lock(mtx); 69 updateStart = std::chrono::steady_clock::now(); 70 LOGI("Listening to messages from edtior or device"); 71 lock.unlock(); 72} 73} 74}