gfxCrashReporterUtils.h (1746B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef gfxCrashReporterUtils_h__ 8 #define gfxCrashReporterUtils_h__ 9 10 #include "nsString.h" 11 12 namespace mozilla { 13 14 /** \class ScopedGfxFeatureReporter 15 * 16 * On creation, adds "FeatureName?" to AppNotes 17 * On destruction, adds "FeatureName-", or "FeatureName+" if you called 18 * SetSuccessful(). 19 * 20 * Any such string is added at most once to AppNotes, and is subsequently 21 * skipped. 22 * 23 * This ScopedGfxFeatureReporter class is designed to be fool-proof to use in 24 * functions that have many exit points. We don't want to encourage having 25 * function with many exit points. It just happens that our graphics features 26 * initialization functions are like that. 27 */ 28 class ScopedGfxFeatureReporter { 29 public: 30 explicit ScopedGfxFeatureReporter(const char* aFeature, bool aForce = false) 31 : mFeature(aFeature), mStatusChar('-'), mStatusNumber(0) { 32 WriteAppNote(aForce ? '!' : '?', 0); 33 } 34 ~ScopedGfxFeatureReporter() { WriteAppNote(mStatusChar, mStatusNumber); } 35 void SetSuccessful() { mStatusChar = '+'; } 36 void SetSuccessful(int32_t aNumber) { 37 mStatusChar = '+'; 38 mStatusNumber = aNumber; 39 } 40 41 static void AppNote(const nsACString& aMessage); 42 43 class AppNoteWritingRunnable; 44 45 protected: 46 const char* mFeature; 47 char mStatusChar; 48 int32_t mStatusNumber; 49 50 private: 51 void WriteAppNote(char statusChar, int32_t statusNumber); 52 }; 53 54 } // end namespace mozilla 55 56 #endif // gfxCrashReporterUtils_h__