ruby_memprofiler_pprof 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+