Title: [278870] trunk/Source
Revision
278870
Author
eric.carl...@apple.com
Date
2021-06-15 06:13:56 -0700 (Tue, 15 Jun 2021)

Log Message

[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.

Source/WebCore:

* platform/graphics/cocoa/WebCoreDecompressionSession.mm:
(WebCore::WebCoreDecompressionSession::enqueueSample): static_assert CMBufferQueueRef
callback struct alignment and version size.

Source/WebKit:

* 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.

Modified Paths

Diff

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to