11e934351Sopenharmony_ci/* 21e934351Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41e934351Sopenharmony_ci * you may not use this file except in compliance with the License. 51e934351Sopenharmony_ci * You may obtain a copy of the License at 61e934351Sopenharmony_ci * 71e934351Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81e934351Sopenharmony_ci * 91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121e934351Sopenharmony_ci * See the License for the specific language governing permissions and 131e934351Sopenharmony_ci * limitations under the License. 141e934351Sopenharmony_ci */ 151e934351Sopenharmony_ci 161e934351Sopenharmony_ci#include "request_tracer.h" 171e934351Sopenharmony_ci#include <atomic> 181e934351Sopenharmony_ci#if HAS_NETMANAGER_BASE 191e934351Sopenharmony_ci#include "hitrace_meter.h" 201e934351Sopenharmony_ci#endif 211e934351Sopenharmony_ci 221e934351Sopenharmony_ciOHOS::NetStack::RequestTracer::Trace::~Trace() = default; 231e934351Sopenharmony_ci 241e934351Sopenharmony_ci 251e934351Sopenharmony_ciOHOS::NetStack::RequestTracer::Trace::Trace(const std::string &className, int32_t idNum) 261e934351Sopenharmony_ci : className_(className), 271e934351Sopenharmony_ci stageName_(std::nullopt), 281e934351Sopenharmony_ci idNum_(idNum) 291e934351Sopenharmony_ci{ 301e934351Sopenharmony_ci} 311e934351Sopenharmony_ci 321e934351Sopenharmony_ciint32_t OHOS::NetStack::RequestTracer::Trace::GenerateId() 331e934351Sopenharmony_ci{ 341e934351Sopenharmony_ci static std::atomic_int32_t idNum = 0; 351e934351Sopenharmony_ci return ++idNum; 361e934351Sopenharmony_ci} 371e934351Sopenharmony_ciOHOS::NetStack::RequestTracer::Trace::Trace(const std::string &className) : Trace(className, GenerateId()) 381e934351Sopenharmony_ci{ 391e934351Sopenharmony_ci} 401e934351Sopenharmony_ci 411e934351Sopenharmony_civoid OHOS::NetStack::RequestTracer::Trace::Tracepoint(const std::string &stage) 421e934351Sopenharmony_ci{ 431e934351Sopenharmony_ci if (stage == stageName_) { 441e934351Sopenharmony_ci return; 451e934351Sopenharmony_ci } 461e934351Sopenharmony_ci Finish(); 471e934351Sopenharmony_ci stageName_ = stage; 481e934351Sopenharmony_ci#if HAS_NETMANAGER_BASE 491e934351Sopenharmony_ci StartAsyncTrace(HITRACE_TAG_NET, className_ + "$$" + *stageName_, idNum_); 501e934351Sopenharmony_ci#endif 511e934351Sopenharmony_ci} 521e934351Sopenharmony_ci 531e934351Sopenharmony_civoid OHOS::NetStack::RequestTracer::Trace::Finish() 541e934351Sopenharmony_ci{ 551e934351Sopenharmony_ci#if HAS_NETMANAGER_BASE 561e934351Sopenharmony_ci if (stageName_) { 571e934351Sopenharmony_ci FinishAsyncTrace(HITRACE_TAG_NET, className_ + "$$" + *stageName_, idNum_); 581e934351Sopenharmony_ci } 591e934351Sopenharmony_ci#endif 601e934351Sopenharmony_ci}