1/* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. 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 "sampling.h" 17 18void Sampling::Reset() 19{ 20 sampleInterval_ = 0; 21 sampleRate_ = 0; 22 nextSampleInterval_ = 0; 23 exponentialDist_.reset(); 24} 25 26void Sampling::InitSampling(uint64_t sampleInterval) 27{ 28 sampleInterval_ = sampleInterval; 29 sampleRate_ = 1.0 / static_cast<double>(sampleInterval_); 30 exponentialDist_ = std::exponential_distribution<double>(sampleRate_); 31 nextSampleInterval_ = CalcNextSampleInterval(); 32} 33 34size_t Sampling::CalcSamplings(size_t allocSize) 35{ 36 size_t counts = 0; 37 { 38 Spinlock s; 39 for (nextSampleInterval_ -= static_cast<int64_t>(allocSize); nextSampleInterval_ <= 0; 40 nextSampleInterval_ += CalcNextSampleInterval()) { 41 ++counts; 42 } 43 } 44 return counts; 45}