diff options
Diffstat (limited to 'gfx/src')
-rw-r--r-- | gfx/src/gfxCrashReporterUtils.cpp | 141 | ||||
-rw-r--r-- | gfx/src/gfxCrashReporterUtils.h | 51 | ||||
-rw-r--r-- | gfx/src/moz.build | 2 |
3 files changed, 0 insertions, 194 deletions
diff --git a/gfx/src/gfxCrashReporterUtils.cpp b/gfx/src/gfxCrashReporterUtils.cpp deleted file mode 100644 index 757c15527..000000000 --- a/gfx/src/gfxCrashReporterUtils.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "gfxCrashReporterUtils.h" - -#ifdef MOZ_GFXFEATUREREPORTER -#include "gfxCrashReporterUtils.h" -#include <string.h> // for strcmp -#include "mozilla/Assertions.h" // for MOZ_ASSERT_HELPER2 -#include "mozilla/Services.h" // for GetObserverService -#include "mozilla/StaticMutex.h" -#include "mozilla/mozalloc.h" // for operator new, etc -#include "mozilla/RefPtr.h" // for RefPtr -#include "nsCOMPtr.h" // for nsCOMPtr -#include "nsError.h" // for NS_OK, NS_FAILED, nsresult -#include "nsExceptionHandler.h" // for AppendAppNotesToCrashReport -#include "nsID.h" -#include "nsIEventTarget.h" // for NS_DISPATCH_NORMAL -#include "nsIObserver.h" // for nsIObserver, etc -#include "nsIObserverService.h" // for nsIObserverService -#include "nsIRunnable.h" // for nsIRunnable -#include "nsISupports.h" -#include "nsTArray.h" // for nsTArray -#include "nsThreadUtils.h" // for NS_DispatchToMainThread, etc -#include "nscore.h" // for NS_IMETHOD, NS_IMETHODIMP, etc - -namespace mozilla { - -static nsTArray<nsCString> *gFeaturesAlreadyReported = nullptr; -static StaticMutex gFeaturesAlreadyReportedMutex; - -class ObserverToDestroyFeaturesAlreadyReported final : public nsIObserver -{ - -public: - NS_DECL_ISUPPORTS - NS_DECL_NSIOBSERVER - - ObserverToDestroyFeaturesAlreadyReported() {} -private: - virtual ~ObserverToDestroyFeaturesAlreadyReported() {} -}; - -NS_IMPL_ISUPPORTS(ObserverToDestroyFeaturesAlreadyReported, - nsIObserver) - -NS_IMETHODIMP -ObserverToDestroyFeaturesAlreadyReported::Observe(nsISupports* aSubject, - const char* aTopic, - const char16_t* aData) -{ - if (!strcmp(aTopic, "xpcom-shutdown")) { - StaticMutexAutoLock al(gFeaturesAlreadyReportedMutex); - if (gFeaturesAlreadyReported) { - delete gFeaturesAlreadyReported; - gFeaturesAlreadyReported = nullptr; - } - } - return NS_OK; -} - -class RegisterObserverRunnable : public Runnable { -public: - NS_IMETHOD Run() override { - // LeakLog made me do this. Basically, I just wanted gFeaturesAlreadyReported to be a static nsTArray<nsCString>, - // and LeakLog was complaining about leaks like this: - // leaked 1 instance of nsTArray_base with size 8 bytes - // leaked 7 instances of nsStringBuffer with size 8 bytes each (56 bytes total) - // So this is a work-around using a pointer, and using a nsIObserver to deallocate on xpcom shutdown. - // Yay for fighting bloat. - nsCOMPtr<nsIObserverService> observerService = mozilla::services::GetObserverService(); - if (!observerService) - return NS_OK; - RefPtr<ObserverToDestroyFeaturesAlreadyReported> observer = new ObserverToDestroyFeaturesAlreadyReported; - observerService->AddObserver(observer, "xpcom-shutdown", false); - return NS_OK; - } -}; - -class AppendAppNotesRunnable : public CancelableRunnable { -public: - explicit AppendAppNotesRunnable(const nsACString& aFeatureStr) - : mFeatureString(aFeatureStr) - { - } - - NS_IMETHOD Run() override { - CrashReporter::AppendAppNotesToCrashReport(mFeatureString); - return NS_OK; - } - -private: - nsAutoCString mFeatureString; -}; - -void -ScopedGfxFeatureReporter::WriteAppNote(char statusChar) -{ - StaticMutexAutoLock al(gFeaturesAlreadyReportedMutex); - - if (!gFeaturesAlreadyReported) { - gFeaturesAlreadyReported = new nsTArray<nsCString>; - nsCOMPtr<nsIRunnable> r = new RegisterObserverRunnable(); - NS_DispatchToMainThread(r); - } - - nsAutoCString featureString; - featureString.AppendPrintf("%s%c ", - mFeature, - statusChar); - - if (!gFeaturesAlreadyReported->Contains(featureString)) { - gFeaturesAlreadyReported->AppendElement(featureString); - AppNote(featureString); - } -} - -void -ScopedGfxFeatureReporter::AppNote(const nsACString& aMessage) -{ - if (NS_IsMainThread()) { - CrashReporter::AppendAppNotesToCrashReport(aMessage); - } else { - nsCOMPtr<nsIRunnable> r = new AppendAppNotesRunnable(aMessage); - NS_DispatchToMainThread(r); - } -} - -} // end namespace mozilla - -#else - -namespace mozilla { -void ScopedGfxFeatureReporter::WriteAppNote(char) {} -void ScopedGfxFeatureReporter::AppNote(const nsACString&) {} - -} // namespace mozilla - -#endif diff --git a/gfx/src/gfxCrashReporterUtils.h b/gfx/src/gfxCrashReporterUtils.h deleted file mode 100644 index efc5ab1ab..000000000 --- a/gfx/src/gfxCrashReporterUtils.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef gfxCrashReporterUtils_h__ -#define gfxCrashReporterUtils_h__ - -#include "nsString.h" - -namespace mozilla { - -/** \class ScopedGfxFeatureReporter - * - * On creation, adds "FeatureName?" to AppNotes - * On destruction, adds "FeatureName-", or "FeatureName+" if you called SetSuccessful(). - * - * Any such string is added at most once to AppNotes, and is subsequently skipped. - * - * This ScopedGfxFeatureReporter class is designed to be fool-proof to use in functions that - * have many exit points. We don't want to encourage having function with many exit points. - * It just happens that our graphics features initialization functions are like that. - */ -class ScopedGfxFeatureReporter -{ -public: - explicit ScopedGfxFeatureReporter(const char *aFeature, bool aForce = false) - : mFeature(aFeature), mStatusChar('-') - { - WriteAppNote(aForce ? '!' : '?'); - } - ~ScopedGfxFeatureReporter() { - WriteAppNote(mStatusChar); - } - void SetSuccessful() { mStatusChar = '+'; } - - static void AppNote(const nsACString& aMessage); - - class AppNoteWritingRunnable; - -protected: - const char *mFeature; - char mStatusChar; - -private: - void WriteAppNote(char statusChar); -}; - -} // end namespace mozilla - -#endif // gfxCrashReporterUtils_h__ diff --git a/gfx/src/moz.build b/gfx/src/moz.build index 3678eee7a..ea707a340 100644 --- a/gfx/src/moz.build +++ b/gfx/src/moz.build @@ -16,7 +16,6 @@ DEFINES['MOZ_APP_VERSION'] = '"%s"' % CONFIG['MOZ_APP_VERSION'] EXPORTS += [ 'DriverCrashGuard.h', 'FilterSupport.h', - 'gfxCrashReporterUtils.h', 'gfxTelemetry.h', 'nsBoundingMetrics.h', 'nsColor.h', @@ -60,7 +59,6 @@ if CONFIG['MOZ_X11']: UNIFIED_SOURCES += [ 'DriverCrashGuard.cpp', 'FilterSupport.cpp', - 'gfxCrashReporterUtils.cpp', 'gfxTelemetry.cpp', 'nsColor.cpp', 'nsFont.cpp', |