Bug 1473631: Part 8 - Replace pref observers with callbacks in gfxPlatform. r?njn
MozReview-Commit-ID: GNTGqvahsoz
--- a/gfx/thebes/gfxPlatform.cpp
+++ b/gfx/thebes/gfxPlatform.cpp
@@ -448,39 +448,22 @@ SRGBOverrideObserver::Observe(nsISupport
static const char* kObservedPrefs[] = {
"gfx.downloadable_fonts.",
"gfx.font_rendering.",
BIDI_NUMERAL_PREF,
nullptr
};
-class FontPrefsObserver final : public nsIObserver
+static void
+FontPrefChanged(const char* aPref, void* aData)
{
- ~FontPrefsObserver() = default;
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIOBSERVER
-};
-
-NS_IMPL_ISUPPORTS(FontPrefsObserver, nsIObserver)
-
-NS_IMETHODIMP
-FontPrefsObserver::Observe(nsISupports *aSubject,
- const char *aTopic,
- const char16_t *someData)
-{
- if (!someData) {
- NS_ERROR("font pref observer code broken");
- return NS_ERROR_UNEXPECTED;
- }
+ MOZ_ASSERT(aPref);
NS_ASSERTION(gfxPlatform::GetPlatform(), "the singleton instance has gone");
- gfxPlatform::GetPlatform()->FontsPrefsChanged(NS_ConvertUTF16toUTF8(someData).get());
-
- return NS_OK;
+ gfxPlatform::GetPlatform()->FontsPrefsChanged(aPref);
}
class MemoryPressureObserver final : public nsIObserver
{
~MemoryPressureObserver() = default;
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIOBSERVER
@@ -818,18 +801,17 @@ gfxPlatform::Init()
if (NS_FAILED(rv)) {
MOZ_CRASH("Could not initialize gfxFontCache");
}
/* Create and register our CMS Override observer. */
gPlatform->mSRGBOverrideObserver = new SRGBOverrideObserver();
Preferences::AddWeakObserver(gPlatform->mSRGBOverrideObserver, GFX_PREF_CMS_FORCE_SRGB);
- gPlatform->mFontPrefsObserver = new FontPrefsObserver();
- Preferences::AddStrongObservers(gPlatform->mFontPrefsObserver, kObservedPrefs);
+ Preferences::RegisterPrefixCallbacks(FontPrefChanged, kObservedPrefs);
GLContext::PlatformStartup();
Preferences::RegisterCallbackAndCall(RecordingPrefChanged, "gfx.2d.recording");
CreateCMSOutputProfile();
// Listen to memory pressure event so we can purge DrawTarget caches
@@ -993,19 +975,17 @@ gfxPlatform::Shutdown()
// Free the various non-null transforms and loaded profiles
ShutdownCMS();
/* Unregister our CMS Override callback. */
NS_ASSERTION(gPlatform->mSRGBOverrideObserver, "mSRGBOverrideObserver has alreay gone");
Preferences::RemoveObserver(gPlatform->mSRGBOverrideObserver, GFX_PREF_CMS_FORCE_SRGB);
gPlatform->mSRGBOverrideObserver = nullptr;
- NS_ASSERTION(gPlatform->mFontPrefsObserver, "mFontPrefsObserver has alreay gone");
- Preferences::RemoveObservers(gPlatform->mFontPrefsObserver, kObservedPrefs);
- gPlatform->mFontPrefsObserver = nullptr;
+ Preferences::UnregisterPrefixCallbacks(FontPrefChanged, kObservedPrefs);
NS_ASSERTION(gPlatform->mMemoryPressureObserver, "mMemoryPressureObserver has already gone");
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
if (obs) {
obs->RemoveObserver(gPlatform->mMemoryPressureObserver, "memory-pressure");
}
gPlatform->mMemoryPressureObserver = nullptr;
--- a/gfx/thebes/gfxPlatform.h
+++ b/gfx/thebes/gfxPlatform.h
@@ -883,17 +883,16 @@ private:
void InitGPUProcessPrefs();
void InitOMTPConfig();
static bool IsDXInterop2Blocked();
static bool IsDXNV12Blocked();
RefPtr<gfxASurface> mScreenReferenceSurface;
nsCOMPtr<nsIObserver> mSRGBOverrideObserver;
- nsCOMPtr<nsIObserver> mFontPrefsObserver;
nsCOMPtr<nsIObserver> mMemoryPressureObserver;
// The preferred draw target backend to use for canvas
mozilla::gfx::BackendType mPreferredCanvasBackend;
// The fallback draw target backend to use for canvas, if the preferred backend fails
mozilla::gfx::BackendType mFallbackCanvasBackend;
// The backend to use for content
mozilla::gfx::BackendType mContentBackend;