Skip to content

Commit

Permalink
qhighdpiscaling: de-pessimize qEnvironmentVariableOptional*() functions
Browse files Browse the repository at this point in the history
Don't call qEnvironmentVariableIsSet(), since it locks the environment
mutex. Since qgetenv() and qEnvironmentVariable() both report whether
the value was set (returning non-isNull()), we can avoid the extra
mutex lock (and envvar lookup) by just calling those and then checking
for isNull().

In qEnvironmentVariableOptionalReal(), in addition, use qgetenv()
instead of qEnvironmentVariable(). While on Windows, that may convert
encoding, QString::toDouble() first converts to Latin-1, and only then
converts to double, so we avoid one encoding conversion, even on
Windows; on Unix we avoid two.

Amends 4d1f13f.

Pick-to: 6.9 6.8 6.5
Change-Id: I6803e2277b324c2568726765245681bcbf517362
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
  • Loading branch information
marcmutz committed Feb 14, 2025
1 parent 6c61d7b commit 8669bc9
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions src/gui/kernel/qhighdpiscaling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,14 @@ static const char usePhysicalDpiEnvVar[] = "QT_USE_PHYSICAL_DPI";

static std::optional<QString> qEnvironmentVariableOptionalString(const char *name)
{
if (!qEnvironmentVariableIsSet(name))
return std::nullopt;

return std::optional(qEnvironmentVariable(name));
QString value = qEnvironmentVariable(name);
return value.isNull() ? std::nullopt : std::optional(std::move(value));
}

static std::optional<QByteArray> qEnvironmentVariableOptionalByteArray(const char *name)
{
if (!qEnvironmentVariableIsSet(name))
return std::nullopt;

return std::optional(qgetenv(name));
QByteArray value = qgetenv(name);
return value.isNull() ? std::nullopt : std::optional(std::move(value));
}

static std::optional<int> qEnvironmentVariableOptionalInt(const char *name)
Expand All @@ -54,11 +50,12 @@ static std::optional<int> qEnvironmentVariableOptionalInt(const char *name)

static std::optional<qreal> qEnvironmentVariableOptionalReal(const char *name)
{
if (!qEnvironmentVariableIsSet(name))
const QByteArray val = qgetenv(name);
if (val.isNull())
return std::nullopt;

bool ok = false;
const qreal value = qEnvironmentVariable(name).toDouble(&ok);
const qreal value = val.toDouble(&ok);
return ok ? std::optional(value) : std::nullopt;
}

Expand Down

0 comments on commit 8669bc9

Please sign in to comment.