Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: ppapi/tests/all_c_sizes.h

Issue 5340003: Make a new test to enforce the sizes of all structs and enums in the C API.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/all_c_includes.h ('k') | ppapi/tests/all_cpp_includes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(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_
OLDNEW
« no previous file with comments | « ppapi/tests/all_c_includes.h ('k') | ppapi/tests/all_cpp_includes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698