WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-231958-20211019110425.patch (text/plain), 6.46 KB, created by
Patrick Griffis
on 2021-10-19 09:04:26 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Patrick Griffis
Created:
2021-10-19 09:04:26 PDT
Size:
6.46 KB
patch
obsolete
>Subversion Revision: 284455 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ef40c5d2f9df824b0e30d56649ad74c47183a83e..9dcae6ab2374e200f253f4f7971565af13e2c20f 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2021-10-19 Patrick Griffis <pgriffis@igalia.com> >+ >+ [GTK] Rewrite LowPowerModeNotifier to use GPowerProfileMonitor >+ https://bugs.webkit.org/show_bug.cgi?id=231958 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This replaces the previous direct use of UPower with some advantages: >+ >+ - Fixes support while being sandboxed without UPower DBus access >+ - Respects a system-wide low power mode rather than only being >+ enabled when the battery is low >+ >+ I decided to remove the old behavior entirely as it is a very >+ different behavior than the new one and subjectively worse. >+ >+ * platform/LowPowerModeNotifier.h: >+ * platform/glib/LowPowerModeNotifierGLib.cpp: >+ (WebCore::LowPowerModeNotifier::LowPowerModeNotifier): >+ (WebCore::LowPowerModeNotifier::powerSaverEnabledNotifyCallback): >+ (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier): >+ > 2021-10-19 Tyler Wilcock <tyler_w@apple.com> > > AX: Fix broken spec links in AccessibilityObject.cpp and AccessibilityTree.cpp >diff --git a/Source/WebCore/platform/LowPowerModeNotifier.h b/Source/WebCore/platform/LowPowerModeNotifier.h >index 8560edb38a5fe652e819c82f529ab3c868a4aff6..93dae809ab30bfa477aac2eb878884c995966b2c 100644 >--- a/Source/WebCore/platform/LowPowerModeNotifier.h >+++ b/Source/WebCore/platform/LowPowerModeNotifier.h >@@ -33,8 +33,8 @@ OBJC_CLASS WebLowPowerModeObserver; > #endif > > #if USE(GLIB) >+#include <gio/gio.h> > #include <wtf/glib/GRefPtr.h> >-typedef struct _GDBusProxy GDBusProxy; > #endif > > namespace WebCore { >@@ -56,12 +56,11 @@ private: > RetainPtr<WebLowPowerModeObserver> m_observer; > LowPowerModeChangeCallback m_callback; > #elif USE(GLIB) >- void updateWarningLevel(); >- void warningLevelChanged(); >- static void gPropertiesChangedCallback(LowPowerModeNotifier*, GVariant* changedProperties); >+ static void powerSaverEnabledNotifyCallback(LowPowerModeNotifier*, GParamSpec*, GPowerProfileMonitor*); > >- GRefPtr<GDBusProxy> m_displayDeviceProxy; >- GRefPtr<GCancellable> m_cancellable; >+#if GLIB_CHECK_VERSION(2, 69, 1) >+ GRefPtr<GPowerProfileMonitor> m_powerProfileMonitor; >+#endif > LowPowerModeChangeCallback m_callback; > bool m_lowPowerModeEnabled { false }; > #endif >diff --git a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp >index 6387f1fe5ebf13d82705df38060eb58d8e81e862..d1e81ab09862f37cd3edb6eb2694fad3ae09461a 100644 >--- a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp >+++ b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp >@@ -26,78 +26,30 @@ > > namespace WebCore { > >-static const char kWarningLevel[] = "WarningLevel"; > > LowPowerModeNotifier::LowPowerModeNotifier(LowPowerModeChangeCallback&& callback) >- : m_cancellable(adoptGRef(g_cancellable_new())) >- , m_callback(WTFMove(callback)) >+ : m_callback(WTFMove(callback)) > { >- g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM, static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS | G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES), >- nullptr, "org.freedesktop.UPower", "/org/freedesktop/UPower/devices/DisplayDevice", "org.freedesktop.UPower.Device", m_cancellable.get(), >- [](GObject*, GAsyncResult* result, gpointer userData) { >- GUniqueOutPtr<GError> error; >- GRefPtr<GDBusProxy> proxy = adoptGRef(g_dbus_proxy_new_for_bus_finish(result, &error.outPtr())); >- if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) >- return; >+#if GLIB_CHECK_VERSION(2, 69, 1) >+ m_powerProfileMonitor = adoptGRef(g_power_profile_monitor_dup_default()); > >- auto* self = static_cast<LowPowerModeNotifier*>(userData); >- if (proxy) { >- GUniquePtr<char> nameOwner(g_dbus_proxy_get_name_owner(proxy.get())); >- if (nameOwner) { >- self->m_displayDeviceProxy = WTFMove(proxy); >- self->updateWarningLevel(); >- g_signal_connect_swapped(self->m_displayDeviceProxy.get(), "g-properties-changed", G_CALLBACK(gPropertiesChangedCallback), self); >- return; >- } >- } >- >- // Now, if there is no name owner, it would be good to try to >- // connect to a Flatpak battery status portal instead. >- // Unfortunately, no such portal currently exists. >- self->m_cancellable = nullptr; >- }, this); >-} >- >-void LowPowerModeNotifier::updateWarningLevel() >-{ >- GRefPtr<GVariant> variant = adoptGRef(g_dbus_proxy_get_cached_property(m_displayDeviceProxy.get(), kWarningLevel)); >- if (!variant) { >- m_lowPowerModeEnabled = false; >- return; >- } >- >- // 0: Unknown >- // 1: None >- // 2: Discharging (only for universal power supplies) >- // 3: Low >- // 4: Critical >- // 5: Action >- m_lowPowerModeEnabled = g_variant_get_uint32(variant.get()) > 1; >-} >- >-void LowPowerModeNotifier::warningLevelChanged() >-{ >- updateWarningLevel(); >+ m_lowPowerModeEnabled = g_power_profile_monitor_get_power_saver_enabled(m_powerProfileMonitor.get()); > m_callback(m_lowPowerModeEnabled); >+ >+ g_signal_connect_swapped(m_powerProfileMonitor.get(), "notify::power-saver-enabled", G_CALLBACK(powerSaverEnabledNotifyCallback), this); >+#endif > } > >-void LowPowerModeNotifier::gPropertiesChangedCallback(LowPowerModeNotifier* self, GVariant* changedProperties) >+#if GLIB_CHECK_VERSION(2, 69, 1) >+void LowPowerModeNotifier::powerSaverEnabledNotifyCallback(LowPowerModeNotifier* self, GParamSpec*, GPowerProfileMonitor* monitor) > { >- GUniqueOutPtr<GVariantIter> iter; >- g_variant_get(changedProperties, "a{sv}", &iter.outPtr()); >- >- const char* propertyName; >- while (g_variant_iter_next(iter.get(), "{&sv}", &propertyName, nullptr)) { >- if (!strcmp(propertyName, kWarningLevel)) { >- self->warningLevelChanged(); >- break; >- } >- } >+ self->m_lowPowerModeEnabled = g_power_profile_monitor_get_power_saver_enabled(monitor); >+ self->m_callback(self->m_lowPowerModeEnabled); > } >+#endif > > LowPowerModeNotifier::~LowPowerModeNotifier() > { >- g_cancellable_cancel(m_cancellable.get()); > } > > bool LowPowerModeNotifier::isLowPowerModeEnabled() const
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 231958
:
441733
|
441734
|
441893
|
441898
|
441904
|
442018