ruby_memprofiler_pprof 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +7 -0
  2. data/ext/ruby_memprofiler_pprof/backtrace.c +429 -0
  3. data/ext/ruby_memprofiler_pprof/collector.c +1055 -0
  4. data/ext/ruby_memprofiler_pprof/compat.c +182 -0
  5. data/ext/ruby_memprofiler_pprof/extconf.rb +72 -0
  6. data/ext/ruby_memprofiler_pprof/pprof.upb.c +170 -0
  7. data/ext/ruby_memprofiler_pprof/pprof.upb.h +848 -0
  8. data/ext/ruby_memprofiler_pprof/pprof_out.c +285 -0
  9. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.c +11 -0
  10. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.h +301 -0
  11. data/ext/ruby_memprofiler_pprof/strtab.c +391 -0
  12. data/ext/ruby_memprofiler_pprof/vendor/upb/BUILD +719 -0
  13. data/ext/ruby_memprofiler_pprof/vendor/upb/CONTRIBUTING.md +37 -0
  14. data/ext/ruby_memprofiler_pprof/vendor/upb/DESIGN.md +201 -0
  15. data/ext/ruby_memprofiler_pprof/vendor/upb/LICENSE +26 -0
  16. data/ext/ruby_memprofiler_pprof/vendor/upb/README.md +78 -0
  17. data/ext/ruby_memprofiler_pprof/vendor/upb/WORKSPACE +58 -0
  18. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/BUILD +53 -0
  19. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/amalgamate.py +129 -0
  20. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/build_defs.bzl +160 -0
  21. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/lua.BUILD +127 -0
  22. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/protobuf.patch +54 -0
  23. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/py_proto_library.bzl +137 -0
  24. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/python_downloads.bzl +84 -0
  25. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/system_python.bzl +101 -0
  26. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/upb_proto_library.bzl +388 -0
  27. data/ext/ruby_memprofiler_pprof/vendor/upb/bazel/workspace_deps.bzl +89 -0
  28. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/BUILD +252 -0
  29. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/BUILD.googleapis +54 -0
  30. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/benchmark.cc +333 -0
  31. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/build_defs.bzl +88 -0
  32. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/compare.py +118 -0
  33. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/descriptor.proto +888 -0
  34. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/descriptor_sv.proto +890 -0
  35. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/empty.proto +6 -0
  36. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_protobuf_binary_cc.py +64 -0
  37. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_synthetic_protos.py +118 -0
  38. data/ext/ruby_memprofiler_pprof/vendor/upb/benchmarks/gen_upb_binary_c.py +65 -0
  39. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/BUILD.bazel +102 -0
  40. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/README.md +23 -0
  41. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/build_defs.bzl +73 -0
  42. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/make_cmakelists.py +340 -0
  43. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/staleness_test.py +57 -0
  44. data/ext/ruby_memprofiler_pprof/vendor/upb/cmake/staleness_test_lib.py +186 -0
  45. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/render.py +43 -0
  46. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/style-guide.md +65 -0
  47. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/vs-cpp-protos.md +255 -0
  48. data/ext/ruby_memprofiler_pprof/vendor/upb/docs/wrapping-upb.md +444 -0
  49. data/ext/ruby_memprofiler_pprof/vendor/upb/python/BUILD +216 -0
  50. data/ext/ruby_memprofiler_pprof/vendor/upb/python/convert.c +394 -0
  51. data/ext/ruby_memprofiler_pprof/vendor/upb/python/convert.h +63 -0
  52. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor.c +1694 -0
  53. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor.h +80 -0
  54. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_containers.c +704 -0
  55. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_containers.h +114 -0
  56. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_pool.c +650 -0
  57. data/ext/ruby_memprofiler_pprof/vendor/upb/python/descriptor_pool.h +48 -0
  58. data/ext/ruby_memprofiler_pprof/vendor/upb/python/dist/BUILD.bazel +193 -0
  59. data/ext/ruby_memprofiler_pprof/vendor/upb/python/dist/dist.bzl +190 -0
  60. data/ext/ruby_memprofiler_pprof/vendor/upb/python/extension_dict.c +247 -0
  61. data/ext/ruby_memprofiler_pprof/vendor/upb/python/extension_dict.h +39 -0
  62. data/ext/ruby_memprofiler_pprof/vendor/upb/python/map.c +522 -0
  63. data/ext/ruby_memprofiler_pprof/vendor/upb/python/map.h +66 -0
  64. data/ext/ruby_memprofiler_pprof/vendor/upb/python/message.c +1909 -0
  65. data/ext/ruby_memprofiler_pprof/vendor/upb/python/message.h +101 -0
  66. data/ext/ruby_memprofiler_pprof/vendor/upb/python/minimal_test.py +183 -0
  67. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/BUILD +70 -0
  68. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/README.md +11 -0
  69. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_database_test_wrapper.py +30 -0
  70. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_pool_test_wrapper.py +45 -0
  71. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/descriptor_test_wrapper.py +46 -0
  72. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/generator_test_wrapper.py +30 -0
  73. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/json_format_test_wrapper.py +30 -0
  74. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/keywords_test_wrapper.py +30 -0
  75. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/message_factory_test_wrapper.py +37 -0
  76. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/message_test_wrapper.py +52 -0
  77. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/proto_builder_test_wrapper.py +32 -0
  78. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/pyproto_test_wrapper.bzl +36 -0
  79. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/reflection_test_wrapper.py +45 -0
  80. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/service_reflection_test_wrapper.py +30 -0
  81. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/symbol_database_test_wrapper.py +30 -0
  82. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/text_encoding_test_wrapper.py +30 -0
  83. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/text_format_test_wrapper.py +30 -0
  84. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/unknown_fields_test_wrapper.py +30 -0
  85. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/well_known_types_test_wrapper.py +36 -0
  86. data/ext/ruby_memprofiler_pprof/vendor/upb/python/pb_unit_tests/wire_format_test_wrapper.py +30 -0
  87. data/ext/ruby_memprofiler_pprof/vendor/upb/python/protobuf.c +350 -0
  88. data/ext/ruby_memprofiler_pprof/vendor/upb/python/protobuf.h +230 -0
  89. data/ext/ruby_memprofiler_pprof/vendor/upb/python/py_extension.bzl +55 -0
  90. data/ext/ruby_memprofiler_pprof/vendor/upb/python/python_api.h +61 -0
  91. data/ext/ruby_memprofiler_pprof/vendor/upb/python/repeated.c +828 -0
  92. data/ext/ruby_memprofiler_pprof/vendor/upb/python/repeated.h +69 -0
  93. data/ext/ruby_memprofiler_pprof/vendor/upb/python/unknown_fields.c +404 -0
  94. data/ext/ruby_memprofiler_pprof/vendor/upb/python/unknown_fields.h +39 -0
  95. data/ext/ruby_memprofiler_pprof/vendor/upb/python/version_script.lds +6 -0
  96. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/LICENSE +32 -0
  97. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/README.google +9 -0
  98. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/console.lua +156 -0
  99. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/lunit/lunit.lua +725 -0
  100. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/BUILD +19 -0
  101. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/LICENSE +21 -0
  102. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/naive.c +92 -0
  103. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/range2-neon.c +157 -0
  104. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/range2-sse.c +170 -0
  105. data/ext/ruby_memprofiler_pprof/vendor/upb/third_party/utf8_range/utf8_range.h +9 -0
  106. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/BUILD.bazel +129 -0
  107. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/README.md +8 -0
  108. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/def.c +939 -0
  109. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/lua_proto_library.bzl +138 -0
  110. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/main.c +83 -0
  111. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/msg.c +1118 -0
  112. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/test.proto +69 -0
  113. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/test_upb.lua +846 -0
  114. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.c +258 -0
  115. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.h +132 -0
  116. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upb.lua +58 -0
  117. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/bindings/lua/upbc.cc +134 -0
  118. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/collections.c +192 -0
  119. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/collections.h +174 -0
  120. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/conformance_upb.c +346 -0
  121. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/conformance_upb_failures.txt +1 -0
  122. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode.c +1221 -0
  123. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode.h +94 -0
  124. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_fast.c +1055 -0
  125. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_fast.h +153 -0
  126. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/decode_internal.h +211 -0
  127. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.c +3262 -0
  128. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.h +414 -0
  129. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/def.hpp +438 -0
  130. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/empty.proto +1 -0
  131. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/encode.c +604 -0
  132. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/encode.h +71 -0
  133. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/fuzz/BUILD +13 -0
  134. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/fuzz/file_descriptor_parsenew_fuzzer.cc +43 -0
  135. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_decode.c +1509 -0
  136. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_decode.h +47 -0
  137. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_encode.c +776 -0
  138. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/json_encode.h +62 -0
  139. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.c +1147 -0
  140. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.h +189 -0
  141. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table.hpp +112 -0
  142. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors.c +363 -0
  143. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors.h +263 -0
  144. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors_internal.h +59 -0
  145. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_accessors_test.cc +425 -0
  146. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/mini_table_test.cc +230 -0
  147. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg.c +428 -0
  148. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg.h +114 -0
  149. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_internal.h +836 -0
  150. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_test.cc +491 -0
  151. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/msg_test.proto +195 -0
  152. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/port_def.inc +261 -0
  153. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/port_undef.inc +62 -0
  154. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.c +323 -0
  155. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.h +109 -0
  156. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/reflection.hpp +37 -0
  157. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/table.c +926 -0
  158. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/table_internal.h +385 -0
  159. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test.proto +74 -0
  160. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_cpp.cc +186 -0
  161. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_cpp.proto +12 -0
  162. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_generated_code.cc +977 -0
  163. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/test_table.cc +580 -0
  164. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/text_encode.c +472 -0
  165. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/text_encode.h +64 -0
  166. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.c +362 -0
  167. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.h +378 -0
  168. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb.hpp +115 -0
  169. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/upb_internal.h +68 -0
  170. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/BUILD +121 -0
  171. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/README.md +7 -0
  172. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare.c +300 -0
  173. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare.h +66 -0
  174. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/compare_test.cc +236 -0
  175. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto.c +572 -0
  176. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto.h +62 -0
  177. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_public_import_test.proto +32 -0
  178. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_regular_import_test.proto +36 -0
  179. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_test.cc +143 -0
  180. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_test.proto +119 -0
  181. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_weak_import_test.proto +28 -0
  182. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/def_to_proto_wweak_import_test.proto +28 -0
  183. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields.c +311 -0
  184. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields.h +94 -0
  185. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields_test.cc +202 -0
  186. data/ext/ruby_memprofiler_pprof/vendor/upb/upb/util/required_fields_test.proto +48 -0
  187. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/BUILD +78 -0
  188. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/common.cc +77 -0
  189. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/common.h +112 -0
  190. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/protoc-gen-upb.cc +1997 -0
  191. data/ext/ruby_memprofiler_pprof/vendor/upb/upbc/protoc-gen-upbdefs.cc +193 -0
  192. data/lib/ruby_memprofiler_pprof/atfork.rb +77 -0
  193. data/lib/ruby_memprofiler_pprof/block_flusher.rb +61 -0
  194. data/lib/ruby_memprofiler_pprof/file_flusher.rb +45 -0
  195. data/lib/ruby_memprofiler_pprof/profile_app.rb +30 -0
  196. data/lib/ruby_memprofiler_pprof/profile_data.rb +18 -0
  197. data/lib/ruby_memprofiler_pprof/version.rb +5 -0
  198. data/lib/ruby_memprofiler_pprof.rb +8 -0
  199. data/libexec/ruby_memprofiler_pprof_profile +16 -0
  200. metadata +257 -0
