SurfaceFlinger: use margin when comparing fps in PhaseOffsets
To avoid any incorrect float equality due to precision errors
use 0.01Hz margin.
Test: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest
Bug: 147358911
Change-Id: Ief43eb7b5064b250a6255fd41542640d9c77529d
diff --git a/services/surfaceflinger/Scheduler/PhaseOffsets.h b/services/surfaceflinger/Scheduler/PhaseOffsets.h
index c10efde..7b1bdfd 100644
--- a/services/surfaceflinger/Scheduler/PhaseOffsets.h
+++ b/services/surfaceflinger/Scheduler/PhaseOffsets.h
@@ -54,11 +54,7 @@
PhaseOffsets(const scheduler::RefreshRateConfigs&);
// Returns early, early GL, and late offsets for Apps and SF for a given refresh rate.
- Offsets getOffsetsForRefreshRate(float fps) const override {
- const auto iter = mOffsets.find(fps);
- LOG_ALWAYS_FATAL_IF(iter == mOffsets.end());
- return iter->second;
- }
+ Offsets getOffsetsForRefreshRate(float fps) const override;
// Returns early, early GL, and late offsets for Apps and SF.
Offsets getCurrentOffsets() const override { return getOffsetsForRefreshRate(mRefreshRateFps); }
@@ -71,7 +67,7 @@
void dump(std::string& result) const override;
private:
- std::unordered_map<float, PhaseOffsets::Offsets> initializeOffsets(
+ std::unordered_map<float, Offsets> initializeOffsets(
const scheduler::RefreshRateConfigs&) const;
Offsets getDefaultOffsets(nsecs_t vsyncDuration) const;
Offsets getHighFpsOffsets(nsecs_t vsyncDuration) const;
@@ -111,8 +107,7 @@
nsecs_t sfEarlyGlDuration, nsecs_t appEarlyGlDuration);
private:
- std::unordered_map<float, PhaseDurations::Offsets> initializeOffsets(
- const std::vector<float>&) const;
+ std::unordered_map<float, Offsets> initializeOffsets(const std::vector<float>&) const;
const nsecs_t mSfDuration;
const nsecs_t mAppDuration;