SurfaceFlinger: cleanup conversion issues in Scheduler
Bug: 129481165
Test: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest
Change-Id: Iff995777bd4b8e4f734b995373c8b332192d8d84
diff --git a/services/surfaceflinger/Scheduler/LayerHistory.cpp b/services/surfaceflinger/Scheduler/LayerHistory.cpp
index ebd617f..b976523 100644
--- a/services/surfaceflinger/Scheduler/LayerHistory.cpp
+++ b/services/surfaceflinger/Scheduler/LayerHistory.cpp
@@ -14,10 +14,6 @@
* limitations under the License.
*/
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#undef LOG_TAG
#define LOG_TAG "LayerHistory"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
@@ -141,7 +137,7 @@
}
if (CC_UNLIKELY(mTraceEnabled)) {
- trace(weakLayer, std::round(*frameRate));
+ trace(weakLayer, round<int>(*frameRate));
}
}
}
@@ -179,7 +175,7 @@
}
}
- mLayerInfos.erase(mLayerInfos.begin() + end, mLayerInfos.end());
+ mLayerInfos.erase(mLayerInfos.begin() + static_cast<long>(end), mLayerInfos.end());
}
void LayerHistory::clear() {
@@ -194,5 +190,3 @@
} // namespace android::scheduler::impl
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
diff --git a/services/surfaceflinger/Scheduler/LayerHistory.h b/services/surfaceflinger/Scheduler/LayerHistory.h
index bef04e9..a1ae35c 100644
--- a/services/surfaceflinger/Scheduler/LayerHistory.h
+++ b/services/surfaceflinger/Scheduler/LayerHistory.h
@@ -95,10 +95,10 @@
struct ActiveLayers {
LayerInfos& infos;
- const long index;
+ const size_t index;
auto begin() { return infos.begin(); }
- auto end() { return begin() + index; }
+ auto end() { return begin() + static_cast<long>(index); }
};
ActiveLayers activeLayers() REQUIRES(mLock) { return {mLayerInfos, mActiveLayersEnd}; }
@@ -113,7 +113,7 @@
// Partitioned such that active layers precede inactive layers. For fast lookup, the few active
// layers are at the front, and weak pointers are stored in contiguous memory to hit the cache.
LayerInfos mLayerInfos GUARDED_BY(mLock);
- long mActiveLayersEnd GUARDED_BY(mLock) = 0;
+ size_t mActiveLayersEnd GUARDED_BY(mLock) = 0;
// Whether to emit systrace output and debug logs.
const bool mTraceEnabled;
diff --git a/services/surfaceflinger/Scheduler/LayerHistoryV2.cpp b/services/surfaceflinger/Scheduler/LayerHistoryV2.cpp
index 884b46a..a6d2c74 100644
--- a/services/surfaceflinger/Scheduler/LayerHistoryV2.cpp
+++ b/services/surfaceflinger/Scheduler/LayerHistoryV2.cpp
@@ -20,10 +20,6 @@
#include "LayerHistory.h"
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#include <cutils/properties.h>
#include <utils/Log.h>
#include <utils/Timers.h>
@@ -37,9 +33,6 @@
#include "../Layer.h"
#include "SchedulerUtils.h"
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
-
#include "LayerInfoV2.h"
namespace android::scheduler::impl {
diff --git a/services/surfaceflinger/Scheduler/PhaseOffsets.cpp b/services/surfaceflinger/Scheduler/PhaseOffsets.cpp
index 896c2a5..63d9c4b 100644
--- a/services/surfaceflinger/Scheduler/PhaseOffsets.cpp
+++ b/services/surfaceflinger/Scheduler/PhaseOffsets.cpp
@@ -14,10 +14,6 @@
* limitations under the License.
*/
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#include "PhaseOffsets.h"
#include <cutils/properties.h>
@@ -119,9 +115,9 @@
}
PhaseOffsets::Offsets PhaseOffsets::getHighFpsOffsets(nsecs_t vsyncDuration) const {
- const int highFpsLateAppOffsetNs =
+ const auto highFpsLateAppOffsetNs =
getProperty("debug.sf.high_fps_late_app_phase_offset_ns").value_or(2000000);
- const int highFpsLateSfOffsetNs =
+ const auto highFpsLateSfOffsetNs =
getProperty("debug.sf.high_fps_late_sf_phase_offset_ns").value_or(1000000);
const auto highFpsEarlySfOffsetNs = getProperty("debug.sf.high_fps_early_phase_offset_ns");
@@ -334,6 +330,3 @@
} // namespace impl
} // namespace android::scheduler
-
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index a8f8e0e..c187049 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -17,10 +17,6 @@
// #define LOG_NDEBUG 0
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#include "RefreshRateConfigs.h"
#include <android-base/stringprintf.h>
#include <utils/Trace.h>
@@ -37,26 +33,26 @@
const RefreshRate& RefreshRateConfigs::getRefreshRateForContent(
const std::vector<LayerRequirement>& layers) const {
std::lock_guard lock(mLock);
- float contentFramerate = 0.0f;
- float explicitContentFramerate = 0.0f;
+ int contentFramerate = 0;
+ int explicitContentFramerate = 0;
for (const auto& layer : layers) {
+ const auto desiredRefreshRateRound = round<int>(layer.desiredRefreshRate);
if (layer.vote == LayerVoteType::Explicit) {
- if (layer.desiredRefreshRate > explicitContentFramerate) {
- explicitContentFramerate = layer.desiredRefreshRate;
+ if (desiredRefreshRateRound > explicitContentFramerate) {
+ explicitContentFramerate = desiredRefreshRateRound;
}
} else {
- if (layer.desiredRefreshRate > contentFramerate) {
- contentFramerate = layer.desiredRefreshRate;
+ if (desiredRefreshRateRound > contentFramerate) {
+ contentFramerate = desiredRefreshRateRound;
}
}
}
- if (explicitContentFramerate != 0.0f) {
+ if (explicitContentFramerate != 0) {
contentFramerate = explicitContentFramerate;
- } else if (contentFramerate == 0.0f) {
- contentFramerate = mMaxSupportedRefreshRate->fps;
+ } else if (contentFramerate == 0) {
+ contentFramerate = round<int>(mMaxSupportedRefreshRate->fps);
}
- contentFramerate = std::round(contentFramerate);
ATRACE_INT("ContentFPS", contentFramerate);
// Find the appropriate refresh rate with minimal error
@@ -141,7 +137,7 @@
for (auto& [refreshRate, overallScore] : scores) {
const auto displayPeriod = refreshRate->vsyncPeriod;
- const auto layerPeriod = 1e9f / layer.desiredRefreshRate;
+ const auto layerPeriod = round<nsecs_t>(1e9f / layer.desiredRefreshRate);
// Calculate how many display vsyncs we need to present a single frame for this layer
auto [displayFramesQuot, displayFramesRem] = std::div(layerPeriod, displayPeriod);
@@ -183,7 +179,7 @@
for (const auto [refreshRate, score] : scores) {
ALOGV("%s scores %.2f", refreshRate->name.c_str(), score);
- ATRACE_INT(refreshRate->name.c_str(), std::round(score * 100));
+ ATRACE_INT(refreshRate->name.c_str(), round<int>(score * 100));
if (score > max) {
max = score;
@@ -239,11 +235,10 @@
HwcConfigIndexType currentConfigId)
: mRefreshRateSwitching(refreshRateSwitching) {
std::vector<InputConfig> inputConfigs;
- for (auto configId = HwcConfigIndexType(0); configId < HwcConfigIndexType(configs.size());
- ++configId) {
- auto configGroup = HwcConfigGroupType(configs[configId.value()]->getConfigGroup());
- inputConfigs.push_back(
- {configId, configGroup, configs[configId.value()]->getVsyncPeriod()});
+ for (size_t configId = 0; configId < configs.size(); ++configId) {
+ auto configGroup = HwcConfigGroupType(configs[configId]->getConfigGroup());
+ inputConfigs.push_back({HwcConfigIndexType(static_cast<int>(configId)), configGroup,
+ configs[configId]->getVsyncPeriod()});
}
init(inputConfigs, currentConfigId);
}
@@ -362,5 +357,3 @@
}
} // namespace android::scheduler
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index 6a437a2..7de35af 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -14,10 +14,6 @@
* limitations under the License.
*/
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#undef LOG_TAG
#define LOG_TAG "Scheduler"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
@@ -668,6 +664,3 @@
}
} // namespace android
-
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h
index 2987424..01062f8 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.h
+++ b/services/surfaceflinger/Scheduler/Scheduler.h
@@ -23,7 +23,11 @@
#include <optional>
#include <unordered_map>
+// TODO(b/129481165): remove the #pragma below and fix conversion issues
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wconversion"
#include <ui/GraphicTypes.h>
+#pragma clang diagnostic pop
#include "EventControlThread.h"
#include "EventThread.h"
diff --git a/services/surfaceflinger/Scheduler/SchedulerUtils.cpp b/services/surfaceflinger/Scheduler/SchedulerUtils.cpp
index 27120be..e8e0444 100644
--- a/services/surfaceflinger/Scheduler/SchedulerUtils.cpp
+++ b/services/surfaceflinger/Scheduler/SchedulerUtils.cpp
@@ -14,10 +14,6 @@
* limitations under the License.
*/
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-
#include "SchedulerUtils.h"
#include <cinttypes>
@@ -34,12 +30,10 @@
}
size_t n = v->size() / 2;
- nth_element(v->begin(), v->begin() + n, v->end());
+ nth_element(v->begin(), v->begin() + static_cast<long>(n), v->end());
return v->at(n);
}
} // namespace scheduler
} // namespace android
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion"
diff --git a/services/surfaceflinger/Scheduler/SchedulerUtils.h b/services/surfaceflinger/Scheduler/SchedulerUtils.h
index e7e73a3..04a4cd1 100644
--- a/services/surfaceflinger/Scheduler/SchedulerUtils.h
+++ b/services/surfaceflinger/Scheduler/SchedulerUtils.h
@@ -78,6 +78,11 @@
static constexpr size_t max64print = std::numeric_limits<nsecs_t>::digits10 + 1;
+template <typename T>
+static inline T round(float f) {
+ return static_cast<T>(std::round(f));
+}
+
} // namespace android::scheduler
namespace std {