[hardware][interfaces][graphics] fix -Wimplicit-int-float-conversion

IEEE 754 single precision cannot precisely represent the value of large
32b integrals. Accept the imprecision from implicit casts by making the
casts explicit.

One case is comparing the value before and after converting a float to
an int32_t and back, the other is used when printing a value.

Bug: 139945549
Test: mm
Change-Id: I23375d73cd16be0741defc6395046bd3b22d1335
Merged-in: Id30edce2cd29c0f9c24cd52ba5fb33f7c56a3100
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
This commit is contained in:
Nick Desaulniers
2019-11-05 13:15:36 -08:00
parent f581c60f08
commit daedbd7e47

View File

@@ -1389,7 +1389,7 @@ static std::string rectString(hwc_rect_t rect) {
}
static std::string approximateFloatString(float f) {
if (static_cast<int32_t>(f) == f) {
if (static_cast<float>(static_cast<int32_t>(f)) == f) {
return std::to_string(static_cast<int32_t>(f));
}
int32_t truncated = static_cast<int32_t>(f * 10);
@@ -1680,10 +1680,10 @@ std::string HWC2On1Adapter::Display::Config::toString(bool splitLine) const {
if (mAttributes.count(HWC2::Attribute::DpiX) != 0 &&
mAttributes.at(HWC2::Attribute::DpiX) != -1) {
std::memset(buffer, 0, BUFFER_SIZE);
writtenBytes = snprintf(buffer, BUFFER_SIZE,
", DPI: %.1f x %.1f",
mAttributes.at(HWC2::Attribute::DpiX) / 1000.0f,
mAttributes.at(HWC2::Attribute::DpiY) / 1000.0f);
writtenBytes =
snprintf(buffer, BUFFER_SIZE, ", DPI: %.1f x %.1f",
static_cast<float>(mAttributes.at(HWC2::Attribute::DpiX)) / 1000.0f,
static_cast<float>(mAttributes.at(HWC2::Attribute::DpiY)) / 1000.0f);
output.append(buffer, writtenBytes);
}