@@ -0,0 +1,182 @@
1
+ #include <errno.h>
2
+ #include <ruby.h>
3
+ #include <pthread.h>
4
+ #include <stdarg.h>
5
+ #include <stdlib.h>
6
+
7
+ #include "ruby_memprofiler_pprof.h"
8
+
9
+
10
+ #if defined(HAVE_ARC4RANDOM)
11
+ uint32_t mpp_rand() {
12
+ return arc4random();
13
+ }
14
+ void mpp_rand_init() {
15
+
16
+ }
17
+ #elif defined(HAVE_MRAND48_R) && defined(HAVE_GETENTROPY)
18
+ // Why? Why does glibc make it so darn difficult to just get random numbers in a way
19
+ // that isn't racy across different threads and doesn't depend on global state?
20
+ #include <sys/random.h>
21
+
22
+ static pthread_mutex_t mpp_rand_lock;
23
+ static struct drand48_data mpp_rand_buffer;
24
+
25
+ uint32_t mpp_rand() {
26
+ pthread_mutex_lock(&mpp_rand_lock);
27
+ long int result;
28
+ int ret = mrand48_r(&mpp_rand_buffer, &result);
29
+ if (ret < 0) {
30
+ rb_bug("mrand48_r returned -1?");
31
+ }
32
+ pthread_mutex_unlock(&mpp_rand_lock);
33
+ return (uint32_t)result;
34
+ }
35
+
36
+ void mpp_rand_init() {
37
+ pthread_mutex_init(&mpp_rand_lock, NULL);
38
+ memset(&mpp_rand_buffer, 0, sizeof(struct drand48_data));
39
+ unsigned short int seedbuf[3];
40
+ int ret;
41
+ ret = getentropy(seedbuf, sizeof(seedbuf));
42
+ if (ret == -1) {
43
+ rb_bug("getentropy returned -1?");
44
+ }
45
+ ret = seed48_r(seedbuf, &mpp_rand_buffer);
46
+ if (ret < 0) {
47
+ rb_bug("seed48_r returned -1?");
48
+ }
49
+ }
50
+ #else
51
+ #error "No suitable RNG implementation"
52
+ #endif
53
+
54
+ void *mpp_xcalloc(size_t sz) {
55
+ void *mem = mpp_xmalloc(sz);
56
+ memset(mem, 0, sz);
57
+ return mem;
58
+ }
59
+
60
+ void *mpp_xmalloc(size_t sz) {
61
+ void *mem = malloc(sz);
62
+ if (!mem) {
63
+ MPP_ASSERT_FAIL("failed to allocate memory in ruby_memprofiler_pprof gem");
64
+ }
65
+ return mem;
66
+ }
67
+
68
+ void mpp_free(void *mem) {
69
+ free(mem);
70
+ }
71
+
72
+ void *mpp_realloc(void *mem, size_t newsz) {
73
+ void *newmem = realloc(mem, newsz);
74
+ if (!newmem) {
75
+ MPP_ASSERT_FAIL("failed to allocate memory in ruby_memprofiler_pprof gem");
76
+ }
77
+ return newmem;
78
+ }
79
+
80
+ void mpp_pthread_mutex_lock(pthread_mutex_t *m) {
81
+ if (pthread_mutex_lock(m) != 0) {
82
+ MPP_ASSERT_FAIL("failed to lock mutex in ruby_memprofiler_pprof gem");
83
+ }
84
+ }
85
+
86
+ void mpp_pthread_mutex_unlock(pthread_mutex_t *m) {
87
+ if (pthread_mutex_unlock(m) != 0) {
88
+ MPP_ASSERT_FAIL("failed to unlock mutex in ruby_memprofiler_pprof gem");
89
+ }
90
+ }
91
+
92
+ int mpp_pthread_mutex_trylock(pthread_mutex_t *m) {
93
+ int r = pthread_mutex_trylock(m);
94
+ if (r != 0 && r != EBUSY) {
95
+ MPP_ASSERT_FAIL("failed to trylock mutex in ruby_memprofiler_pprof gem");
96
+ }
97
+ return r;
98
+ }
99
+
100
+ void mpp_pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *attr) {
101
+ if (pthread_mutex_init(m, attr) != 0) {
102
+ MPP_ASSERT_FAIL("failed to init mutex in ruby_memprofiler_pprof gem");
103
+ }
104
+ }
105
+
106
+ void mpp_pthread_mutex_destroy(pthread_mutex_t *m) {
107
+ if (pthread_mutex_destroy(m) != 0) {
108
+ MPP_ASSERT_FAIL("failed to destroy mutex in ruby_memprofiler_pprof gem");
109
+ }
110
+ }
111
+
112
+ void mpp_pthread_mutexattr_init(pthread_mutexattr_t *a) {
113
+ if (pthread_mutexattr_init(a) != 0) {
114
+ MPP_ASSERT_FAIL("failed to init pthread_mutexattr in ruby_memprofiler_pprof gem");
115
+ }
116
+ }
117
+
118
+ void mpp_pthread_mutexattr_destroy(pthread_mutexattr_t *a) {
119
+ if (pthread_mutexattr_destroy(a) != 0) {
120
+ MPP_ASSERT_FAIL("failed to destroy pthread_mutexattr in ruby_memprofiler_pprof gem");
121
+ }
122
+ }
123
+
124
+ void mpp_pthread_mutexattr_settype(pthread_mutexattr_t *a, int type) {
125
+ if (pthread_mutexattr_settype(a, type) != 0) {
126
+ MPP_ASSERT_FAIL("failed to set type on pthread_mutexattr in ruby_memprofiler_pprof gem");
127
+ }
128
+ }
129
+
130
+ void mpp_pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) {
131
+ if (pthread_atfork(prepare, parent, child) != 0) {
132
+ MPP_ASSERT_FAIL("pthread_atfork failed in ruby_memprofiler_pprof gem");
133
+ }
134
+ }
135
+
136
+ __attribute__ ((noreturn))
137
+ void mpp_assert_fail(
138
+ const char *msg, const char *assertion, const char *file, const char *line, const char *fn
139
+ ) {
140
+ char final_msg_buf[1024];
141
+ int32_t final_msg_ix = 0;
142
+ int32_t final_msg_remaining = sizeof(final_msg_buf) - 2; // -1 for null terminator, -1 for trailing newline.
143
+
144
+ #define FINAL_MSG_BUF_APPEND(str) \
145
+ do { \
146
+ int32_t seg_len = (int32_t)strlen(str); \
147
+ int32_t copy_n = (seg_len > final_msg_remaining) ? final_msg_remaining : seg_len; \
148
+ memcpy(final_msg_buf + final_msg_ix, str, copy_n); \
149
+ final_msg_ix += seg_len; \
150
+ final_msg_remaining -= seg_len; \
151
+ } while (0)
152
+
153
+ FINAL_MSG_BUF_APPEND("assertion failure in ruby_memprofiler_pprof gem: ");
154
+ FINAL_MSG_BUF_APPEND(msg);
155
+ FINAL_MSG_BUF_APPEND(" (");
156
+ FINAL_MSG_BUF_APPEND(assertion);
157
+ FINAL_MSG_BUF_APPEND("; at ");
158
+ FINAL_MSG_BUF_APPEND(file);
159
+ FINAL_MSG_BUF_APPEND(":");
160
+ FINAL_MSG_BUF_APPEND(line);
161
+ FINAL_MSG_BUF_APPEND(" ");
162
+ FINAL_MSG_BUF_APPEND(fn);
163
+ FINAL_MSG_BUF_APPEND(")");
164
+
165
+ // We're guaranteed to have left enough space for this because we started final_msg_remaining off
166
+ // with sizeof(buf) - 2.
167
+ final_msg_remaining += 2;
168
+ FINAL_MSG_BUF_APPEND("\n\0");
169
+
170
+ __attribute__((unused)) size_t r =
171
+ write(STDERR_FILENO, final_msg_buf, final_msg_ix + 1);
172
+ abort();
173
+ }
174
+
175
+ void mpp_log_debug(const char *pattern, ...) {
176
+ va_list args;
177
+ va_start(args, pattern);
178
+ fprintf(stderr, "ruby_memprofiler_pprof gem: ");
179
+ vfprintf(stderr, pattern, args);
180
+ fprintf(stderr, "\n");
181
+ va_end(args);
182
+ }
@@ -0,0 +1,72 @@
1
+ require "mkmf"
2
+
3
+ # Support GC.compact on Ruby >=- 2.7
4
+ have_func("rb_gc_mark_movable", ["ruby.h"])
5
+ # Handle Ractors
6
+ have_func("rb_ext_ractor_safe", ["ruby.h"])
7
+
8
+ # Find a random number generator API that doesn't have global state.
9
+ has_arc4random = have_func("arc4random", ["stdlib.h"])
10
+ has_mrand48_r = have_func("mrand48_r", ["stdlib.h"])
11
+ has_getentropy = have_func("getentropy", ["sys/random.h"])
12
+ if !has_arc4random && !(has_mrand48_r && has_getentropy)
13
+ abort "Need either arc4random (BSD) or mrand48_r/getentropy (GNU)"
14
+ end
15
+
16
+ # Need zlib
17
+ has_zlib_headers = have_header("zlib.h")
18
+ has_zlib_lib = have_library("z")
19
+ raise "Zlib headers & library are required!" unless has_zlib_headers && has_zlib_lib
20
+
21
+ # Peek into internal Ruby headers
22
+ require 'debase/ruby_core_source'
23
+ internal_headers = proc {
24
+ have_header("vm_core.h") and
25
+ have_header("iseq.h", ["vm_core.h"]) and
26
+ have_header("version.h")
27
+ }
28
+
29
+ # Need to actually link pthreads properly
30
+ have_library("pthread") or raise "missing pthread library"
31
+
32
+ # Set our cflags up _only after_ we have run all the existence checks above; otherwise
33
+ # stuff like -Werror can break the test programs.
34
+ append_cflags([
35
+ '-g', # Compile with debug info
36
+ '-D_GNU_SOURCE', '-std=gnu11', # Use GNU C extensions (e.g. we use this for atomics)
37
+ '-fvisibility=hidden', # Make sure our upb symbols don't clobber any others from other exts
38
+ ])
39
+ append_cflags(['-Wall', '-Wextra']) # Enable all the warnings
40
+ # These diagnostics are not very interesting at all, just disable them.
41
+ append_cflags([
42
+ '-Wno-unused-parameter',
43
+ '-Wno-declaration-after-statement',
44
+ '-Wno-suggest-attribute=noreturn',
45
+ ])
46
+
47
+ # Compile the upb objects into our extension as well.
48
+ $srcs = Dir.glob(File.join($srcdir, "*.c"))
49
+ $srcs += [
50
+ "upb/decode.c",
51
+ "upb/encode.c",
52
+ "upb/msg.c",
53
+ "upb/table.c",
54
+ "upb/upb.c",
55
+ "third_party/utf8_range/naive.c",
56
+ "third_party/utf8_range/range2-neon.c",
57
+ "third_party/utf8_range/range2-sse.c",
58
+ ].map { |f| File.join($srcdir, "vendor/upb", f) }
59
+ $VPATH << "$(srcdir)/vendor/upb/upb"
60
+ $VPATH << "$(srcdir)/vendor/upb/third_party/utf8_range"
61
+ $INCFLAGS << " -I#{File.join($srcdir, "vendor/upb")}"
62
+
63
+ dir_config('ruby')
64
+ extname = "ruby_memprofiler_pprof/ruby_memprofiler_pprof_ext"
65
+ unless Debase::RubyCoreSource.create_makefile_with_core(internal_headers, extname)
66
+ STDERR.print("Makefile creation failed\n")
67
+ STDERR.print("*************************************************************\n\n")
68
+ STDERR.print(" NOTE: If your headers were not found, try passing\n")
69
+ STDERR.print(" --with-ruby-include=PATH_TO_HEADERS \n\n")
70
+ STDERR.print("*************************************************************\n\n")
71
+ exit(1)
72
+ end
@@ -0,0 +1,170 @@
1
+ /* This file was generated by upbc (the upb compiler) from the input
2
+ * file:
3
+ *
4
+ * pprof.proto
5
+ *
6
+ * Do not edit -- your changes will be discarded when the file is
7
+ * regenerated. */
8
+
9
+ #include <stddef.h>
10
+ #include "upb/msg_internal.h"
11
+ #include "pprof.upb.h"
12
+
13
+ #include "upb/port_def.inc"
14
+
15
+ static const upb_MiniTable_Sub perftools_profiles_Profile_submsgs[6] = {
16
+ {.submsg = &perftools_profiles_ValueType_msginit},
17
+ {.submsg = &perftools_profiles_Sample_msginit},
18
+ {.submsg = &perftools_profiles_Mapping_msginit},
19
+ {.submsg = &perftools_profiles_Location_msginit},
20
+ {.submsg = &perftools_profiles_Function_msginit},
21
+ {.submsg = &perftools_profiles_ValueType_msginit},
22
+ };
23
+
24
+ static const upb_MiniTable_Field perftools_profiles_Profile__fields[14] = {
25
+ {1, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
26
+ {2, UPB_SIZE(8, 16), UPB_SIZE(0, 0), 1, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
27
+ {3, UPB_SIZE(12, 24), UPB_SIZE(0, 0), 2, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
28
+ {4, UPB_SIZE(16, 32), UPB_SIZE(0, 0), 3, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
29
+ {5, UPB_SIZE(20, 40), UPB_SIZE(0, 0), 4, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
30
+ {6, UPB_SIZE(24, 48), UPB_SIZE(0, 0), kUpb_NoSub, 9, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
31
+ {7, UPB_SIZE(40, 72), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
32
+ {8, UPB_SIZE(48, 80), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
33
+ {9, UPB_SIZE(56, 88), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
34
+ {10, UPB_SIZE(64, 96), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
35
+ {11, UPB_SIZE(28, 56), UPB_SIZE(1, 1), 5, 11, kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
36
+ {12, UPB_SIZE(72, 104), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
37
+ {13, UPB_SIZE(32, 64), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
38
+ {14, UPB_SIZE(80, 112), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
39
+ };
40
+
41
+ const upb_MiniTable perftools_profiles_Profile_msginit = {
42
+ &perftools_profiles_Profile_submsgs[0],
43
+ &perftools_profiles_Profile__fields[0],
44
+ UPB_SIZE(88, 120), 14, kUpb_ExtMode_NonExtendable, 14, 255, 0,
45
+ };
46
+
47
+ static const upb_MiniTable_Field perftools_profiles_ValueType__fields[2] = {
48
+ {1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
49
+ {2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
50
+ };
51
+
52
+ const upb_MiniTable perftools_profiles_ValueType_msginit = {
53
+ NULL,
54
+ &perftools_profiles_ValueType__fields[0],
55
+ UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0,
56
+ };
57
+
58
+ static const upb_MiniTable_Sub perftools_profiles_Sample_submsgs[1] = {
59
+ {.submsg = &perftools_profiles_Label_msginit},
60
+ };
61
+
62
+ static const upb_MiniTable_Field perftools_profiles_Sample__fields[3] = {
63
+ {1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
64
+ {2, UPB_SIZE(4, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
65
+ {3, UPB_SIZE(8, 16), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
66
+ };
67
+
68
+ const upb_MiniTable perftools_profiles_Sample_msginit = {
69
+ &perftools_profiles_Sample_submsgs[0],
70
+ &perftools_profiles_Sample__fields[0],
71
+ UPB_SIZE(12, 24), 3, kUpb_ExtMode_NonExtendable, 3, 255, 0,
72
+ };
73
+
74
+ static const upb_MiniTable_Field perftools_profiles_Label__fields[4] = {
75
+ {1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
76
+ {2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
77
+ {3, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
78
+ {4, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
79
+ };
80
+
81
+ const upb_MiniTable perftools_profiles_Label_msginit = {
82
+ NULL,
83
+ &perftools_profiles_Label__fields[0],
84
+ UPB_SIZE(32, 40), 4, kUpb_ExtMode_NonExtendable, 4, 255, 0,
85
+ };
86
+
87
+ static const upb_MiniTable_Field perftools_profiles_Mapping__fields[10] = {
88
+ {1, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
89
+ {2, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
90
+ {3, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
91
+ {4, UPB_SIZE(32, 32), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
92
+ {5, UPB_SIZE(40, 40), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
93
+ {6, UPB_SIZE(48, 48), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
94
+ {7, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
95
+ {8, UPB_SIZE(1, 1), UPB_SIZE(0, 0), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
96
+ {9, UPB_SIZE(2, 2), UPB_SIZE(0, 0), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
97
+ {10, UPB_SIZE(3, 3), UPB_SIZE(0, 0), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
98
+ };
99
+
100
+ const upb_MiniTable perftools_profiles_Mapping_msginit = {
101
+ NULL,
102
+ &perftools_profiles_Mapping__fields[0],
103
+ UPB_SIZE(56, 56), 10, kUpb_ExtMode_NonExtendable, 10, 255, 0,
104
+ };
105
+
106
+ static const upb_MiniTable_Sub perftools_profiles_Location_submsgs[1] = {
107
+ {.submsg = &perftools_profiles_Line_msginit},
108
+ };
109
+
110
+ static const upb_MiniTable_Field perftools_profiles_Location__fields[5] = {
111
+ {1, UPB_SIZE(8, 16), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
112
+ {2, UPB_SIZE(16, 24), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
113
+ {3, UPB_SIZE(24, 32), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
114
+ {4, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
115
+ {5, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 8, kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
116
+ };
117
+
118
+ const upb_MiniTable perftools_profiles_Location_msginit = {
119
+ &perftools_profiles_Location_submsgs[0],
120
+ &perftools_profiles_Location__fields[0],
121
+ UPB_SIZE(32, 40), 5, kUpb_ExtMode_NonExtendable, 5, 255, 0,
122
+ };
123
+
124
+ static const upb_MiniTable_Field perftools_profiles_Line__fields[2] = {
125
+ {1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
126
+ {2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
127
+ };
128
+
129
+ const upb_MiniTable perftools_profiles_Line_msginit = {
130
+ NULL,
131
+ &perftools_profiles_Line__fields[0],
132
+ UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0,
133
+ };
134
+
135
+ static const upb_MiniTable_Field perftools_profiles_Function__fields[5] = {
136
+ {1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
137
+ {2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
138
+ {3, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
139
+ {4, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
140
+ {5, UPB_SIZE(32, 32), UPB_SIZE(0, 0), kUpb_NoSub, 3, kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
141
+ };
142
+
143
+ const upb_MiniTable perftools_profiles_Function_msginit = {
144
+ NULL,
145
+ &perftools_profiles_Function__fields[0],
146
+ UPB_SIZE(40, 40), 5, kUpb_ExtMode_NonExtendable, 5, 255, 0,
147
+ };
148
+
149
+ static const upb_MiniTable *messages_layout[8] = {
150
+ &perftools_profiles_Profile_msginit,
151
+ &perftools_profiles_ValueType_msginit,
152
+ &perftools_profiles_Sample_msginit,
153
+ &perftools_profiles_Label_msginit,
154
+ &perftools_profiles_Mapping_msginit,
155
+ &perftools_profiles_Location_msginit,
156
+ &perftools_profiles_Line_msginit,
157
+ &perftools_profiles_Function_msginit,
158
+ };
159
+
160
+ const upb_MiniTable_File pprof_proto_upb_file_layout = {
161
+ messages_layout,
162
+ NULL,
163
+ NULL,
164
+ 8,
165
+ 0,
166
+ 0,
167
+ };
168
+
169
+ #include "upb/port_undef.inc"
170
+