transcoding: drop transcoding request for bad actors
Drop requests for a uid if it submits more than X back-to-back requests
that lasted longer than Y seconds.
bug: 177631807
test: new and existing unit tests; CTS MediaTranscodeManagerTest;
Manual testing Yelp app (with shortened thresholds)
Change-Id: I88287be62190ee5bc815dedb2a62c54ed3c41824
diff --git a/services/mediatranscoding/SimulatedTranscoder.cpp b/services/mediatranscoding/SimulatedTranscoder.cpp
index 0151b3d..e80dbc5 100644
--- a/services/mediatranscoding/SimulatedTranscoder.cpp
+++ b/services/mediatranscoding/SimulatedTranscoder.cpp
@@ -47,8 +47,7 @@
return "(unknown)";
}
-SimulatedTranscoder::SimulatedTranscoder(const std::shared_ptr<TranscoderCallbackInterface>& cb,
- int64_t heartBeatUs __unused)
+SimulatedTranscoder::SimulatedTranscoder(const std::shared_ptr<TranscoderCallbackInterface>& cb)
: mCallback(cb), mLooperReady(false) {
ALOGV("SimulatedTranscoder CTOR: %p", this);
}
@@ -132,7 +131,7 @@
void SimulatedTranscoder::threadLoop() {
bool running = false;
- std::chrono::system_clock::time_point lastRunningTime;
+ std::chrono::steady_clock::time_point lastRunningTime;
Event lastRunningEvent;
std::unique_lock<std::mutex> lock(mLock);
@@ -164,8 +163,9 @@
// Advance last running time and remaining time. This is needed to guard
// against bad events (which will be ignored) or spurious wakeups, in that
// case we don't want to wait for the same time again.
- auto now = std::chrono::system_clock::now();
- mRemainingTimeMap[key] -= (now - lastRunningTime);
+ auto now = std::chrono::steady_clock::now();
+ mRemainingTimeMap[key] -= std::chrono::duration_cast<std::chrono::microseconds>(
+ now - lastRunningTime);
lastRunningTime = now;
}
}
@@ -184,7 +184,7 @@
SessionKeyType key = std::make_pair(event.clientId, event.sessionId);
if (!running && (event.type == Event::Start || event.type == Event::Resume)) {
running = true;
- lastRunningTime = std::chrono::system_clock::now();
+ lastRunningTime = std::chrono::steady_clock::now();
lastRunningEvent = event;
ALOGV("%s: session {%lld, %d}: remaining time: %lld", __FUNCTION__,
(long long)event.clientId, event.sessionId,
@@ -195,7 +195,8 @@
if (event.type == Event::Stop) {
mRemainingTimeMap.erase(key);
} else {
- mRemainingTimeMap[key] -= (std::chrono::system_clock::now() - lastRunningTime);
+ mRemainingTimeMap[key] -= std::chrono::duration_cast<std::chrono::microseconds>(
+ std::chrono::steady_clock::now() - lastRunningTime);
}
} else {
ALOGW("%s: discarding bad event: session {%lld, %d}: %s", __FUNCTION__,