diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure --- a/build/moz.configure/toolchain.configure +++ b/build/moz.configure/toolchain.configure @@ -1299,17 +1299,17 @@ set_config('_DEPEND_CFLAGS', depend_cfla @imports(_from='__builtin__', _import='min') def pgo_flags(compiler, build_env, target): topobjdir = build_env.topobjdir if topobjdir.endswith('/js/src'): topobjdir = topobjdir[:-7] if compiler.type == 'gcc': return namespace( - gen_cflags=['-fprofile-generate'], + gen_cflags=['-fprofile-generate -DPROFILE_INSTRUMENTATION'], gen_ldflags=['-fprofile-generate'], use_cflags=['-fprofile-use', '-fprofile-correction', '-Wcoverage-mismatch'], use_ldflags=['-fprofile-use'], ) if compiler.type in ('clang-cl', 'clang'): profdata = os.path.join(topobjdir, 'merged.profdata') diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components/terminator/nsTerminator.cpp --- a/toolkit/components/terminator/nsTerminator.cpp +++ b/toolkit/components/terminator/nsTerminator.cpp @@ -436,16 +436,27 @@ nsTerminator::StartWatchdog() if (crashAfterMS >= (INT32_MAX / scaleUp) - 1) { // Defend against overflow crashAfterMS = INT32_MAX; } else { crashAfterMS *= scaleUp; } } # endif +# ifdef PROFILE_INSTRUMENTATION + if (true) { + const int32_t scaleUp = 100; + if (crashAfterMS >= (INT32_MAX / scaleUp) - 1) { + // Defend against overflow + crashAfterMS = INT32_MAX; + } else { + crashAfterMS *= scaleUp; + } + } +# endif UniquePtr options(new Options()); const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000); options->crashAfterTicks = crashAfterMS / ticksDuration; // Handle systems where ticksDuration is greater than crashAfterMS. if (options->crashAfterTicks == 0) { options->crashAfterTicks = crashAfterMS / 1000; }