/* * AXERA is pleased to support the open source community by making ax-samples available. * * Copyright (c) 2022, AXERA Semiconductor (Shanghai) Co., Ltd. All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ /* * Author: ls.wang */ #pragma once #include class timer { private: std::chrono::system_clock::time_point start_time, end_time; public: timer() { start(); } void start() { stop(); this->start_time = this->end_time; } void stop() { #ifdef _MSC_VER this->end_time = std::chrono::system_clock::now(); #else this->end_time = std::chrono::high_resolution_clock::now(); #endif } float cost() { if (this->end_time <= this->start_time) { this->stop(); } auto ms = std::chrono::duration_cast(this->end_time - this->start_time).count(); return static_cast(ms) / 1000.f; } };