Updated to 99.0

This commit is contained in:
Martin Stransky 2022-04-06 10:36:00 +02:00
parent 73ee25f87e
commit 35a5afbafa
16 changed files with 359 additions and 14688 deletions

2
.gitignore vendored
View File

@ -501,3 +501,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-98.0-20220305.tar.xz
/firefox-98.0.2.source.tar.xz
/firefox-langpacks-98.0.2-20220331.tar.xz
/firefox-99.0.source.tar.xz
/firefox-langpacks-99.0-20220331.tar.xz

View File

@ -1,34 +0,0 @@
diff --git a/dom/animation/TimingParams.h b/dom/animation/TimingParams.h
--- a/dom/animation/TimingParams.h
+++ b/dom/animation/TimingParams.h
@@ -31,22 +31,19 @@
struct TimingParams {
constexpr TimingParams() = default;
- constexpr TimingParams(float aDuration, float aDelay, float aIterationCount,
- dom::PlaybackDirection aDirection,
- dom::FillMode aFillMode)
+ TimingParams(float aDuration, float aDelay, float aIterationCount,
+ dom::PlaybackDirection aDirection, dom::FillMode aFillMode)
: mIterations(aIterationCount), mDirection(aDirection), mFill(aFillMode) {
mDuration.emplace(StickyTimeDuration::FromMilliseconds(aDuration));
mDelay = TimeDuration::FromMilliseconds(aDelay);
Update();
}
- constexpr TimingParams(const TimeDuration& aDuration,
- const TimeDuration& aDelay,
- const TimeDuration& aEndDelay, float aIterations,
- float aIterationStart,
- dom::PlaybackDirection aDirection,
- dom::FillMode aFillMode,
- Maybe<ComputedTimingFunction>&& aFunction)
+ TimingParams(const TimeDuration& aDuration, const TimeDuration& aDelay,
+ const TimeDuration& aEndDelay, float aIterations,
+ float aIterationStart, dom::PlaybackDirection aDirection,
+ dom::FillMode aFillMode,
+ Maybe<ComputedTimingFunction>&& aFunction)
: mDelay(aDelay),
mEndDelay(aEndDelay),
mIterations(aIterations),

View File

@ -1,94 +0,0 @@
diff --git a/gfx/wr/swgl/src/glsl.h b/gfx/wr/swgl/src/glsl.h
--- a/gfx/wr/swgl/src/glsl.h
+++ b/gfx/wr/swgl/src/glsl.h
@@ -2301,20 +2301,12 @@
const vec2& operator[](int index) const { return data[index]; }
mat2() = default;
- IMPLICIT mat2(Float a) {
- data[0] = vec2(a);
- data[1] = vec2(a);
- }
+ IMPLICIT constexpr mat2(Float a) : data{vec2(a), vec2(a)} {}
- mat2(vec2 a, vec2 b) {
- data[0] = a;
- data[1] = b;
- }
+ constexpr mat2(vec2 a, vec2 b) : data{a, b} {}
IMPLICIT mat2(const mat4& mat);
- IMPLICIT constexpr mat2(mat2_scalar s) {
- data[0] = vec2(s.data[0]);
- data[1] = vec2(s.data[1]);
- }
+ IMPLICIT constexpr mat2(mat2_scalar s)
+ : data{vec2(s.data[0]), vec2(s.data[1])} {}
friend vec2 operator*(mat2 m, vec2 v) {
vec2 u;
@@ -2404,30 +2396,19 @@
vec3& operator[](int index) { return data[index]; }
const vec3& operator[](int index) const { return data[index]; }
mat3() = default;
- mat3(vec3 a, vec3 b, vec3 c) {
- data[0] = a;
- data[1] = b;
- data[2] = c;
- }
+ constexpr mat3(vec3 a, vec3 b, vec3 c) : data{a, b, c} {}
- IMPLICIT constexpr mat3(mat3_scalar s) {
- data[0] = vec3(s.data[0]);
- data[1] = vec3(s.data[1]);
- data[2] = vec3(s.data[2]);
- }
- constexpr mat3(mat3_scalar s0, mat3_scalar s1, mat3_scalar s2,
- mat3_scalar s3) {
- data[0] = vec3(s0.data[0], s1.data[0], s2.data[0], s3.data[0]);
- data[1] = vec3(s0.data[1], s1.data[1], s2.data[1], s3.data[1]);
- data[2] = vec3(s0.data[2], s1.data[2], s2.data[2], s3.data[2]);
- }
+ IMPLICIT constexpr mat3(mat3_scalar s)
+ : data{vec3(s.data[0]), vec3(s.data[1]), vec3(s.data[2])} {}
+
+ constexpr mat3(mat3_scalar s0, mat3_scalar s1, mat3_scalar s2, mat3_scalar s3)
+ : data{vec3(s0.data[0], s1.data[0], s2.data[0], s3.data[0]),
+ vec3(s0.data[1], s1.data[1], s2.data[1], s3.data[1]),
+ vec3(s0.data[2], s1.data[2], s2.data[2], s3.data[2])} {}
constexpr mat3(Float d1, Float d2, Float d3, Float d4, Float d5, Float d6,
- Float d7, Float d8, Float d9) {
- data[0] = vec3(d1, d2, d3);
- data[1] = vec3(d4, d5, d6);
- data[2] = vec3(d7, d8, d9);
- }
+ Float d7, Float d8, Float d9)
+ : data{vec3(d1, d2, d3), vec3(d4, d5, d6), vec3(d7, d8, d9)} {}
IMPLICIT mat3(const mat4& mat);
@@ -2597,19 +2578,11 @@
vec4 data[4];
mat4() = default;
- IMPLICIT constexpr mat4(mat4_scalar s) {
- data[0] = vec4(s.data[0]);
- data[1] = vec4(s.data[1]);
- data[2] = vec4(s.data[2]);
- data[3] = vec4(s.data[3]);
- }
+ IMPLICIT constexpr mat4(mat4_scalar s)
+ : data{vec4(s.data[0]), vec4(s.data[1]), vec4(s.data[2]),
+ vec4(s.data[3])} {}
- mat4(vec4 a, vec4 b, vec4 c, vec4 d) {
- data[0] = a;
- data[1] = b;
- data[2] = c;
- data[3] = d;
- }
+ constexpr mat4(vec4 a, vec4 b, vec4 c, vec4 d) : data{a, b, c, d} {}
vec4& operator[](int index) { return data[index]; }
const vec4& operator[](int index) const { return data[index]; }

View File

@ -1,13 +0,0 @@
diff --git a/gfx/wr/swgl/src/gl.cc b/gfx/wr/swgl/src/gl.cc
--- a/gfx/wr/swgl/src/gl.cc
+++ b/gfx/wr/swgl/src/gl.cc
@@ -82,7 +82,7 @@
#define FALLTHROUGH [[fallthrough]]
-#ifdef MOZILLA_CLIENT
+#if defined(MOZILLA_CLIENT) && defined(MOZ_CLANG_PLUGIN)
# define IMPLICIT __attribute__((annotate("moz_implicit")))
#else
# define IMPLICIT

13808
D139696.diff

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/moz.build b/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
--- a/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
+++ b/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
@@ -29,9 +29,6 @@
if CONFIG['MOZ_WAYLAND']:
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
DEFINES['MOZ_WAYLAND_USE_VAAPI'] = 1
- UNIFIED_SOURCES += [
- '../FFmpegVideoFramePool.cpp',
- ]
USE_LIBS += ['mozva']
include("/ipc/chromium/chromium-config.mozbuild")
diff --git a/dom/media/platforms/ffmpeg/ffvpx/moz.build b/dom/media/platforms/ffmpeg/ffvpx/moz.build
--- a/dom/media/platforms/ffmpeg/ffvpx/moz.build
+++ b/dom/media/platforms/ffmpeg/ffvpx/moz.build
@@ -41,6 +41,9 @@
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
DEFINES["MOZ_WAYLAND_USE_VAAPI"] = 1
USE_LIBS += ["mozva"]
+ UNIFIED_SOURCES += [
+ "../FFmpegVideoFramePool.cpp",
+ ]
include("/ipc/chromium/chromium-config.mozbuild")

View File

@ -1,191 +0,0 @@
diff --git a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
@@ -64,14 +64,16 @@
AV_FUNC_56 = 1 << 3,
AV_FUNC_57 = 1 << 4,
AV_FUNC_58 = 1 << 5,
+ AV_FUNC_59 = 1 << 6,
AV_FUNC_AVUTIL_53 = AV_FUNC_53 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVUTIL_54 = AV_FUNC_54 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVUTIL_55 = AV_FUNC_55 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVUTIL_56 = AV_FUNC_56 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVUTIL_57 = AV_FUNC_57 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVUTIL_58 = AV_FUNC_58 | AV_FUNC_AVUTIL_MASK,
+ AV_FUNC_AVUTIL_59 = AV_FUNC_59 | AV_FUNC_AVUTIL_MASK,
AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 |
- AV_FUNC_57 | AV_FUNC_58,
+ AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59,
AV_FUNC_AVUTIL_ALL = AV_FUNC_AVCODEC_ALL | AV_FUNC_AVUTIL_MASK
};
@@ -94,6 +96,9 @@
case 58:
version = AV_FUNC_58;
break;
+ case 59:
+ version = AV_FUNC_59;
+ break;
default:
FFMPEG_LOG("Unknown avcodec version");
Unlink();
@@ -128,15 +133,19 @@
: LinkResult::MissingLibAVFunction; \
}
- AV_FUNC(av_lockmgr_register, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(av_lockmgr_register, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
AV_FUNC(avcodec_alloc_context3, AV_FUNC_AVCODEC_ALL)
AV_FUNC(avcodec_close, AV_FUNC_AVCODEC_ALL)
- AV_FUNC(avcodec_decode_audio4, AV_FUNC_AVCODEC_ALL)
- AV_FUNC(avcodec_decode_video2, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_decode_audio4, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
+ AV_FUNC(avcodec_decode_video2, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
AV_FUNC(avcodec_find_decoder, AV_FUNC_AVCODEC_ALL)
AV_FUNC(avcodec_flush_buffers, AV_FUNC_AVCODEC_ALL)
AV_FUNC(avcodec_open2, AV_FUNC_AVCODEC_ALL)
- AV_FUNC(avcodec_register_all, AV_FUNC_AVCODEC_ALL)
+ AV_FUNC(avcodec_register_all, AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 |
+ AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58)
AV_FUNC(av_init_packet, AV_FUNC_AVCODEC_ALL)
AV_FUNC(av_parser_init, AV_FUNC_AVCODEC_ALL)
AV_FUNC(av_parser_close, AV_FUNC_AVCODEC_ALL)
@@ -145,49 +154,56 @@
AV_FUNC(avcodec_alloc_frame, (AV_FUNC_53 | AV_FUNC_54))
AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54))
AV_FUNC(avcodec_free_frame, AV_FUNC_54)
- AV_FUNC(avcodec_send_packet, AV_FUNC_58)
- AV_FUNC(avcodec_receive_frame, AV_FUNC_58)
+ AV_FUNC(avcodec_send_packet, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC(avcodec_receive_frame, AV_FUNC_58 | AV_FUNC_59)
AV_FUNC(avcodec_default_get_buffer2,
- (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58))
+ (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59))
AV_FUNC_OPTION(av_rdft_init, AV_FUNC_AVCODEC_ALL)
AV_FUNC_OPTION(av_rdft_calc, AV_FUNC_AVCODEC_ALL)
AV_FUNC_OPTION(av_rdft_end, AV_FUNC_AVCODEC_ALL)
AV_FUNC(av_log_set_level, AV_FUNC_AVUTIL_ALL)
AV_FUNC(av_malloc, AV_FUNC_AVUTIL_ALL)
AV_FUNC(av_freep, AV_FUNC_AVUTIL_ALL)
- AV_FUNC(av_frame_alloc, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 |
- AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
- AV_FUNC(av_frame_free, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 |
- AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
- AV_FUNC(av_frame_unref, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 |
- AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
+ AV_FUNC(av_frame_alloc,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59))
+ AV_FUNC(av_frame_free,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59))
+ AV_FUNC(av_frame_unref,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59))
AV_FUNC(av_image_check_size, AV_FUNC_AVUTIL_ALL)
AV_FUNC(av_image_get_buffer_size, AV_FUNC_AVUTIL_ALL)
- AV_FUNC_OPTION(av_buffer_get_opaque,
- (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
- AV_FUNC(av_buffer_create, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 |
- AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
+ AV_FUNC_OPTION(av_buffer_get_opaque, (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59))
+ AV_FUNC(av_buffer_create,
+ (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 |
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59))
AV_FUNC_OPTION(av_frame_get_colorspace, AV_FUNC_AVUTIL_ALL)
AV_FUNC_OPTION(av_frame_get_color_range, AV_FUNC_AVUTIL_ALL)
#ifdef MOZ_WAYLAND
- AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_codec_is_decoder, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58)
- AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58)
- AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58)
- AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, AV_FUNC_AVUTIL_58)
+ AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_codec_is_decoder, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints,
+ AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats,
+ AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58 | AV_FUNC_59)
+ AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string,
+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)
#endif
#undef AV_FUNC
#undef AV_FUNC_OPTION
@@ -219,7 +235,9 @@
# undef VAD_FUNC_OPTION_SILENT
#endif
- avcodec_register_all();
+ if (avcodec_register_all) {
+ avcodec_register_all();
+ }
if (MOZ_LOG_TEST(sPDMLog, LogLevel::Debug)) {
av_log_set_level(AV_LOG_DEBUG);
} else if (MOZ_LOG_TEST(sPDMLog, LogLevel::Info)) {
diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
@@ -27,6 +27,7 @@
static const char* sLibs[] = {
// clang-format off
#if defined(XP_DARWIN)
+ "libavcodec.59.dylib",
"libavcodec.58.dylib",
"libavcodec.57.dylib",
"libavcodec.56.dylib",
@@ -34,6 +35,7 @@
"libavcodec.54.dylib",
"libavcodec.53.dylib",
#else
+ "libavcodec.so.59",
"libavcodec.so.58",
"libavcodec-ffmpeg.so.58",
"libavcodec-ffmpeg.so.57",
@@ -76,7 +78,6 @@
sLinkStatusLibraryName = lib;
return true;
case FFmpegLibWrapper::LinkResult::NoProvidedLib:
- MOZ_ASSERT_UNREACHABLE("Incorrectly-setup sLibAV");
break;
case FFmpegLibWrapper::LinkResult::NoAVCodecVersion:
if (sLinkStatus > LinkStatus_INVALID_CANDIDATE) {
@@ -152,6 +153,9 @@
case 58:
module = FFmpegDecoderModule<58>::Create(&sLibAV);
break;
+ case 59:
+ module = FFmpegDecoderModule<59>::Create(&sLibAV);
+ break;
default:
module = nullptr;
}

View File

@ -1,127 +0,0 @@
diff --git a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
@@ -206,15 +206,49 @@
media::TimeUnit pts = aSample->mTime;
while (packet.size > 0) {
- int decoded;
- int bytesConsumed =
+ int decoded = false;
+ int bytesConsumed = -1;
+#if LIBAVCODEC_VERSION_MAJOR < 59
+ bytesConsumed =
mLib->avcodec_decode_audio4(mCodecContext, mFrame, &decoded, &packet);
-
if (bytesConsumed < 0) {
NS_WARNING("FFmpeg audio decoder error.");
return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
RESULT_DETAIL("FFmpeg audio error:%d", bytesConsumed));
}
+#else
+# define AVERROR_OK 0
+
+ int ret = mLib->avcodec_receive_frame(mCodecContext, mFrame);
+ switch (ret) {
+ case AVERROR_OK:
+ decoded = true;
+ break;
+ case AVERROR(EAGAIN):
+ break;
+ case int(AVERROR_EOF): {
+ FFMPEG_LOG(" End of stream.");
+ return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM,
+ RESULT_DETAIL("End of stream"));
+ }
+ }
+ ret = mLib->avcodec_send_packet(mCodecContext, &packet);
+ switch (ret) {
+ case AVERROR_OK:
+ bytesConsumed = packet.size;
+ break;
+ case AVERROR(EAGAIN):
+ break;
+ case int(AVERROR_EOF):
+ FFMPEG_LOG(" End of stream.");
+ return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM,
+ RESULT_DETAIL("End of stream"));
+ default:
+ NS_WARNING("FFmpeg audio decoder error.");
+ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
+ RESULT_DETAIL("FFmpeg audio error"));
+ }
+#endif
if (decoded) {
if (mFrame->format != AV_SAMPLE_FMT_FLT &&
diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
@@ -39,6 +39,9 @@
# define AV_PIX_FMT_YUV444P10LE PIX_FMT_YUV444P10LE
# define AV_PIX_FMT_NONE PIX_FMT_NONE
#endif
+#if LIBAVCODEC_VERSION_MAJOR > 58
+# define AV_PIX_FMT_VAAPI_VLD AV_PIX_FMT_VAAPI
+#endif
#include "mozilla/PodOperations.h"
#include "mozilla/StaticPrefs_media.h"
#include "mozilla/TaskQueue.h"
@@ -766,6 +769,14 @@
}
#endif
+static int64_t GetFramePts(AVFrame* aFrame) {
+#if LIBAVCODEC_VERSION_MAJOR > 58
+ return aFrame->pts;
+#else
+ return aFrame->pkt_pts;
+#endif
+}
+
MediaResult FFmpegVideoDecoder<LIBAV_VER>::DoDecode(
MediaRawData* aSample, uint8_t* aData, int aSize, bool* aGotFrame,
MediaDataDecoder::DecodedData& aResults) {
@@ -831,7 +842,7 @@
MediaResult rv;
# ifdef MOZ_WAYLAND_USE_VAAPI
if (IsHardwareAccelerated()) {
- rv = CreateImageVAAPI(mFrame->pkt_pos, mFrame->pkt_pts,
+ rv = CreateImageVAAPI(mFrame->pkt_pos, GetFramePts(mFrame),
mFrame->pkt_duration, aResults);
// If VA-API playback failed, just quit. Decoder is going to be restarted
// without VA-API.
@@ -844,8 +855,8 @@
} else
# endif
{
- rv = CreateImage(mFrame->pkt_pos, mFrame->pkt_pts, mFrame->pkt_duration,
- aResults);
+ rv = CreateImage(mFrame->pkt_pos, GetFramePts(mFrame),
+ mFrame->pkt_duration, aResults);
}
if (NS_FAILED(rv)) {
return rv;
@@ -879,9 +890,9 @@
"DoDecodeFrame:decode_video: rv=%d decoded=%d "
"(Input: pts(%" PRId64 ") dts(%" PRId64 ") Output: pts(%" PRId64
") "
- "opaque(%" PRId64 ") pkt_pts(%" PRId64 ") pkt_dts(%" PRId64 "))",
+ "opaque(%" PRId64 ") pts(%" PRId64 ") pkt_dts(%" PRId64 "))",
bytesConsumed, decoded, packet.pts, packet.dts, mFrame->pts,
- mFrame->reordered_opaque, mFrame->pkt_pts, mFrame->pkt_dts);
+ mFrame->reordered_opaque, mFrame->pts, mFrame->pkt_dts);
if (bytesConsumed < 0) {
return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
@@ -896,7 +907,8 @@
}
// If we've decoded a frame then we need to output it
- int64_t pts = mPtsContext.GuessCorrectPts(mFrame->pkt_pts, mFrame->pkt_dts);
+ int64_t pts =
+ mPtsContext.GuessCorrectPts(GetFramePts(mFrame), mFrame->pkt_dts);
// Retrieve duration from dts.
// We use the first entry found matching this dts (this is done to
// handle damaged file with multiple frames with the same dts)

View File

@ -1,222 +0,0 @@
diff --git a/js/src/jit/GenerateAtomicOperations.py b/js/src/jit/GenerateAtomicOperations.py
--- a/js/src/jit/GenerateAtomicOperations.py
+++ b/js/src/jit/GenerateAtomicOperations.py
@@ -10,6 +10,7 @@
is_64bit = "JS_64BIT" in buildconfig.defines
cpu_arch = buildconfig.substs["CPU_ARCH"]
+is_gcc = buildconfig.substs["CC_TYPE"] == "gcc"
def fmt_insn(s):
@@ -19,21 +20,21 @@
def gen_seqcst(fun_name):
if cpu_arch in ("x86", "x86_64"):
return r"""
- inline void %(fun_name)s() {
+ INLINE_ATTR void %(fun_name)s() {
asm volatile ("mfence\n\t" ::: "memory");
}""" % {
"fun_name": fun_name,
}
if cpu_arch == "aarch64":
return r"""
- inline void %(fun_name)s() {
+ INLINE_ATTR void %(fun_name)s() {
asm volatile ("dmb ish\n\t" ::: "memory");
}""" % {
"fun_name": fun_name,
}
if cpu_arch == "arm":
return r"""
- inline void %(fun_name)s() {
+ INLINE_ATTR void %(fun_name)s() {
asm volatile ("dmb sy\n\t" ::: "memory");
}""" % {
"fun_name": fun_name,
@@ -63,7 +64,7 @@
if barrier:
insns += fmt_insn("mfence")
return """
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
%(cpp_type)s res;
asm volatile (%(insns)s
: [res] "=r" (res)
@@ -91,7 +92,7 @@
if barrier:
insns += fmt_insn("dmb ish")
return """
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
%(cpp_type)s res;
asm volatile (%(insns)s
: [res] "=r" (res)
@@ -117,7 +118,7 @@
if barrier:
insns += fmt_insn("dmb sy")
return """
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
%(cpp_type)s res;
asm volatile (%(insns)s
: [res] "=r" (res)
@@ -154,7 +155,7 @@
if barrier:
insns += fmt_insn("mfence")
return """
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
asm volatile (%(insns)s
:
: [addr] "r" (addr), [val] "r"(val)
@@ -180,7 +181,7 @@
if barrier:
insns += fmt_insn("dmb ish")
return """
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
asm volatile (%(insns)s
:
: [addr] "r" (addr), [val] "r"(val)
@@ -204,7 +205,7 @@
if barrier:
insns += fmt_insn("dmb sy")
return """
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
asm volatile (%(insns)s
:
: [addr] "r" (addr), [val] "r"(val)
@@ -235,7 +236,7 @@
assert size == 64
insns += fmt_insn("xchgq %[val], (%[addr])")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
asm volatile (%(insns)s
: [val] "+r" (val)
: [addr] "r" (addr)
@@ -266,7 +267,7 @@
insns += fmt_insn("cbnz %w[scratch], 0b")
insns += fmt_insn("dmb ish")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
%(cpp_type)s res;
uint32_t scratch;
asm volatile (%(insns)s
@@ -297,7 +298,7 @@
insns += fmt_insn("beq 0b")
insns += fmt_insn("dmb sy")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
%(cpp_type)s res;
uint32_t scratch;
asm volatile (%(insns)s
@@ -321,7 +322,7 @@
# Use a +A constraint to load `oldval` into EDX:EAX as input/output.
# `newval` is loaded into ECX:EBX.
return r"""
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
%(cpp_type)s oldval,
%(cpp_type)s newval) {
asm volatile ("lock; cmpxchg8b (%%[addr])\n\t"
@@ -337,7 +338,7 @@
}
if cpu_arch == "arm" and size == 64:
return r"""
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
%(cpp_type)s oldval,
%(cpp_type)s newval) {
uint32_t oldval0 = oldval & 0xffff'ffff;
@@ -380,7 +381,7 @@
assert size == 64
insns += fmt_insn("lock; cmpxchgq %[newval], (%[addr])")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
%(cpp_type)s oldval,
%(cpp_type)s newval) {
asm volatile (%(insns)s
@@ -425,7 +426,7 @@
insns += fmt_insn("cbnz %w[scratch], 0b")
insns += fmt_insn("1: dmb ish")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
%(cpp_type)s oldval,
%(cpp_type)s newval) {
%(cpp_type)s res, scratch;
@@ -466,7 +467,7 @@
insns += fmt_insn("beq 0b")
insns += fmt_insn("1: dmb sy")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
%(cpp_type)s oldval,
%(cpp_type)s newval) {
%(cpp_type)s res, scratch;
@@ -501,7 +502,7 @@
assert size == 64
insns += fmt_insn("lock; xaddq %[val], (%[addr])")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
asm volatile (%(insns)s
: [val] "+&r" (val)
: [addr] "r" (addr)
@@ -539,7 +540,7 @@
insns = insns.replace("OP", op)
insns += fmt_insn("jnz 0b")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
%(cpp_type)s res, scratch;
asm volatile (%(insns)s
: [res] "=&a" (res), [scratch] "=&r" (scratch)
@@ -581,7 +582,7 @@
insns += fmt_insn("cbnz %w[scratch2], 0b")
insns += fmt_insn("dmb ish")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
%(cpp_type)s res;
uintptr_t scratch1, scratch2;
asm volatile (%(insns)s
@@ -621,7 +622,7 @@
insns += fmt_insn("beq 0b")
insns += fmt_insn("dmb sy")
return """
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
%(cpp_type)s res;
uintptr_t scratch1, scratch2;
asm volatile (%(insns)s
@@ -681,7 +682,7 @@
offset -= 1
return """
- inline void %(fun_name)s(uint8_t* dst, const uint8_t* src) {
+ INLINE_ATTR void %(fun_name)s(uint8_t* dst, const uint8_t* src) {
%(cpp_type)s* dst_ = reinterpret_cast<%(cpp_type)s*>(dst);
const %(cpp_type)s* src_ = reinterpret_cast<const %(cpp_type)s*>(src);
%(cpp_type)s scratch;
@@ -853,6 +854,13 @@
"constexpr size_t JS_GENERATED_ATOMICS_WORDSIZE = " + str(wordsize) + ";\n"
)
+ # Work around a GCC issue on 32-bit x86 by adding MOZ_NEVER_INLINE.
+ # See bug 1756347.
+ if is_gcc and cpu_arch == "x86":
+ contents = contents.replace("INLINE_ATTR", "MOZ_NEVER_INLINE inline")
+ else:
+ contents = contents.replace("INLINE_ATTR", "inline")
+
c_out.write(
HEADER_TEMPLATE
% {

View File

@ -1,21 +0,0 @@
diff --git a/js/src/jit/GenerateAtomicOperations.py b/js/src/jit/GenerateAtomicOperations.py
--- a/js/src/jit/GenerateAtomicOperations.py
+++ b/js/src/jit/GenerateAtomicOperations.py
@@ -666,12 +666,12 @@
insns += fmt_insn("str %x[scratch], [%x[dst], OFFSET]")
elif cpu_arch == "arm":
if size == 1:
- insns += fmt_insn("ldrb %[scratch], [%[src], OFFSET]")
- insns += fmt_insn("strb %[scratch], [%[dst], OFFSET]")
+ insns += fmt_insn("ldrb %[scratch], [%[src], #OFFSET]")
+ insns += fmt_insn("strb %[scratch], [%[dst], #OFFSET]")
else:
assert size == 4
- insns += fmt_insn("ldr %[scratch], [%[src], OFFSET]")
- insns += fmt_insn("str %[scratch], [%[dst], OFFSET]")
+ insns += fmt_insn("ldr %[scratch], [%[src], #OFFSET]")
+ insns += fmt_insn("str %[scratch], [%[dst], #OFFSET]")
else:
raise Exception("Unexpected arch")
insns = insns.replace("OFFSET", str(offset * size))

313
D142257.diff Normal file
View File

@ -0,0 +1,313 @@
diff -up firefox-99.0/gfx/gl/GLContextEGL.h.D142257 firefox-99.0/gfx/gl/GLContextEGL.h
--- firefox-99.0/gfx/gl/GLContextEGL.h.D142257 2022-03-31 01:24:45.000000000 +0200
+++ firefox-99.0/gfx/gl/GLContextEGL.h 2022-04-06 10:32:53.287145554 +0200
@@ -21,11 +21,9 @@ class CompositorWidget;
} // namespace widget
namespace gl {
-RefPtr<GLLibraryEGL> DefaultEglLibrary(nsACString* const out_failureId);
-
inline std::shared_ptr<EglDisplay> DefaultEglDisplay(
nsACString* const out_failureId) {
- const auto lib = DefaultEglLibrary(out_failureId);
+ const auto lib = GLLibraryEGL::Get(out_failureId);
if (!lib) {
return nullptr;
}
diff -up firefox-99.0/gfx/gl/GLContextProviderEGL.cpp.D142257 firefox-99.0/gfx/gl/GLContextProviderEGL.cpp
--- firefox-99.0/gfx/gl/GLContextProviderEGL.cpp.D142257 2022-03-31 01:24:50.000000000 +0200
+++ firefox-99.0/gfx/gl/GLContextProviderEGL.cpp 2022-04-06 10:34:20.468017966 +0200
@@ -237,7 +237,7 @@ class GLContextEGLFactory {
already_AddRefed<GLContext> GLContextEGLFactory::CreateImpl(
EGLNativeWindowType aWindow, bool aHardwareWebRender, bool aUseGles) {
nsCString failureId;
- const auto lib = gl::DefaultEglLibrary(&failureId);
+ const auto lib = GLLibraryEGL::Get(&failureId);
if (!lib) {
gfxCriticalNote << "Failed[3] to load EGL library: " << failureId.get();
return nullptr;
@@ -1209,32 +1209,8 @@ already_AddRefed<GLContext> GLContextPro
/*static*/
GLContext* GLContextProviderEGL::GetGlobalContext() { return nullptr; }
-// -
-
-static StaticMutex sMutex;
-static StaticRefPtr<GLLibraryEGL> gDefaultEglLibrary;
-
-RefPtr<GLLibraryEGL> DefaultEglLibrary(nsACString* const out_failureId) {
- StaticMutexAutoLock lock(sMutex);
- if (!gDefaultEglLibrary) {
- gDefaultEglLibrary = GLLibraryEGL::Create(out_failureId);
- if (!gDefaultEglLibrary) {
- NS_WARNING("GLLibraryEGL::Create failed");
- }
- }
- return gDefaultEglLibrary.get();
-}
-
-// -
-
/*static*/
-void GLContextProviderEGL::Shutdown() {
- StaticMutexAutoLock lock(sMutex);
- if (!gDefaultEglLibrary) {
- return;
- }
- gDefaultEglLibrary = nullptr;
-}
+void GLContextProviderEGL::Shutdown() { GLLibraryEGL::Shutdown(); }
} /* namespace gl */
} /* namespace mozilla */
diff -up firefox-99.0/gfx/gl/GLLibraryEGL.cpp.D142257 firefox-99.0/gfx/gl/GLLibraryEGL.cpp
--- firefox-99.0/gfx/gl/GLLibraryEGL.cpp.D142257 2022-03-31 01:24:45.000000000 +0200
+++ firefox-99.0/gfx/gl/GLLibraryEGL.cpp 2022-04-06 10:32:53.288145587 +0200
@@ -48,6 +48,9 @@
namespace mozilla {
namespace gl {
+StaticMutex GLLibraryEGL::sMutex;
+StaticRefPtr<GLLibraryEGL> GLLibraryEGL::sInstance;
+
// should match the order of EGLExtensions, and be null-terminated.
static const char* sEGLLibraryExtensionNames[] = {
"EGL_ANDROID_get_native_client_buffer", "EGL_ANGLE_device_creation",
@@ -140,15 +143,17 @@ static PRLibrary* LoadLibraryForEGLOnWin
#endif // XP_WIN
-static std::shared_ptr<EglDisplay> GetAndInitDisplay(GLLibraryEGL& egl,
- void* displayType) {
+static std::shared_ptr<EglDisplay> GetAndInitDisplay(
+ GLLibraryEGL& egl, void* displayType,
+ const StaticMutexAutoLock& aProofOfLock) {
const auto display = egl.fGetDisplay(displayType);
if (!display) return nullptr;
- return EglDisplay::Create(egl, display, false);
+ return EglDisplay::Create(egl, display, false, aProofOfLock);
}
-static std::shared_ptr<EglDisplay> GetAndInitWARPDisplay(GLLibraryEGL& egl,
- void* displayType) {
+static std::shared_ptr<EglDisplay> GetAndInitWARPDisplay(
+ GLLibraryEGL& egl, void* displayType,
+ const StaticMutexAutoLock& aProofOfLock) {
const EGLAttrib attrib_list[] = {
LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
LOCAL_EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE,
@@ -167,11 +172,12 @@ static std::shared_ptr<EglDisplay> GetAn
return nullptr;
}
- return EglDisplay::Create(egl, display, true);
+ return EglDisplay::Create(egl, display, true, aProofOfLock);
}
std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplay(
ID3D11Device* const d3d11Device) {
+ StaticMutexAutoLock lock(sMutex);
EGLDeviceEXT eglDevice =
fCreateDeviceANGLE(LOCAL_EGL_D3D11_DEVICE_ANGLE, d3d11Device, nullptr);
if (!eglDevice) {
@@ -199,7 +205,7 @@ std::shared_ptr<EglDisplay> GLLibraryEGL
return nullptr;
}
- const auto ret = EglDisplay::Create(*this, display, false);
+ const auto ret = EglDisplay::Create(*this, display, false, lock);
if (!ret) {
const EGLint err = fGetError();
@@ -263,7 +269,8 @@ class AngleErrorReporting {
AngleErrorReporting gAngleErrorReporter;
static std::shared_ptr<EglDisplay> GetAndInitDisplayForAccelANGLE(
- GLLibraryEGL& egl, nsACString* const out_failureId) {
+ GLLibraryEGL& egl, nsACString* const out_failureId,
+ const StaticMutexAutoLock& aProofOfLock) {
gfx::FeatureState& d3d11ANGLE =
gfx::gfxConfig::GetFeature(gfx::Feature::D3D11_HW_ANGLE);
@@ -285,16 +292,18 @@ static std::shared_ptr<EglDisplay> GetAn
});
if (gfx::gfxConfig::IsForcedOnByUser(gfx::Feature::D3D11_HW_ANGLE)) {
- return GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ONLY_DISPLAY_ANGLE);
+ return GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ONLY_DISPLAY_ANGLE,
+ aProofOfLock);
}
std::shared_ptr<EglDisplay> ret;
if (d3d11ANGLE.IsEnabled()) {
- ret = GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE);
+ ret = GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE,
+ aProofOfLock);
}
if (!ret) {
- ret = GetAndInitDisplay(egl, EGL_DEFAULT_DISPLAY);
+ ret = GetAndInitDisplay(egl, EGL_DEFAULT_DISPLAY, aProofOfLock);
}
if (!ret && out_failureId->IsEmpty()) {
@@ -326,12 +335,20 @@ Maybe<SymbolLoader> GLLibraryEGL::GetSym
// -
/* static */
-RefPtr<GLLibraryEGL> GLLibraryEGL::Create(nsACString* const out_failureId) {
- RefPtr<GLLibraryEGL> ret = new GLLibraryEGL;
- if (!ret->Init(out_failureId)) {
- return nullptr;
+RefPtr<GLLibraryEGL> GLLibraryEGL::Get(nsACString* const out_failureId) {
+ StaticMutexAutoLock lock(sMutex);
+ if (!sInstance) {
+ sInstance = new GLLibraryEGL;
+ if (NS_WARN_IF(!sInstance->Init(out_failureId))) {
+ sInstance = nullptr;
+ }
}
- return ret;
+ return sInstance;
+}
+
+/* static */ void GLLibraryEGL::Shutdown() {
+ StaticMutexAutoLock lock(sMutex);
+ sInstance = nullptr;
}
bool GLLibraryEGL::Init(nsACString* const out_failureId) {
@@ -640,9 +657,9 @@ static void MarkExtensions(const char* r
// -
// static
-std::shared_ptr<EglDisplay> EglDisplay::Create(GLLibraryEGL& lib,
- const EGLDisplay display,
- const bool isWarp) {
+std::shared_ptr<EglDisplay> EglDisplay::Create(
+ GLLibraryEGL& lib, const EGLDisplay display, const bool isWarp,
+ const StaticMutexAutoLock& aProofOfLock) {
// Retrieve the EglDisplay if it already exists
{
const auto itr = lib.mActiveDisplays.find(display);
@@ -710,6 +727,7 @@ EglDisplay::EglDisplay(const PrivateUseO
}
EglDisplay::~EglDisplay() {
+ StaticMutexAutoLock lock(GLLibraryEGL::sMutex);
fTerminate();
mLib->mActiveDisplays.erase(mDisplay);
}
@@ -718,16 +736,24 @@ EglDisplay::~EglDisplay() {
std::shared_ptr<EglDisplay> GLLibraryEGL::DefaultDisplay(
nsACString* const out_failureId) {
+ StaticMutexAutoLock lock(sMutex);
auto ret = mDefaultDisplay.lock();
if (ret) return ret;
- ret = CreateDisplay(false, out_failureId);
+ ret = CreateDisplayLocked(false, out_failureId, lock);
mDefaultDisplay = ret;
return ret;
}
std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplay(
const bool forceAccel, nsACString* const out_failureId) {
+ StaticMutexAutoLock lock(sMutex);
+ return CreateDisplayLocked(forceAccel, out_failureId, lock);
+}
+
+std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplayLocked(
+ const bool forceAccel, nsACString* const out_failureId,
+ const StaticMutexAutoLock& aProofOfLock) {
std::shared_ptr<EglDisplay> ret;
if (IsExtensionSupported(EGLLibExtension::ANGLE_platform_angle_d3d)) {
@@ -747,7 +773,7 @@ std::shared_ptr<EglDisplay> GLLibraryEGL
// Hardware accelerated ANGLE path (supported or force accel)
if (shouldTryAccel) {
- ret = GetAndInitDisplayForAccelANGLE(*this, out_failureId);
+ ret = GetAndInitDisplayForAccelANGLE(*this, out_failureId, aProofOfLock);
}
// Report the acceleration status to telemetry
@@ -766,7 +792,7 @@ std::shared_ptr<EglDisplay> GLLibraryEGL
// Fallback to a WARP display if ANGLE fails, or if WARP is forced
if (!ret && shouldTryWARP) {
- ret = GetAndInitWARPDisplay(*this, EGL_DEFAULT_DISPLAY);
+ ret = GetAndInitWARPDisplay(*this, EGL_DEFAULT_DISPLAY, aProofOfLock);
if (!ret) {
if (out_failureId->IsEmpty()) {
*out_failureId = "FEATURE_FAILURE_WARP_FALLBACK"_ns;
@@ -788,7 +814,7 @@ std::shared_ptr<EglDisplay> GLLibraryEGL
}
}
#endif
- ret = GetAndInitDisplay(*this, nativeDisplay);
+ ret = GetAndInitDisplay(*this, nativeDisplay, aProofOfLock);
}
if (!ret) {
diff -up firefox-99.0/gfx/gl/GLLibraryEGL.h.D142257 firefox-99.0/gfx/gl/GLLibraryEGL.h
--- firefox-99.0/gfx/gl/GLLibraryEGL.h.D142257 2022-03-31 01:24:50.000000000 +0200
+++ firefox-99.0/gfx/gl/GLLibraryEGL.h 2022-04-06 10:32:53.288145587 +0200
@@ -13,6 +13,8 @@
#include "mozilla/EnumTypeTraits.h"
#include "mozilla/Maybe.h"
#include "mozilla/RefPtr.h"
+#include "mozilla/StaticMutex.h"
+#include "mozilla/StaticPtr.h"
#include "nsISupports.h"
#include "prlink.h"
@@ -125,14 +127,22 @@ class GLLibraryEGL final {
std::unordered_map<EGLDisplay, std::weak_ptr<EglDisplay>> mActiveDisplays;
public:
- static RefPtr<GLLibraryEGL> Create(nsACString* const out_failureId);
+ static RefPtr<GLLibraryEGL> Get(nsACString* const out_failureId);
+ static void Shutdown();
private:
~GLLibraryEGL() = default;
+ static StaticMutex sMutex;
+ static StaticRefPtr<GLLibraryEGL> sInstance GUARDED_BY(sMutex);
+
bool Init(nsACString* const out_failureId);
void InitLibExtensions();
+ std::shared_ptr<EglDisplay> CreateDisplayLocked(
+ bool forceAccel, nsACString* const out_failureId,
+ const StaticMutexAutoLock& aProofOfLock);
+
public:
Maybe<SymbolLoader> GetSymbolLoader() const;
@@ -599,8 +609,9 @@ class EglDisplay final {
struct PrivateUseOnly final {};
public:
- static std::shared_ptr<EglDisplay> Create(GLLibraryEGL&, EGLDisplay,
- bool isWarp);
+ static std::shared_ptr<EglDisplay> Create(
+ GLLibraryEGL&, EGLDisplay, bool isWarp,
+ const StaticMutexAutoLock& aProofOfLock);
// Only `public` for make_shared.
EglDisplay(const PrivateUseOnly&, GLLibraryEGL&, EGLDisplay, bool isWarp);
diff -up firefox-99.0/gfx/webrender_bindings/RenderThread.cpp.D142257 firefox-99.0/gfx/webrender_bindings/RenderThread.cpp
--- firefox-99.0/gfx/webrender_bindings/RenderThread.cpp.D142257 2022-03-31 01:24:51.000000000 +0200
+++ firefox-99.0/gfx/webrender_bindings/RenderThread.cpp 2022-04-06 10:32:53.288145587 +0200
@@ -1163,7 +1163,7 @@ static already_AddRefed<gl::GLContext> C
}
nsCString failureId;
- const auto lib = gl::DefaultEglLibrary(&failureId);
+ const auto lib = gl::GLLibraryEGL::Get(&failureId);
if (!lib) {
aError.Assign(
nsPrintfCString("RcANGLE(load EGL lib failed: %s)", failureId.get()));

View File

@ -1,77 +0,0 @@
diff -up firefox-88.0/dom/media/platforms/PDMFactory.cpp.ffvpx-with-vapi firefox-88.0/dom/media/platforms/PDMFactory.cpp
--- firefox-88.0/dom/media/platforms/PDMFactory.cpp.ffvpx-with-vapi 2021-04-15 21:44:28.000000000 +0200
+++ firefox-88.0/dom/media/platforms/PDMFactory.cpp 2021-04-19 13:27:07.808429721 +0200
@@ -481,12 +481,6 @@ void PDMFactory::CreateRddPDMs() {
CreateAndStartupPDM<AppleDecoderModule>();
}
#endif
-#ifdef MOZ_FFVPX
- if (StaticPrefs::media_ffvpx_enabled() &&
- StaticPrefs::media_rdd_ffvpx_enabled()) {
- CreateAndStartupPDM<FFVPXRuntimeLinker>();
- }
-#endif
#ifdef MOZ_FFMPEG
if (StaticPrefs::media_ffmpeg_enabled() &&
StaticPrefs::media_rdd_ffmpeg_enabled() &&
@@ -495,6 +489,12 @@ void PDMFactory::CreateRddPDMs() {
FFmpegRuntimeLinker::LinkStatusCode());
}
#endif
+#ifdef MOZ_FFVPX
+ if (StaticPrefs::media_ffvpx_enabled() &&
+ StaticPrefs::media_rdd_ffvpx_enabled()) {
+ CreateAndStartupPDM<FFVPXRuntimeLinker>();
+ }
+#endif
CreateAndStartupPDM<AgnosticDecoderModule>();
}
@@ -525,11 +525,6 @@ void PDMFactory::CreateContentPDMs() {
CreateAndStartupPDM<OmxDecoderModule>();
}
#endif
-#ifdef MOZ_FFVPX
- if (StaticPrefs::media_ffvpx_enabled()) {
- CreateAndStartupPDM<FFVPXRuntimeLinker>();
- }
-#endif
#ifdef MOZ_FFMPEG
if (StaticPrefs::media_ffmpeg_enabled() &&
!CreateAndStartupPDM<FFmpegRuntimeLinker>()) {
@@ -537,6 +532,11 @@ void PDMFactory::CreateContentPDMs() {
FFmpegRuntimeLinker::LinkStatusCode());
}
#endif
+#ifdef MOZ_FFVPX
+ if (StaticPrefs::media_ffvpx_enabled()) {
+ CreateAndStartupPDM<FFVPXRuntimeLinker>();
+ }
+#endif
#ifdef MOZ_WIDGET_ANDROID
if (StaticPrefs::media_android_media_codec_enabled()) {
StartupPDM(AndroidDecoderModule::Create(),
@@ -571,11 +571,6 @@ void PDMFactory::CreateDefaultPDMs() {
CreateAndStartupPDM<OmxDecoderModule>();
}
#endif
-#ifdef MOZ_FFVPX
- if (StaticPrefs::media_ffvpx_enabled()) {
- CreateAndStartupPDM<FFVPXRuntimeLinker>();
- }
-#endif
#ifdef MOZ_FFMPEG
if (StaticPrefs::media_ffmpeg_enabled() &&
!CreateAndStartupPDM<FFmpegRuntimeLinker>()) {
@@ -583,6 +578,11 @@ void PDMFactory::CreateDefaultPDMs() {
FFmpegRuntimeLinker::LinkStatusCode());
}
#endif
+#ifdef MOZ_FFVPX
+ if (StaticPrefs::media_ffvpx_enabled()) {
+ CreateAndStartupPDM<FFVPXRuntimeLinker>();
+ }
+#endif
#ifdef MOZ_WIDGET_ANDROID
if (StaticPrefs::media_android_media_codec_enabled()) {
StartupPDM(AndroidDecoderModule::Create(),

View File

@ -126,7 +126,7 @@ ExcludeArch: aarch64
%if %{?system_nss}
%global nspr_version 4.26
%global nspr_build_version %{nspr_version}
%global nss_version 3.74
%global nss_version 3.76
%global nss_build_version %{nss_version}
%endif
@ -162,7 +162,7 @@ ExcludeArch: aarch64
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 98.0.2
Version: 99.0
Release: 1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
@ -214,16 +214,8 @@ Patch49: build-arm-libaom.patch
Patch53: firefox-gcc-build.patch
Patch54: mozilla-1669639.patch
Patch55: firefox-testing.patch
Patch57: firefox-disable-ffvpx-with-vapi.patch
Patch61: firefox-glibc-dynstack.patch
Patch62: build-python.patch
#Patch64: mozilla-1753402.patch
# GCC12 build fixes
Patch65: D139022.diff
Patch66: D139078.diff
Patch67: D139088.diff
Patch68: D139703.diff
Patch69: D139704.diff
Patch70: crossbeam-downgrade-rhbz2063961.patch
Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch
@ -250,11 +242,7 @@ Patch402: mozilla-1196777.patch
Patch407: mozilla-1667096.patch
Patch408: mozilla-1663844.patch
Patch415: mozilla-1670333.patch
# ffmpeg50
Patch500: D139696.diff
Patch501: D139697.diff
Patch502: D139698.diff
Patch503: D139699.diff
Patch416: D142257.diff
# PGO/LTO patches
Patch600: pgo.patch
@ -471,14 +459,6 @@ This package contains results of tests executed during build.
%patch49 -p1 -b .build-arm-libaom
%patch53 -p1 -b .firefox-gcc-build
%patch54 -p1 -b .1669639
#%patch55 -p1 -b .testing
%patch57 -p1 -b .ffvpx-with-vapi
#%patch64 -p1 -b .1753402
%patch65 -p1 -b .D139022
%patch66 -p1 -b .D139078
%patch67 -p1 -b .D139088
%patch68 -p1 -b .D139703
%patch69 -p1 -b .D139704
%ifarch aarch64
%patch70 -p1 -b .crossbeam-downgrade-rhbz2063961
%endif
@ -505,14 +485,7 @@ This package contains results of tests executed during build.
%patch407 -p1 -b .1667096
%patch408 -p1 -b .1663844
%patch415 -p1 -b .1670333
# ffmpeg50
%ifnarch ppc64le
%patch500 -p1 -b .D139696
%patch501 -p1 -b .D139697
%patch502 -p1 -b .D139698
%patch503 -p1 -b .D139699
%endif
%patch416 -p1 -b .D142257
# PGO patches
%if %{build_with_pgo}
@ -1079,6 +1052,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
* Wed Apr 6 2022 Martin Stransky <stransky@redhat.com> - 99.0-1
- Updated to 99.0
* Thu Mar 31 2022 Martin Stransky <stransky@redhat.com> - 98.0.2-1
- Updated to 98.0.2

View File

@ -1,6 +1,6 @@
diff -up firefox-88.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-88.0/dom/media/mp4/MP4Demuxer.cpp
--- firefox-88.0/dom/media/mp4/MP4Demuxer.cpp.1670333 2021-04-15 21:44:28.000000000 +0200
+++ firefox-88.0/dom/media/mp4/MP4Demuxer.cpp 2021-04-19 13:36:44.101762211 +0200
diff -up firefox-99.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-99.0/dom/media/mp4/MP4Demuxer.cpp
--- firefox-99.0/dom/media/mp4/MP4Demuxer.cpp.1670333 2022-03-31 01:24:44.000000000 +0200
+++ firefox-99.0/dom/media/mp4/MP4Demuxer.cpp 2022-04-04 09:58:35.606351546 +0200
@@ -31,6 +31,8 @@ mozilla::LogModule* GetDemuxerLog() { re
DDMOZ_LOG(gMediaDemuxerLog, mozilla::LogLevel::Debug, "::%s: " arg, \
__func__, ##__VA_ARGS__)
@ -23,9 +23,9 @@ diff -up firefox-88.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-88.0/dom/medi
if (sample->mKeyframe != keyframe) {
NS_WARNING(nsPrintfCString("Frame incorrectly marked as %skeyframe "
"@ pts:%" PRId64 " dur:%" PRId64
diff -up firefox-88.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-88.0/dom/media/platforms/PDMFactory.cpp
--- firefox-88.0/dom/media/platforms/PDMFactory.cpp.1670333 2021-04-19 13:36:44.087761790 +0200
+++ firefox-88.0/dom/media/platforms/PDMFactory.cpp 2021-04-19 13:39:52.676433734 +0200
diff -up firefox-99.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-99.0/dom/media/platforms/PDMFactory.cpp
--- firefox-99.0/dom/media/platforms/PDMFactory.cpp.1670333 2022-03-31 01:24:44.000000000 +0200
+++ firefox-99.0/dom/media/platforms/PDMFactory.cpp 2022-04-04 10:09:57.383419125 +0200
@@ -58,6 +58,8 @@
#include <functional>
@ -35,22 +35,16 @@ diff -up firefox-88.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-88.0/do
namespace mozilla {
#define PDM_INIT_LOG(msg, ...) \
@@ -572,10 +574,10 @@ void PDMFactory::CreateDefaultPDMs() {
}
#endif
@@ -495,7 +497,7 @@ void PDMFactory::CreateRddPDMs() {
#ifdef MOZ_FFMPEG
- if (StaticPrefs::media_ffmpeg_enabled() &&
if (StaticPrefs::media_ffmpeg_enabled() &&
StaticPrefs::media_rdd_ffmpeg_enabled() &&
- !CreateAndStartupPDM<FFmpegRuntimeLinker>()) {
- mFailureFlags += GetFailureFlagBasedOnFFmpegStatus(
- FFmpegRuntimeLinker::LinkStatusCode());
+ if (StaticPrefs::media_ffmpeg_enabled()) {
+ mFFmpegUsed = CreateAndStartupPDM<FFmpegRuntimeLinker>();
+ if (!mFFmpegUsed) {
+ mFailureFlags += GetFailureFlagBasedOnFFmpegStatus(FFmpegRuntimeLinker::LinkStatusCode()); }
+ !(mFFmpegUsed = CreateAndStartupPDM<FFmpegRuntimeLinker>())) {
mFailureFlags += GetFailureFlagBasedOnFFmpegStatus(
FFmpegRuntimeLinker::LinkStatusCode());
}
#endif
#ifdef MOZ_FFVPX
@@ -592,8 +594,9 @@ void PDMFactory::CreateDefaultPDMs() {
@@ -602,8 +604,9 @@ void PDMFactory::CreateDefaultPDMs() {
CreateAndStartupPDM<AgnosticDecoderModule>();
@ -61,9 +55,9 @@ diff -up firefox-88.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-88.0/do
mFailureFlags += DecoderDoctorDiagnostics::Flags::GMPPDMFailedToStartup;
}
}
diff -up firefox-88.0/dom/media/platforms/PDMFactory.h.1670333 firefox-88.0/dom/media/platforms/PDMFactory.h
--- firefox-88.0/dom/media/platforms/PDMFactory.h.1670333 2021-04-15 21:44:28.000000000 +0200
+++ firefox-88.0/dom/media/platforms/PDMFactory.h 2021-04-19 13:36:44.101762211 +0200
diff -up firefox-99.0/dom/media/platforms/PDMFactory.h.1670333 firefox-99.0/dom/media/platforms/PDMFactory.h
--- firefox-99.0/dom/media/platforms/PDMFactory.h.1670333 2022-03-31 01:24:44.000000000 +0200
+++ firefox-99.0/dom/media/platforms/PDMFactory.h 2022-04-04 09:58:35.606351546 +0200
@@ -121,6 +121,7 @@ class PDMFactory final {
RefPtr<PlatformDecoderModule> mNullPDM;

View File

@ -1,7 +1,7 @@
diff -up firefox-96.0/build/moz.configure/lto-pgo.configure.pgo firefox-96.0/build/moz.configure/lto-pgo.configure
--- firefox-96.0/build/moz.configure/lto-pgo.configure.pgo 2022-01-06 19:32:35.000000000 +0100
+++ firefox-96.0/build/moz.configure/lto-pgo.configure 2022-01-11 15:43:02.193378698 +0100
@@ -248,8 +248,8 @@ def lto(
diff -up firefox-99.0/build/moz.configure/lto-pgo.configure.pgo firefox-99.0/build/moz.configure/lto-pgo.configure
--- firefox-99.0/build/moz.configure/lto-pgo.configure.pgo 2022-03-31 01:24:38.000000000 +0200
+++ firefox-99.0/build/moz.configure/lto-pgo.configure 2022-04-04 10:15:45.387694143 +0200
@@ -247,8 +247,8 @@ def lto(
cflags.append("-flto")
ldflags.append("-flto")
else:
@ -12,7 +12,7 @@ diff -up firefox-96.0/build/moz.configure/lto-pgo.configure.pgo firefox-96.0/bui
if target.os == "Android" and value == "cross":
# Work around https://github.com/rust-lang/rust/issues/90088
@@ -265,7 +265,7 @@ def lto(
@@ -264,7 +264,7 @@ def lto(
if value == "full":
cflags.append("-flto")
else:
@ -21,9 +21,9 @@ diff -up firefox-96.0/build/moz.configure/lto-pgo.configure.pgo firefox-96.0/bui
# With clang-cl, -flto can only be used with -c or -fuse-ld=lld.
# AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld.
cflags.append("-fuse-ld=lld")
diff -up firefox-96.0/build/pgo/profileserver.py.pgo firefox-96.0/build/pgo/profileserver.py
--- firefox-96.0/build/pgo/profileserver.py.pgo 2022-01-06 16:56:23.000000000 +0100
+++ firefox-96.0/build/pgo/profileserver.py 2022-01-11 15:43:02.193378698 +0100
diff -up firefox-99.0/build/pgo/profileserver.py.pgo firefox-99.0/build/pgo/profileserver.py
--- firefox-99.0/build/pgo/profileserver.py.pgo 2022-03-31 01:24:38.000000000 +0200
+++ firefox-99.0/build/pgo/profileserver.py 2022-04-04 10:15:45.387694143 +0200
@@ -11,7 +11,7 @@ import glob
import subprocess
@ -70,9 +70,9 @@ diff -up firefox-96.0/build/pgo/profileserver.py.pgo firefox-96.0/build/pgo/prof
llvm_profdata = env.get("LLVM_PROFDATA")
if llvm_profdata:
profraw_files = glob.glob("*.profraw")
diff -up firefox-96.0/build/unix/mozconfig.unix.pgo firefox-96.0/build/unix/mozconfig.unix
--- firefox-96.0/build/unix/mozconfig.unix.pgo 2022-01-06 16:56:24.000000000 +0100
+++ firefox-96.0/build/unix/mozconfig.unix 2022-01-11 15:43:02.193378698 +0100
diff -up firefox-99.0/build/unix/mozconfig.unix.pgo firefox-99.0/build/unix/mozconfig.unix
--- firefox-99.0/build/unix/mozconfig.unix.pgo 2022-03-31 01:24:38.000000000 +0200
+++ firefox-99.0/build/unix/mozconfig.unix 2022-04-04 10:15:45.387694143 +0200
@@ -4,6 +4,15 @@ if [ -n "$FORCE_GCC" ]; then
CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
@ -89,18 +89,18 @@ diff -up firefox-96.0/build/unix/mozconfig.unix.pgo firefox-96.0/build/unix/mozc
# We want to make sure we use binutils and other binaries in the tooltool
# package.
mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
diff -up firefox-96.0/extensions/spellcheck/src/moz.build.pgo firefox-96.0/extensions/spellcheck/src/moz.build
--- firefox-96.0/extensions/spellcheck/src/moz.build.pgo 2022-01-11 15:43:02.193378698 +0100
+++ firefox-96.0/extensions/spellcheck/src/moz.build 2022-01-11 15:49:52.929362701 +0100
diff -up firefox-99.0/extensions/spellcheck/src/moz.build.pgo firefox-99.0/extensions/spellcheck/src/moz.build
--- firefox-99.0/extensions/spellcheck/src/moz.build.pgo 2022-03-31 01:24:50.000000000 +0200
+++ firefox-99.0/extensions/spellcheck/src/moz.build 2022-04-04 10:15:45.387694143 +0200
@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
"mozInlineSpellChecker.h",
"mozSpellChecker.h",
]
+
+CXXFLAGS += ['-fno-devirtualize']
diff -up firefox-96.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-96.0/toolkit/components/terminator/nsTerminator.cpp
--- firefox-96.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2022-01-06 16:58:15.000000000 +0100
+++ firefox-96.0/toolkit/components/terminator/nsTerminator.cpp 2022-01-11 15:43:02.193378698 +0100
diff -up firefox-99.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-99.0/toolkit/components/terminator/nsTerminator.cpp
--- firefox-99.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2022-04-04 10:15:45.387694143 +0200
+++ firefox-99.0/toolkit/components/terminator/nsTerminator.cpp 2022-04-04 10:19:07.022239556 +0200
@@ -466,6 +466,11 @@ void nsTerminator::StartWatchdog() {
}
#endif
@ -111,5 +111,5 @@ diff -up firefox-96.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox
+ crashAfterMS = INT32_MAX;
+
UniquePtr<Options> options(new Options());
const PRIntervalTime ticksDuration =
PR_MillisecondsToInterval(HEARTBEAT_INTERVAL_MS);
// crashAfterTicks is guaranteed to be > 0 as
// crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS

View File

@ -1,4 +1,4 @@
SHA512 (cbindgen-vendor.tar.xz) = b9ab1498be90ecf60822df7021f8812f124550d97f8cd687c69d3ab56fc5fb714bfe88c78c978a1794d211724909a9a5cad6a4b483fa05f762909c45d5075520
SHA512 (mochitest-python.tar.gz) = 18e1aeb475df5fbf1fe3838897d5ac2f3114aa349030713fc2be27af087b1b12f57642621b87bd052f324a7cb7fbae5f36b21502191d85692f62c8cdd69c8bf2
SHA512 (firefox-98.0.2.source.tar.xz) = b567b53fcdc08491063d535545f558ea56ec5be02ca540661de116986245b79f509e0103cea5661faf9f4b3d30b67758ebdb4b30401e260ee27cbb300203f36e
SHA512 (firefox-langpacks-98.0.2-20220331.tar.xz) = eba580d5dcef421f2a4e3be62a2fdf0788328cc065ae8019062e5d524f5d49b15709892e5846b9fa63148278983c8e627ad85d8a4656502c9f6543474bb94bc6
SHA512 (firefox-99.0.source.tar.xz) = 08f6d5a668140c4275aba6df463ed3af596043dfe5f27573583afbc1e9f6b27ebca79a52ce2c9598261c631b400b5378744e9e70f51ef9c4098b419e9904aa7c
SHA512 (firefox-langpacks-99.0-20220331.tar.xz) = 9ab5d8989644da67cacfe729c13309ed4f42b654b9b9113bcdb7155b59fcb12fc816de8a3fdea709c9d91f2d5b168eebec5ada6f7637e111ea374adc9eb9c984