106f6ba60Sopenharmony_ci/* 206f6ba60Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. 306f6ba60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 406f6ba60Sopenharmony_ci * you may not use this file except in compliance with the License. 506f6ba60Sopenharmony_ci * You may obtain a copy of the License at 606f6ba60Sopenharmony_ci * 706f6ba60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 806f6ba60Sopenharmony_ci * 906f6ba60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1006f6ba60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1106f6ba60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1206f6ba60Sopenharmony_ci * See the License for the specific language governing permissions and 1306f6ba60Sopenharmony_ci * limitations under the License. 1406f6ba60Sopenharmony_ci */ 1506f6ba60Sopenharmony_ci 1606f6ba60Sopenharmony_ci#include <thread> 1706f6ba60Sopenharmony_ci#include <iostream> 1806f6ba60Sopenharmony_ci#include <chrono> 1906f6ba60Sopenharmony_ci#include <cstdlib> 2006f6ba60Sopenharmony_ci#include <unistd.h> 2106f6ba60Sopenharmony_ci#include <mutex> 2206f6ba60Sopenharmony_ci#include "include/heartbeat.h" 2306f6ba60Sopenharmony_ci#include "include/sp_utils.h" 2406f6ba60Sopenharmony_ci#include "sp_log.h" 2506f6ba60Sopenharmony_ci#include "include/startup_delay.h" 2606f6ba60Sopenharmony_ci#include "include/common.h" 2706f6ba60Sopenharmony_cinamespace OHOS { 2806f6ba60Sopenharmony_cinamespace SmartPerf { 2906f6ba60Sopenharmony_civoid Heartbeat::KillSpId() 3006f6ba60Sopenharmony_ci{ 3106f6ba60Sopenharmony_ci std::string str; 3206f6ba60Sopenharmony_ci std::string resultPid; 3306f6ba60Sopenharmony_ci std::string cmd = CMD_COMMAND_MAP.at(CmdCommand::PIDOF_SP); 3406f6ba60Sopenharmony_ci SPUtils::LoadCmd(cmd, resultPid); 3506f6ba60Sopenharmony_ci std::vector<std::string> vec; 3606f6ba60Sopenharmony_ci std::string token; 3706f6ba60Sopenharmony_ci size_t pos = resultPid.find(' '); 3806f6ba60Sopenharmony_ci do { 3906f6ba60Sopenharmony_ci token = resultPid.substr(0, pos); 4006f6ba60Sopenharmony_ci vec.push_back(token); 4106f6ba60Sopenharmony_ci resultPid.erase(0, pos + 1); 4206f6ba60Sopenharmony_ci } while ((pos = resultPid.find(' ')) != std::string::npos); 4306f6ba60Sopenharmony_ci if (vec.size() > 0) { 4406f6ba60Sopenharmony_ci std::string killCmd = CMD_COMMAND_MAP.at(CmdCommand::KILL_CMD); 4506f6ba60Sopenharmony_ci for (size_t i = 0; i < vec.size(); i++) { 4606f6ba60Sopenharmony_ci SPUtils::LoadCmd(killCmd + vec[i], str); 4706f6ba60Sopenharmony_ci } 4806f6ba60Sopenharmony_ci } 4906f6ba60Sopenharmony_ci} 5006f6ba60Sopenharmony_ci 5106f6ba60Sopenharmony_civoid Heartbeat::HeartbeatRule() 5206f6ba60Sopenharmony_ci{ 5306f6ba60Sopenharmony_ci while (isrunning) { 5406f6ba60Sopenharmony_ci auto end = std::chrono::steady_clock::now(); 5506f6ba60Sopenharmony_ci LOGI("endTime: %lld", std::chrono::time_point_cast<std::chrono::microseconds>(end).time_since_epoch().count()); 5606f6ba60Sopenharmony_ci auto duration = std::chrono::duration_cast<std::chrono::seconds>(end - updateStart).count(); 5706f6ba60Sopenharmony_ci LOGI("ListeningTimeJitter: %lld", duration); 5806f6ba60Sopenharmony_ci if (duration > timeout) { 5906f6ba60Sopenharmony_ci LOGI("editor connect timeout have Disconnected successfully!"); 6006f6ba60Sopenharmony_ci KillSpId(); 6106f6ba60Sopenharmony_ci } 6206f6ba60Sopenharmony_ci sleep(checkMessageTime); 6306f6ba60Sopenharmony_ci } 6406f6ba60Sopenharmony_ci} 6506f6ba60Sopenharmony_ci 6606f6ba60Sopenharmony_civoid Heartbeat::UpdatestartTime() 6706f6ba60Sopenharmony_ci{ 6806f6ba60Sopenharmony_ci std::unique_lock<std::mutex> lock(mtx); 6906f6ba60Sopenharmony_ci updateStart = std::chrono::steady_clock::now(); 7006f6ba60Sopenharmony_ci LOGI("Listening to messages from edtior or device"); 7106f6ba60Sopenharmony_ci lock.unlock(); 7206f6ba60Sopenharmony_ci} 7306f6ba60Sopenharmony_ci} 7406f6ba60Sopenharmony_ci}