Skip to content

Commit 036c283

Browse files
Dominik LaskowskiAndroid (Google) Code Review
authored andcommitted
Merge "SF: Store VsyncDispatch callbacks in ftl::SmallMap" into main
2 parents 9a4c4ed + 0f3e5b9 commit 036c283

3 files changed

Lines changed: 15 additions & 16 deletions

File tree

services/surfaceflinger/Scheduler/VSyncDispatch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ enum class CancelResult { Cancelled, TooLate, Error };
3535
*/
3636
class VSyncDispatch {
3737
public:
38-
using CallbackToken = StrongTyping<size_t, class CallbackTokenTag, Compare, Hash>;
38+
using CallbackToken = StrongTyping<size_t, class CallbackTokenTag, Compare>;
3939

4040
virtual ~VSyncDispatch();
4141

services/surfaceflinger/Scheduler/VSyncDispatchTimerQueue.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -267,15 +267,15 @@ void VSyncDispatchTimerQueue::setTimer(nsecs_t targetTime, nsecs_t /*now*/) {
267267
}
268268

269269
void VSyncDispatchTimerQueue::rearmTimer(nsecs_t now) {
270-
rearmTimerSkippingUpdateFor(now, mCallbacks.end());
270+
rearmTimerSkippingUpdateFor(now, mCallbacks.cend());
271271
}
272272

273273
void VSyncDispatchTimerQueue::rearmTimerSkippingUpdateFor(
274-
nsecs_t now, CallbackMap::iterator const& skipUpdateIt) {
274+
nsecs_t now, CallbackMap::const_iterator skipUpdateIt) {
275275
std::optional<nsecs_t> min;
276276
std::optional<nsecs_t> targetVsync;
277277
std::optional<std::string_view> nextWakeupName;
278-
for (auto it = mCallbacks.begin(); it != mCallbacks.end(); it++) {
278+
for (auto it = mCallbacks.cbegin(); it != mCallbacks.cend(); ++it) {
279279
auto& callback = it->second;
280280
if (!callback->wakeupTime() && !callback->hasPendingWorkloadUpdate()) {
281281
continue;
@@ -351,13 +351,12 @@ void VSyncDispatchTimerQueue::timerCallback() {
351351
VSyncDispatchTimerQueue::CallbackToken VSyncDispatchTimerQueue::registerCallback(
352352
Callback callback, std::string callbackName) {
353353
std::lock_guard lock(mMutex);
354-
return CallbackToken{
355-
mCallbacks
356-
.emplace(++mCallbackToken,
357-
std::make_shared<VSyncDispatchTimerQueueEntry>(std::move(callbackName),
358-
std::move(callback),
359-
mMinVsyncDistance))
360-
.first->first};
354+
return mCallbacks
355+
.try_emplace(CallbackToken{++mCallbackToken},
356+
std::make_shared<VSyncDispatchTimerQueueEntry>(std::move(callbackName),
357+
std::move(callback),
358+
mMinVsyncDistance))
359+
.first->first;
361360
}
362361

363362
void VSyncDispatchTimerQueue::unregisterCallback(CallbackToken token) {
@@ -367,7 +366,7 @@ void VSyncDispatchTimerQueue::unregisterCallback(CallbackToken token) {
367366
auto it = mCallbacks.find(token);
368367
if (it != mCallbacks.end()) {
369368
entry = it->second;
370-
mCallbacks.erase(it);
369+
mCallbacks.erase(it->first);
371370
}
372371
}
373372

services/surfaceflinger/Scheduler/VSyncDispatchTimerQueue.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616

1717
#pragma once
1818

19-
#include <functional>
2019
#include <memory>
2120
#include <mutex>
2221
#include <string>
2322
#include <string_view>
24-
#include <unordered_map>
2523

2624
#include <android-base/thread_annotations.h>
25+
#include <ftl/small_map.h>
2726

2827
#include "VSyncDispatch.h"
2928
#include "VsyncSchedule.h"
@@ -135,13 +134,14 @@ class VSyncDispatchTimerQueue : public VSyncDispatch {
135134
VSyncDispatchTimerQueue(const VSyncDispatchTimerQueue&) = delete;
136135
VSyncDispatchTimerQueue& operator=(const VSyncDispatchTimerQueue&) = delete;
137136

137+
// The static capacity was chosen to exceed the expected number of callbacks.
138138
using CallbackMap =
139-
std::unordered_map<CallbackToken, std::shared_ptr<VSyncDispatchTimerQueueEntry>>;
139+
ftl::SmallMap<CallbackToken, std::shared_ptr<VSyncDispatchTimerQueueEntry>, 5>;
140140

141141
void timerCallback();
142142
void setTimer(nsecs_t, nsecs_t) REQUIRES(mMutex);
143143
void rearmTimer(nsecs_t now) REQUIRES(mMutex);
144-
void rearmTimerSkippingUpdateFor(nsecs_t now, CallbackMap::iterator const& skipUpdate)
144+
void rearmTimerSkippingUpdateFor(nsecs_t now, CallbackMap::const_iterator skipUpdate)
145145
REQUIRES(mMutex);
146146
void cancelTimer() REQUIRES(mMutex);
147147
ScheduleResult scheduleLocked(CallbackToken, ScheduleTiming) REQUIRES(mMutex);

0 commit comments

Comments
 (0)