diff options
Diffstat (limited to 'toolkit/components/startup/StartupTimeline.h')
-rw-r--r-- | toolkit/components/startup/StartupTimeline.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/toolkit/components/startup/StartupTimeline.h b/toolkit/components/startup/StartupTimeline.h new file mode 100644 index 0000000000..f7d5ae5db4 --- /dev/null +++ b/toolkit/components/startup/StartupTimeline.h @@ -0,0 +1,86 @@ +/* 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/. */ + +#ifdef mozilla_StartupTimeline_Event +// clang-format off + mozilla_StartupTimeline_Event(PROCESS_CREATION, "process") + mozilla_StartupTimeline_Event(START, "start") + mozilla_StartupTimeline_Event(MAIN, "main") + mozilla_StartupTimeline_Event(SELECT_PROFILE, "selectProfile") + mozilla_StartupTimeline_Event(AFTER_PROFILE_LOCKED, "afterProfileLocked") + + // Record the beginning and end of startup crash detection to compare with + // crash stats to know whether detection should be improved to start or end + // sooner. + mozilla_StartupTimeline_Event(STARTUP_CRASH_DETECTION_BEGIN, "startupCrashDetectionBegin") + mozilla_StartupTimeline_Event(STARTUP_CRASH_DETECTION_END,"startupCrashDetectionEnd") + mozilla_StartupTimeline_Event(FIRST_PAINT, "firstPaint") + mozilla_StartupTimeline_Event(FIRST_PAINT2, "firstPaint2") + mozilla_StartupTimeline_Event(SESSION_RESTORE_INIT, "sessionRestoreInit") + mozilla_StartupTimeline_Event(SESSION_RESTORED, "sessionRestored") + mozilla_StartupTimeline_Event(CREATE_TOP_LEVEL_WINDOW, "createTopLevelWindow") + mozilla_StartupTimeline_Event(LINKER_INITIALIZED, "linkerInitialized") + mozilla_StartupTimeline_Event(LIBRARIES_LOADED, "librariesLoaded") + mozilla_StartupTimeline_Event(FIRST_LOAD_URI, "firstLoadURI") + + // The following are actually shutdown events, used to monitor the duration + // of shutdown + mozilla_StartupTimeline_Event(QUIT_APPLICATION, "quitApplication") + mozilla_StartupTimeline_Event(PROFILE_BEFORE_CHANGE, "profileBeforeChange") +// clang-format on +#else + +# ifndef mozilla_StartupTimeline +# define mozilla_StartupTimeline + +# include "mozilla/TimeStamp.h" +# include "nscore.h" + +# ifdef MOZILLA_INTERNAL_API +# include "mozilla/ProfilerMarkers.h" +# endif + +namespace mozilla { + +void RecordShutdownEndTimeStamp(); +void RecordShutdownStartTimeStamp(); + +class StartupTimeline { + public: + enum Event { +# define mozilla_StartupTimeline_Event(ev, z) ev, +# include "StartupTimeline.h" +# undef mozilla_StartupTimeline_Event + MAX_EVENT_ID + }; + + static TimeStamp Get(Event ev) { return sStartupTimeline[ev]; } + + static const char* Describe(Event ev) { return sStartupTimelineDesc[ev]; } + +# ifdef MOZILLA_INTERNAL_API + static void Record(Event ev) { + PROFILER_MARKER_UNTYPED( + ProfilerString8View::WrapNullTerminatedString(Describe(ev)), OTHER); + Record(ev, TimeStamp::Now()); + } + + static void Record(Event ev, TimeStamp when) { sStartupTimeline[ev] = when; } + + static void RecordOnce(Event ev, const TimeStamp& aWhen); + static void RecordOnce(Event ev); +# endif + + static bool HasRecord(Event ev) { return !sStartupTimeline[ev].IsNull(); } + + private: + static TimeStamp sStartupTimeline[MAX_EVENT_ID]; + static const char* sStartupTimelineDesc[MAX_EVENT_ID]; +}; + +} // namespace mozilla + +# endif /* mozilla_StartupTimeline */ + +#endif /* mozilla_StartupTimeline_Event */ |