Resource Tuner
Loading...
Searching...
No Matches
RateLimiter.h
Go to the documentation of this file.
1// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2// SPDX-License-Identifier: BSD-3-Clause-Clear
3
23#ifndef RATE_LIMITER_H
24#define RATE_LIMITER_H
25
26#include <mutex>
27#include <shared_mutex>
28#include <memory>
29
30#include "RequestManager.h"
31#include "ClientDataManager.h"
32#include "ResourceTunerSettings.h"
33
39private:
40 static std::shared_ptr<RateLimiter> mRateLimiterInstance;
41 static std::mutex instanceProtectionLock;
42 std::shared_timed_mutex mRateLimiterMutex;
43
44 uint32_t mDelta;
45 double mPenaltyFactor;
46 double mRewardFactor;
47 int8_t shouldBeProcessed(int32_t clientPID);
48
50
51public:
63 int8_t isRateLimitHonored(int32_t clientTID);
64
75
76 static std::shared_ptr<RateLimiter> getInstance() {
77 if(mRateLimiterInstance == nullptr) {
78 instanceProtectionLock.lock();
79 if(mRateLimiterInstance == nullptr) {
80 try {
81 mRateLimiterInstance = std::shared_ptr<RateLimiter> (new RateLimiter());
82 } catch(const std::bad_alloc& e) {
83 instanceProtectionLock.unlock();
84 return nullptr;
85 }
86 }
87 instanceProtectionLock.unlock();
88 }
89 return mRateLimiterInstance;
90 }
91};
92
93#endif
94
RateLimiter.
Definition RateLimiter.h:38
int8_t isGlobalRateLimitHonored()
Checks if the Global Rate Limit is honored.
int8_t isRateLimitHonored(int32_t clientTID)
Checks if rate limit is honored.