[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: 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 ca255c29ce
commit de2a5dcd48

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);
}