Modified: trunk/Source/WebCore/ChangeLog (278869 => 278870)
--- trunk/Source/WebCore/ChangeLog 2021-06-15 13:11:25 UTC (rev 278869)
+++ trunk/Source/WebCore/ChangeLog 2021-06-15 13:13:56 UTC (rev 278870)
@@ -1,3 +1,15 @@
+2021-06-15 Eric Carlson <eric.carl...@apple.com>
+
+ [Mac] CoreMedia WrapperClass does not need alignment fixup
+ https://bugs.webkit.org/show_bug.cgi?id=226978
+ rdar://78864290
+
+ Reviewed by Geoffrey Garen and Dan Bernstein.
+
+ * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
+ (WebCore::WebCoreDecompressionSession::enqueueSample): static_assert CMBufferQueueRef
+ callback struct alignment and version size.
+
2021-06-15 Alan Bujtas <za...@apple.com>
[LFC][TFC] Add support for preferred width computation when mixed width types are present
Modified: trunk/Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm (278869 => 278870)
--- trunk/Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm 2021-06-15 13:11:25 UTC (rev 278869)
+++ trunk/Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm 2021-06-15 13:13:56 UTC (rev 278870)
@@ -119,7 +119,7 @@
if (!m_producerQueue) {
CMBufferQueueRef outQueue { nullptr };
#pragma pack(push, 4)
- struct { uint8_t pad[padSize]; CMBufferCallbacks callbacks; } callbacks { { }, {
+ struct BufferCallbacks { uint8_t pad[padSize]; CMBufferCallbacks callbacks; } callbacks { { }, {
0,
nullptr,
&getDecodeTime,
@@ -131,6 +131,9 @@
nullptr,
} };
#pragma pack(pop)
+ static_assert(sizeof(callbacks.callbacks.version) == sizeof(uint32_t), "Version field must be 4 bytes");
+ static_assert(alignof(BufferCallbacks) == 4, "CMBufferCallbacks struct must have 4 byte alignment");
+
CMBufferQueueCreate(kCFAllocatorDefault, kMaximumCapacity, &callbacks.callbacks, &outQueue);
m_producerQueue = adoptCF(outQueue);
}
@@ -138,7 +141,7 @@
if (!m_consumerQueue) {
CMBufferQueueRef outQueue { nullptr };
#pragma pack(push, 4)
- struct { uint8_t pad[padSize]; CMBufferCallbacks callbacks; } callbacks { { }, {
+ struct BufferCallbacks { uint8_t pad[padSize]; CMBufferCallbacks callbacks; } callbacks { { }, {
0,
nullptr,
&getDecodeTime,
@@ -150,6 +153,9 @@
nullptr,
} };
#pragma pack(pop)
+ static_assert(sizeof(callbacks.callbacks.version) == sizeof(uint32_t), "Version field must be 4 bytes");
+ static_assert(alignof(BufferCallbacks) == 4, "CMBufferCallbacks struct alignment must be 4");
+
CMBufferQueueCreate(kCFAllocatorDefault, kMaximumCapacity, &callbacks.callbacks, &outQueue);
m_consumerQueue = adoptCF(outQueue);
}
Modified: trunk/Source/WebKit/ChangeLog (278869 => 278870)
--- trunk/Source/WebKit/ChangeLog 2021-06-15 13:11:25 UTC (rev 278869)
+++ trunk/Source/WebKit/ChangeLog 2021-06-15 13:13:56 UTC (rev 278870)
@@ -1,3 +1,16 @@
+2021-06-15 Eric Carlson <eric.carl...@apple.com>
+
+ [Mac] CoreMedia WrapperClass does not need alignment fixup
+ https://bugs.webkit.org/show_bug.cgi?id=226978
+ rdar://78864290
+
+ Reviewed by Geoffrey Garen and Dan Bernstein.
+
+ * Shared/mac/MediaFormatReader/CoreMediaWrapped.h:
+ (WebKit::CoreMediaWrapped<Wrapped>::vTable): Don't add padding to WrapperClass,
+ it isn't necessary. static_assert CMBaseClass and WrapperClass alignment and
+ .version sizes.
+
2021-06-15 Martin Robinson <mrobin...@webkit.org>
[css-scroll-snap] New snap containers always snap to the first scroll position
Modified: trunk/Source/WebKit/Shared/mac/MediaFormatReader/CoreMediaWrapped.h (278869 => 278870)
--- trunk/Source/WebKit/Shared/mac/MediaFormatReader/CoreMediaWrapped.h 2021-06-15 13:11:25 UTC (rev 278869)
+++ trunk/Source/WebKit/Shared/mac/MediaFormatReader/CoreMediaWrapped.h 2021-06-15 13:13:56 UTC (rev 278870)
@@ -154,13 +154,23 @@
#pragma pack(push, 4)
static constexpr struct { uint8_t pad[padSize]; CMBaseClass baseClass; } baseClass { { }, wrapperClass<sizeof(Wrapped)>() };
- static constexpr struct { uint8_t pad[padSize]; WrapperClass derivedClass; } derivedClass { { }, Wrapped::wrapperClass() };
#pragma pack(pop)
+ static constexpr WrapperClass derivedClass = Wrapped::wrapperClass();
+#if CPU(X86_64)
+ static_assert(sizeof(CMBaseClass::version) != sizeof(void*), "Fig struct fixup is required for CMBaseClass on X86_64");
+ static_assert(sizeof(WrapperClass::version) == sizeof(void*), "Fig struct fixup is not required for WrapperClass on X86_64");
+#else
+ static_assert(sizeof(CMBaseClass::version) == sizeof(void*), "Fig struct fixup only required for CMBaseClass on X86_64");
+ static_assert(sizeof(WrapperClass::version) == sizeof(void*), "Fig struct fixup only required for WrapperClass on X86_64");
+#endif
+ static_assert(alignof(CMBaseClass) == 4, "CMBaseClass must have 4 byte alignment");
+ static_assert(alignof(WrapperClass) == sizeof(void*), "WrapperClass must be natually aligned");
+
IGNORE_WARNINGS_BEGIN("missing-field-initializers")
static constexpr WrapperVTable vTable {
{ nullptr, &baseClass.baseClass },
- &derivedClass.derivedClass,
+ &derivedClass
};
IGNORE_WARNINGS_END
return vTable;