OLD | NEW |
(Empty) | |
| 1 /* Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. |
| 4 * |
| 5 * This header ensures (at compile time) that each type has the expected size. |
| 6 * The purpose is to ensure that the ABI of PPAPI is known, consistent, and |
| 7 * stable. If the size of one of these types changes, then it is necessary to |
| 8 * change the version of any interfaces that rely on the changed type(s). |
| 9 * |
| 10 * Note that the ABI only consists of the headers under ppapi/c. But they may |
| 11 * be compiled by either a C or C++ compiler, so we want to make sure they are |
| 12 * consistent regardless of whether a C or C++ compiler is used. See |
| 13 * test_struct_sizes_c.c and test_struct_sizes_cpp.cc for more information. |
| 14 */ |
| 15 |
| 16 #ifndef PPAPI_TESTS_ALL_C_SIZES_H_ |
| 17 #define PPAPI_TESTS_ALL_C_SIZES_H_ |
| 18 |
| 19 #include "ppapi/tests/all_c_includes.h" |
| 20 |
| 21 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_CharSet_ConversionError, 4); |
| 22 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_CursorType_Dev, 4); |
| 23 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_ObjectProperty_Modifier, 4); |
| 24 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecId_Dev, 4); |
| 25 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecLevel_Dev, 4); |
| 26 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecProfile_Dev, 4); |
| 27 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecodeError_Dev, 4); |
| 28 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecoderEvent_Dev, 4); |
| 29 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameBufferConst_Dev, 4); |
| 30 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameColorType_Dev, 4); |
| 31 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameInfoFlag_Dev, 4); |
| 32 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameSurfaceType_Dev, 4); |
| 33 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoKey_Dev, 4); |
| 34 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoOperation_Dev, 4); |
| 35 PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoPayloadFormat_Dev, 4); |
| 36 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_AudioSampleRate_Dev, 4); |
| 37 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Bool, 4); |
| 38 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileChooserMode_Dev, 4); |
| 39 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileOpenFlags_Dev, 4); |
| 40 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileSystemType_Dev, 4); |
| 41 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FileType_Dev, 4); |
| 42 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FontFamily_Dev, 4); |
| 43 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_FontWeight_Dev, 4); |
| 44 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_ImageDataFormat, 4); |
| 45 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_InputEvent_Modifier, 4); |
| 46 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_InputEvent_MouseButton, 4); |
| 47 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_InputEvent_Type, 4); |
| 48 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Instance, 8); |
| 49 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Module, 8); |
| 50 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_PrintOrientation_Dev, 4); |
| 51 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_PrintOutputFormat_Dev, 4); |
| 52 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Resource, 8); |
| 53 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_ScrollBy_Dev, 4); |
| 54 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Time, 8); |
| 55 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_TimeTicks, 8); |
| 56 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_URLRequestProperty, 4); |
| 57 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_URLResponseProperty, 4); |
| 58 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VarType, 4); |
| 59 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoConfigElement_Dev, 4); |
| 60 PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoDecodeData_Dev, 8); |
| 61 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FileInfo_Dev, 40); |
| 62 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FontMetrics_Dev, 20); |
| 63 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ImageDataDesc, 16); |
| 64 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_InputEvent, 80); |
| 65 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_InputEvent_Character, 12); |
| 66 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_InputEvent_Key, 8); |
| 67 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_InputEvent_Mouse, 20); |
| 68 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_InputEvent_Wheel, 24); |
| 69 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Point, 8); |
| 70 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_PrintPageNumberRange_Dev, 8); |
| 71 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_PrintSettings_Dev, 32); |
| 72 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Rect, 16); |
| 73 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Size, 8); |
| 74 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_UrlComponent_Dev, 8); |
| 75 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_UrlComponents_Dev, 64); |
| 76 |
| 77 #if !defined(__native_client__) && (defined(_M_X64) || defined(__x86_64__)) |
| 78 /* These sizes are for 64-bit compilation on Windows, Mac, and Linux. Native |
| 79 client follows ILP32 even if -m64 is used. This means pointers are always |
| 80 4 bytes in native client, and it matches Win32 (see below). |
| 81 |
| 82 Each of these structs uses at least one type which differs in size or |
| 83 alignment between 64-bit and 32-bit (e.g. pointers, int64_t, uint64_t, |
| 84 or double), and they are not padded to keep their size consistent. */ |
| 85 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ClassProperty, 40); |
| 86 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_CompletionCallback, 16); |
| 87 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_DirectoryEntry_Dev, 16); |
| 88 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FileChooserOptions_Dev, 16); |
| 89 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FontDescription_Dev, 48); |
| 90 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ObjectProperty, 72); |
| 91 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_TextRun_Dev, 24); |
| 92 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Var, 16); |
| 93 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoCompressedDataBuffer_Dev, 32); |
| 94 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoDecoderConfig_Dev, 40); |
| 95 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoFrameBuffer_Dev, 112); |
| 96 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoUncompressedDataBuffer_Dev, 136); |
| 97 #else |
| 98 /* This section is for compilation on 32-bit targets plus native client (in both |
| 99 32-bit and 64-bit mode, since native client always conforms to ILP32). |
| 100 |
| 101 These types all contain pointers and have no types that are 8-byte aligned on |
| 102 Windows/NaCl. The pointers cause the sizes to differ between 32-bit and |
| 103 64-bit, but the lack of 8-byte-aligned types allows them to be consistent |
| 104 between Windows 32-bit, Native Client, and Mac/Linux 32-bit. */ |
| 105 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ClassProperty, 20); |
| 106 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_CompletionCallback, 8); |
| 107 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FileChooserOptions_Dev, 8); |
| 108 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoDecoderConfig_Dev, 20); |
| 109 |
| 110 # if defined (_MSC_VER) || defined(__native_client__) |
| 111 /* Windows 32-bit and Native Client (both -m32 and -m64). Pointers are 4 bytes, |
| 112 but 8-byte types like int64_t and double are 8-byte aligned. These |
| 113 structures have 8-byte types in them and have the same size on Windows/NaCl |
| 114 as they do on 64-bit Linux and Mac. */ |
| 115 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_DirectoryEntry_Dev, 16); |
| 116 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FontDescription_Dev, 48); |
| 117 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ObjectProperty, 72); |
| 118 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_TextRun_Dev, 24); |
| 119 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Var, 16); |
| 120 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoCompressedDataBuffer_Dev, 32); |
| 121 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoFrameBuffer_Dev, 112); |
| 122 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoUncompressedDataBuffer_Dev, 136); |
| 123 |
| 124 # else |
| 125 /* Linux and Mac x86 32-bit, ARM 32-bit. These types all contain 1 or more |
| 126 types that are 8-byte aligned on Windows and NaCl (e.g., int64_t or double), |
| 127 but on Mac and Linux 32-bit, those types 4-byte aligned. */ |
| 128 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_FontDescription_Dev, 40); |
| 129 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_ObjectProperty, 52); |
| 130 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_TextRun_Dev, 20); |
| 131 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_Var, 12); |
| 132 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoCompressedDataBuffer_Dev, 24); |
| 133 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoFrameBuffer_Dev, 88); |
| 134 PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoUncompressedDataBuffer_Dev, 108); |
| 135 # endif |
| 136 #endif |
| 137 |
| 138 #endif // PPAPI_TESTS_ALL_C_SIZES_H_ |
OLD | NEW |