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#include "timing.h" 16 17#include <chrono> 18#include <map> 19 20static constexpr const double MICROSECONDS_TO_MILLISECONDS = 1000.0; 21 22namespace OHOS::NetStack::Timing { 23Timer &TimerMap::RecieveTimer(const char *const type) 24{ 25 std::map<const char *const, Timer>::iterator it = timerMap_.find(type); 26 if (it != timerMap_.end()) { 27 return it->second; 28 } else { 29 Timer timer; 30 timer.timerName_ = type; 31 timerMap_.insert(std::pair<const char *const, Timer>(type, timer)); 32 return timerMap_[type]; 33 } 34} 35 36Timer::Timer() {} 37 38void Timer::Start() 39{ 40 Timer::Start(0L); 41} 42 43void Timer::Start(time_t time) 44{ 45 if (time > 0) { 46 startTime_ = time; 47 } else { 48 startTime_ = TimeUtils::GetNowTimeMicroseconds(); 49 } 50} 51 52void Timer::Stop() 53{ 54 endTime_ = TimeUtils::GetNowTimeMicroseconds(); 55} 56 57double Timer::Elapsed() const 58{ 59 double elapsedTime = TimeUtils::Microseconds2Milliseconds(endTime_ - startTime_); 60 return elapsedTime <= 0 ? 0 : elapsedTime; 61} 62 63time_t TimeUtils::GetNowTimeMicroseconds() 64{ 65 auto now = std::chrono::system_clock::now(); 66 return std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count(); 67} 68 69double TimeUtils::Microseconds2Milliseconds(time_t microseconds) 70{ 71 if (microseconds == 0) { 72 return 0.0; 73 } 74 return double(microseconds / MICROSECONDS_TO_MILLISECONDS); 75} 76} // namespace OHOS::NetStack::Timing