ruby_memprofiler_pprof 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/ext/ruby_memprofiler_pprof_ext/collector.c +803 -0
  3. data/ext/ruby_memprofiler_pprof_ext/compat.c +184 -0
  4. data/ext/ruby_memprofiler_pprof_ext/compile_commands.json +1 -0
  5. data/ext/ruby_memprofiler_pprof_ext/extconf.rb +152 -0
  6. data/ext/ruby_memprofiler_pprof_ext/pprof.upb.c +199 -0
  7. data/ext/ruby_memprofiler_pprof_ext/pprof.upb.h +924 -0
  8. data/ext/ruby_memprofiler_pprof_ext/pprof_out.c +430 -0
  9. data/ext/ruby_memprofiler_pprof_ext/ruby_hacks.c +118 -0
  10. data/ext/ruby_memprofiler_pprof_ext/ruby_memprofiler_pprof.c +10 -0
  11. data/ext/ruby_memprofiler_pprof_ext/ruby_memprofiler_pprof.h +183 -0
  12. data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby26/gc_private.h +324 -0
  13. data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby27/gc_private.h +339 -0
  14. data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby30/gc_private.h +361 -0
  15. data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby31/gc_private.h +374 -0
  16. data/ext/ruby_memprofiler_pprof_ext/ruby_private.h +31 -0
  17. data/ext/ruby_memprofiler_pprof_ext/sample.c +43 -0
  18. data/ext/ruby_memprofiler_pprof_ext/vendor/backtracie/backtracie.h +268 -0
  19. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/BUILD +0 -0
  20. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/CONTRIBUTING.md +0 -0
  21. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/DESIGN.md +0 -0
  22. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/LICENSE +0 -0
  23. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/README.md +0 -0
  24. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/WORKSPACE +0 -0
  25. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/BUILD +0 -0
  26. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/amalgamate.py +0 -0
  27. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/build_defs.bzl +0 -0
  28. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/lua.BUILD +0 -0
  29. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/protobuf.patch +0 -0
  30. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/py_proto_library.bzl +0 -0
  31. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/python_downloads.bzl +0 -0
  32. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/system_python.bzl +0 -0
  33. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/upb_proto_library.bzl +0 -0
  34. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/workspace_deps.bzl +0 -0
  35. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/BUILD +0 -0
  36. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/BUILD.googleapis +0 -0
  37. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/benchmark.cc +0 -0
  38. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/build_defs.bzl +0 -0
  39. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/compare.py +0 -0
  40. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/descriptor.proto +0 -0
  41. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/descriptor_sv.proto +0 -0
  42. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/empty.proto +0 -0
  43. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_protobuf_binary_cc.py +0 -0
  44. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_synthetic_protos.py +0 -0
  45. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_upb_binary_c.py +0 -0
  46. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/BUILD.bazel +0 -0
  47. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/README.md +0 -0
  48. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/build_defs.bzl +0 -0
  49. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/make_cmakelists.py +0 -0
  50. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/staleness_test.py +0 -0
  51. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/staleness_test_lib.py +0 -0
  52. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/render.py +0 -0
  53. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/style-guide.md +0 -0
  54. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/vs-cpp-protos.md +0 -0
  55. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/wrapping-upb.md +0 -0
  56. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/BUILD +0 -0
  57. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/convert.c +0 -0
  58. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/convert.h +0 -0
  59. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor.c +0 -0
  60. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor.h +0 -0
  61. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_containers.c +0 -0
  62. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_containers.h +0 -0
  63. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_pool.c +0 -0
  64. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_pool.h +0 -0
  65. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/dist/BUILD.bazel +0 -0
  66. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/dist/dist.bzl +0 -0
  67. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/extension_dict.c +0 -0
  68. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/extension_dict.h +0 -0
  69. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/map.c +0 -0
  70. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/map.h +0 -0
  71. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/message.c +0 -0
  72. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/message.h +0 -0
  73. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/minimal_test.py +0 -0
  74. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/BUILD +0 -0
  75. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/README.md +0 -0
  76. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_database_test_wrapper.py +0 -0
  77. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_pool_test_wrapper.py +0 -0
  78. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_test_wrapper.py +0 -0
  79. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/generator_test_wrapper.py +0 -0
  80. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/json_format_test_wrapper.py +0 -0
  81. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/keywords_test_wrapper.py +0 -0
  82. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/message_factory_test_wrapper.py +0 -0
  83. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/message_test_wrapper.py +0 -0
  84. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/proto_builder_test_wrapper.py +0 -0
  85. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/pyproto_test_wrapper.bzl +0 -0
  86. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/reflection_test_wrapper.py +0 -0
  87. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/service_reflection_test_wrapper.py +0 -0
  88. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/symbol_database_test_wrapper.py +0 -0
  89. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/text_encoding_test_wrapper.py +0 -0
  90. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/text_format_test_wrapper.py +0 -0
  91. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/unknown_fields_test_wrapper.py +0 -0
  92. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/well_known_types_test_wrapper.py +0 -0
  93. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/wire_format_test_wrapper.py +0 -0
  94. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/protobuf.c +0 -0
  95. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/protobuf.h +0 -0
  96. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/py_extension.bzl +0 -0
  97. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/python_api.h +0 -0
  98. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/repeated.c +0 -0
  99. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/repeated.h +0 -0
  100. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/unknown_fields.c +0 -0
  101. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/unknown_fields.h +0 -0
  102. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/version_script.lds +0 -0
  103. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/LICENSE +0 -0
  104. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/README.google +0 -0
  105. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/console.lua +0 -0
  106. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/lunit.lua +0 -0
  107. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/BUILD +0 -0
  108. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/LICENSE +0 -0
  109. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/naive.c +0 -0
  110. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/range2-neon.c +0 -0
  111. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/range2-sse.c +0 -0
  112. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/utf8_range.h +0 -0
  113. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/BUILD.bazel +0 -0
  114. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/README.md +0 -0
  115. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/def.c +0 -0
  116. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/lua_proto_library.bzl +0 -0
  117. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/main.c +0 -0
  118. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/msg.c +0 -0
  119. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/test.proto +0 -0
  120. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/test_upb.lua +0 -0
  121. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.c +0 -0
  122. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.h +0 -0
  123. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.lua +0 -0
  124. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upbc.cc +0 -0
  125. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/collections.c +0 -0
  126. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/collections.h +0 -0
  127. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/conformance_upb.c +0 -0
  128. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/conformance_upb_failures.txt +0 -0
  129. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode.c +0 -0
  130. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode.h +0 -0
  131. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_fast.c +0 -0
  132. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_fast.h +0 -0
  133. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_internal.h +0 -0
  134. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.c +0 -0
  135. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.h +0 -0
  136. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.hpp +0 -0
  137. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/empty.proto +0 -0
  138. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/encode.c +0 -0
  139. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/encode.h +0 -0
  140. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/fuzz/BUILD +0 -0
  141. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/fuzz/file_descriptor_parsenew_fuzzer.cc +0 -0
  142. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_decode.c +0 -0
  143. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_decode.h +0 -0
  144. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_encode.c +0 -0
  145. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_encode.h +0 -0
  146. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.c +0 -0
  147. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.h +0 -0
  148. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.hpp +0 -0
  149. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors.c +0 -0
  150. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors.h +0 -0
  151. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors_internal.h +0 -0
  152. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors_test.cc +0 -0
  153. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_test.cc +0 -0
  154. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg.c +0 -0
  155. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg.h +0 -0
  156. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_internal.h +0 -0
  157. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_test.cc +0 -0
  158. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_test.proto +0 -0
  159. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/port_def.inc +0 -0
  160. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/port_undef.inc +0 -0
  161. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.c +0 -0
  162. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.h +0 -0
  163. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.hpp +0 -0
  164. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/table.c +0 -0
  165. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/table_internal.h +0 -0
  166. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test.proto +0 -0
  167. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_cpp.cc +0 -0
  168. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_cpp.proto +0 -0
  169. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_generated_code.cc +0 -0
  170. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_table.cc +0 -0
  171. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/text_encode.c +0 -0
  172. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/text_encode.h +0 -0
  173. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.c +0 -0
  174. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.h +0 -0
  175. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.hpp +0 -0
  176. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb_internal.h +0 -0
  177. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/BUILD +0 -0
  178. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/README.md +0 -0
  179. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare.c +0 -0
  180. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare.h +0 -0
  181. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare_test.cc +0 -0
  182. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto.c +0 -0
  183. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto.h +0 -0
  184. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_public_import_test.proto +0 -0
  185. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_regular_import_test.proto +0 -0
  186. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_test.cc +0 -0
  187. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_test.proto +0 -0
  188. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_weak_import_test.proto +0 -0
  189. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_wweak_import_test.proto +0 -0
  190. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields.c +0 -0
  191. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields.h +0 -0
  192. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields_test.cc +0 -0
  193. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields_test.proto +0 -0
  194. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/BUILD +0 -0
  195. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/common.cc +0 -0
  196. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/common.h +0 -0
  197. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/protoc-gen-upb.cc +0 -0
  198. data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/protoc-gen-upbdefs.cc +0 -0
  199. data/lib/ruby_memprofiler_pprof/atfork.rb +1 -1
  200. data/lib/ruby_memprofiler_pprof/block_flusher.rb +48 -4
  201. data/lib/ruby_memprofiler_pprof/file_flusher.rb +13 -6
  202. data/lib/ruby_memprofiler_pprof/profile_app.rb +8 -12
  203. data/lib/ruby_memprofiler_pprof/profile_data.rb +7 -8
  204. data/lib/ruby_memprofiler_pprof/version.rb +1 -1
  205. data/lib/ruby_memprofiler_pprof.rb +5 -4
  206. data/libexec/ruby_memprofiler_pprof_profile +6 -6
  207. metadata +207 -200
  208. data/ext/ruby_memprofiler_pprof/backtrace.c +0 -429
  209. data/ext/ruby_memprofiler_pprof/collector.c +0 -1055
  210. data/ext/ruby_memprofiler_pprof/compat.c +0 -182
  211. data/ext/ruby_memprofiler_pprof/extconf.rb +0 -72
  212. data/ext/ruby_memprofiler_pprof/pprof.upb.c +0 -170
  213. data/ext/ruby_memprofiler_pprof/pprof.upb.h +0 -848
  214. data/ext/ruby_memprofiler_pprof/pprof_out.c +0 -285
  215. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.c +0 -11
  216. data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.h +0 -301
  217. data/ext/ruby_memprofiler_pprof/strtab.c +0 -391
@@ -0,0 +1,339 @@
1
+ #ifndef GC_PRIVATE_H
2
+ #define GC_PRIVATE_H
3
+
4
+ typedef struct RVALUE {
5
+ union {
6
+ struct {
7
+ VALUE flags; /* always 0 for freed obj */
8
+ struct RVALUE *next;
9
+ } free;
10
+ struct RMoved moved;
11
+ struct RBasic basic;
12
+ struct RObject object;
13
+ struct RClass klass;
14
+ struct RFloat flonum;
15
+ struct RString string;
16
+ struct RArray array;
17
+ struct RRegexp regexp;
18
+ struct RHash hash;
19
+ struct RData data;
20
+ struct RTypedData typeddata;
21
+ struct RStruct rstruct;
22
+ struct RBignum bignum;
23
+ struct RFile file;
24
+ struct RMatch match;
25
+ struct RRational rational;
26
+ struct RComplex complex;
27
+ union {
28
+ rb_cref_t cref;
29
+ struct vm_svar svar;
30
+ struct vm_throw_data throw_data;
31
+ struct vm_ifunc ifunc;
32
+ struct MEMO memo;
33
+ struct rb_method_entry_struct ment;
34
+ const rb_iseq_t iseq;
35
+ rb_env_t env;
36
+ struct rb_imemo_tmpbuf_struct alloc;
37
+ rb_ast_t ast;
38
+ } imemo;
39
+ struct {
40
+ struct RBasic basic;
41
+ VALUE v1;
42
+ VALUE v2;
43
+ VALUE v3;
44
+ } values;
45
+ } as;
46
+ #if GC_DEBUG
47
+ const char *file;
48
+ int line;
49
+ #endif
50
+ } RVALUE;
51
+
52
+ #define RANY(o) ((RVALUE*)(o))
53
+ #define STACK_CHUNK_SIZE 500
54
+
55
+ typedef struct stack_chunk {
56
+ VALUE data[STACK_CHUNK_SIZE];
57
+ struct stack_chunk *next;
58
+ } stack_chunk_t;
59
+
60
+ typedef struct mark_stack {
61
+ stack_chunk_t *chunk;
62
+ stack_chunk_t *cache;
63
+ int index;
64
+ int limit;
65
+ size_t cache_size;
66
+ size_t unused_cache_size;
67
+ } mark_stack_t;
68
+
69
+ typedef uintptr_t bits_t;
70
+ enum {
71
+ BITS_SIZE = sizeof(bits_t),
72
+ BITS_BITLENGTH = ( BITS_SIZE * CHAR_BIT )
73
+ };
74
+
75
+ struct heap_page_header {
76
+ struct heap_page *page;
77
+ };
78
+
79
+ struct heap_page_body {
80
+ struct heap_page_header header;
81
+ /* char gap[]; */
82
+ /* RVALUE values[]; */
83
+ };
84
+
85
+ #define HEAP_PAGE_ALIGN_LOG 14
86
+ #define CEILDIV(i, mod) (((i) + (mod) - 1)/(mod))
87
+ enum {
88
+ HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG),
89
+ HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)),
90
+ REQUIRED_SIZE_BY_MALLOC = (sizeof(size_t) * 5),
91
+ HEAP_PAGE_SIZE = (HEAP_PAGE_ALIGN - REQUIRED_SIZE_BY_MALLOC),
92
+ HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)),
93
+ HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH),
94
+ HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT),
95
+ HEAP_PAGE_BITMAP_PLANES = USE_RGENGC ? 4 : 1 /* RGENGC: mark, unprotected, uncollectible, marking */
96
+ };
97
+
98
+ struct heap_page {
99
+ short total_slots;
100
+ short free_slots;
101
+ short pinned_slots;
102
+ short final_slots;
103
+ struct {
104
+ unsigned int before_sweep : 1;
105
+ unsigned int has_remembered_objects : 1;
106
+ unsigned int has_uncollectible_shady_objects : 1;
107
+ unsigned int in_tomb : 1;
108
+ } flags;
109
+
110
+ struct heap_page *free_next;
111
+ RVALUE *start;
112
+ RVALUE *freelist;
113
+ struct list_node page_node;
114
+
115
+ #if USE_RGENGC
116
+ bits_t wb_unprotected_bits[HEAP_PAGE_BITMAP_LIMIT];
117
+ #endif
118
+ /* the following three bitmaps are cleared at the beginning of full GC */
119
+ bits_t mark_bits[HEAP_PAGE_BITMAP_LIMIT];
120
+ #if USE_RGENGC
121
+ bits_t uncollectible_bits[HEAP_PAGE_BITMAP_LIMIT];
122
+ bits_t marking_bits[HEAP_PAGE_BITMAP_LIMIT];
123
+ #endif
124
+
125
+ /* If set, the object is not movable */
126
+ bits_t pinned_bits[HEAP_PAGE_BITMAP_LIMIT];
127
+ };
128
+
129
+
130
+ typedef struct rb_heap_struct {
131
+ RVALUE *freelist;
132
+
133
+ struct heap_page *free_pages;
134
+ struct heap_page *using_page;
135
+ struct list_head pages;
136
+ struct heap_page *sweeping_page; /* iterator for .pages */
137
+ #if GC_ENABLE_INCREMENTAL_MARK
138
+ struct heap_page *pooled_pages;
139
+ #endif
140
+ size_t total_pages; /* total page count in a heap */
141
+ size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */
142
+ } rb_heap_t;
143
+
144
+ typedef struct gc_profile_record {
145
+ int flags;
146
+
147
+ double gc_time;
148
+ double gc_invoke_time;
149
+
150
+ size_t heap_total_objects;
151
+ size_t heap_use_size;
152
+ size_t heap_total_size;
153
+
154
+ #if GC_PROFILE_MORE_DETAIL
155
+ double gc_mark_time;
156
+ double gc_sweep_time;
157
+
158
+ size_t heap_use_pages;
159
+ size_t heap_live_objects;
160
+ size_t heap_free_objects;
161
+
162
+ size_t allocate_increase;
163
+ size_t allocate_limit;
164
+
165
+ double prepare_time;
166
+ size_t removing_objects;
167
+ size_t empty_objects;
168
+ #if GC_PROFILE_DETAIL_MEMORY
169
+ long maxrss;
170
+ long minflt;
171
+ long majflt;
172
+ #endif
173
+ #endif
174
+ #if MALLOC_ALLOCATED_SIZE
175
+ size_t allocated_size;
176
+ #endif
177
+
178
+ #if RGENGC_PROFILE > 0
179
+ size_t old_objects;
180
+ size_t remembered_normal_objects;
181
+ size_t remembered_shady_objects;
182
+ #endif
183
+ } gc_profile_record;
184
+
185
+ typedef struct rb_objspace {
186
+ struct {
187
+ size_t limit;
188
+ size_t increase;
189
+ #if MALLOC_ALLOCATED_SIZE
190
+ size_t allocated_size;
191
+ size_t allocations;
192
+ #endif
193
+ } malloc_params;
194
+
195
+ struct {
196
+ unsigned int mode : 2;
197
+ unsigned int immediate_sweep : 1;
198
+ unsigned int dont_gc : 1;
199
+ unsigned int dont_incremental : 1;
200
+ unsigned int during_gc : 1;
201
+ unsigned int during_compacting : 1;
202
+ unsigned int gc_stressful: 1;
203
+ unsigned int has_hook: 1;
204
+ #if USE_RGENGC
205
+ unsigned int during_minor_gc : 1;
206
+ #endif
207
+ #if GC_ENABLE_INCREMENTAL_MARK
208
+ unsigned int during_incremental_marking : 1;
209
+ #endif
210
+ } flags;
211
+
212
+ rb_event_flag_t hook_events;
213
+ size_t total_allocated_objects;
214
+ VALUE next_object_id;
215
+
216
+ rb_heap_t eden_heap;
217
+ rb_heap_t tomb_heap; /* heap for zombies and ghosts */
218
+
219
+ struct {
220
+ rb_atomic_t finalizing;
221
+ } atomic_flags;
222
+
223
+ struct mark_func_data_struct {
224
+ void *data;
225
+ void (*mark_func)(VALUE v, void *data);
226
+ } *mark_func_data;
227
+
228
+ mark_stack_t mark_stack;
229
+ size_t marked_slots;
230
+
231
+ struct {
232
+ struct heap_page **sorted;
233
+ size_t allocated_pages;
234
+ size_t allocatable_pages;
235
+ size_t sorted_length;
236
+ RVALUE *range[2];
237
+ size_t freeable_pages;
238
+
239
+ /* final */
240
+ size_t final_slots;
241
+ VALUE deferred_final;
242
+ } heap_pages;
243
+
244
+ st_table *finalizer_table;
245
+
246
+ struct {
247
+ int run;
248
+ int latest_gc_info;
249
+ gc_profile_record *records;
250
+ gc_profile_record *current_record;
251
+ size_t next_index;
252
+ size_t size;
253
+
254
+ #if GC_PROFILE_MORE_DETAIL
255
+ double prepare_time;
256
+ #endif
257
+ double invoke_time;
258
+
259
+ #if USE_RGENGC
260
+ size_t minor_gc_count;
261
+ size_t major_gc_count;
262
+ size_t compact_count;
263
+ #if RGENGC_PROFILE > 0
264
+ size_t total_generated_normal_object_count;
265
+ size_t total_generated_shady_object_count;
266
+ size_t total_shade_operation_count;
267
+ size_t total_promoted_count;
268
+ size_t total_remembered_normal_object_count;
269
+ size_t total_remembered_shady_object_count;
270
+
271
+ #if RGENGC_PROFILE >= 2
272
+ size_t generated_normal_object_count_types[RUBY_T_MASK];
273
+ size_t generated_shady_object_count_types[RUBY_T_MASK];
274
+ size_t shade_operation_count_types[RUBY_T_MASK];
275
+ size_t promoted_types[RUBY_T_MASK];
276
+ size_t remembered_normal_object_count_types[RUBY_T_MASK];
277
+ size_t remembered_shady_object_count_types[RUBY_T_MASK];
278
+ #endif
279
+ #endif /* RGENGC_PROFILE */
280
+ #endif /* USE_RGENGC */
281
+
282
+ /* temporary profiling space */
283
+ double gc_sweep_start_time;
284
+ size_t total_allocated_objects_at_gc_start;
285
+ size_t heap_used_at_gc_start;
286
+
287
+ /* basic statistics */
288
+ size_t count;
289
+ size_t total_freed_objects;
290
+ size_t total_allocated_pages;
291
+ size_t total_freed_pages;
292
+ } profile;
293
+ struct gc_list *global_list;
294
+
295
+ VALUE gc_stress_mode;
296
+
297
+ #if USE_RGENGC
298
+ struct {
299
+ VALUE parent_object;
300
+ int need_major_gc;
301
+ size_t last_major_gc;
302
+ size_t uncollectible_wb_unprotected_objects;
303
+ size_t uncollectible_wb_unprotected_objects_limit;
304
+ size_t old_objects;
305
+ size_t old_objects_limit;
306
+
307
+ #if RGENGC_ESTIMATE_OLDMALLOC
308
+ size_t oldmalloc_increase;
309
+ size_t oldmalloc_increase_limit;
310
+ #endif
311
+
312
+ #if RGENGC_CHECK_MODE >= 2
313
+ struct st_table *allrefs_table;
314
+ size_t error_count;
315
+ #endif
316
+ } rgengc;
317
+
318
+ struct {
319
+ size_t considered_count_table[T_MASK];
320
+ size_t moved_count_table[T_MASK];
321
+ } rcompactor;
322
+
323
+ #if GC_ENABLE_INCREMENTAL_MARK
324
+ struct {
325
+ size_t pooled_slots;
326
+ size_t step_slots;
327
+ } rincgc;
328
+ #endif
329
+ #endif /* USE_RGENGC */
330
+
331
+ st_table *id_to_obj_tbl;
332
+ st_table *obj_to_id_tbl;
333
+
334
+ #if GC_DEBUG_STRESS_TO_CLASS
335
+ VALUE stress_to_class;
336
+ #endif
337
+ } rb_objspace_t;
338
+
339
+ #endif
@@ -0,0 +1,361 @@
1
+ #ifndef GC_PRIVATE_H
2
+ #define GC_PRIVATE_H
3
+
4
+ enum {
5
+ RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
6
+ RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
7
+ RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1),
8
+ RSTRUCT_TRANSIENT_FLAG = FL_USER3,
9
+ };
10
+
11
+ struct RStruct {
12
+ struct RBasic basic;
13
+ union {
14
+ struct {
15
+ long len;
16
+ const VALUE *ptr;
17
+ } heap;
18
+ const VALUE ary[RSTRUCT_EMBED_LEN_MAX];
19
+ } as;
20
+ };
21
+
22
+ struct RMoved {
23
+ VALUE flags;
24
+ VALUE dummy;
25
+ VALUE destination;
26
+ };
27
+
28
+ struct RRational {
29
+ struct RBasic basic;
30
+ VALUE num;
31
+ VALUE den;
32
+ };
33
+
34
+ struct RComplex {
35
+ struct RBasic basic;
36
+ VALUE real;
37
+ VALUE imag;
38
+ };
39
+
40
+ typedef struct RVALUE {
41
+ union {
42
+ struct {
43
+ VALUE flags; /* always 0 for freed obj */
44
+ struct RVALUE *next;
45
+ } free;
46
+ struct RMoved moved;
47
+ struct RBasic basic;
48
+ struct RObject object;
49
+ struct RClass klass;
50
+ struct RFloat flonum;
51
+ struct RString string;
52
+ struct RArray array;
53
+ struct RRegexp regexp;
54
+ struct RHash hash;
55
+ struct RData data;
56
+ struct RTypedData typeddata;
57
+ struct RStruct rstruct;
58
+ struct RBignum bignum;
59
+ struct RFile file;
60
+ struct RMatch match;
61
+ struct RRational rational;
62
+ struct RComplex complex;
63
+ union {
64
+ rb_cref_t cref;
65
+ struct vm_svar svar;
66
+ struct vm_throw_data throw_data;
67
+ struct vm_ifunc ifunc;
68
+ struct MEMO memo;
69
+ struct rb_method_entry_struct ment;
70
+ const rb_iseq_t iseq;
71
+ rb_env_t env;
72
+ struct rb_imemo_tmpbuf_struct alloc;
73
+ rb_ast_t ast;
74
+ } imemo;
75
+ struct {
76
+ struct RBasic basic;
77
+ VALUE v1;
78
+ VALUE v2;
79
+ VALUE v3;
80
+ } values;
81
+ } as;
82
+ #if GC_DEBUG
83
+ const char *file;
84
+ int line;
85
+ #endif
86
+ } RVALUE;
87
+
88
+ #define RANY(o) ((RVALUE*)(o))
89
+ #define STACK_CHUNK_SIZE 500
90
+
91
+ typedef struct stack_chunk {
92
+ VALUE data[STACK_CHUNK_SIZE];
93
+ struct stack_chunk *next;
94
+ } stack_chunk_t;
95
+
96
+ typedef struct mark_stack {
97
+ stack_chunk_t *chunk;
98
+ stack_chunk_t *cache;
99
+ int index;
100
+ int limit;
101
+ size_t cache_size;
102
+ size_t unused_cache_size;
103
+ } mark_stack_t;
104
+
105
+ typedef uintptr_t bits_t;
106
+ enum {
107
+ BITS_SIZE = sizeof(bits_t),
108
+ BITS_BITLENGTH = ( BITS_SIZE * CHAR_BIT )
109
+ };
110
+
111
+ struct heap_page_header {
112
+ struct heap_page *page;
113
+ };
114
+
115
+ struct heap_page_body {
116
+ struct heap_page_header header;
117
+ /* char gap[]; */
118
+ /* RVALUE values[]; */
119
+ };
120
+
121
+ #define HEAP_PAGE_ALIGN_LOG 14
122
+ #define CEILDIV(i, mod) (((i) + (mod) - 1)/(mod))
123
+ enum {
124
+ HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG),
125
+ HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)),
126
+ HEAP_PAGE_SIZE = HEAP_PAGE_ALIGN,
127
+ HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)),
128
+ HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH),
129
+ HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT),
130
+ HEAP_PAGE_BITMAP_PLANES = 4 /* RGENGC: mark, unprotected, uncollectible, marking */
131
+ };
132
+
133
+ struct heap_page {
134
+ short total_slots;
135
+ short free_slots;
136
+ short pinned_slots;
137
+ short final_slots;
138
+ struct {
139
+ unsigned int before_sweep : 1;
140
+ unsigned int has_remembered_objects : 1;
141
+ unsigned int has_uncollectible_shady_objects : 1;
142
+ unsigned int in_tomb : 1;
143
+ } flags;
144
+
145
+ struct heap_page *free_next;
146
+ RVALUE *start;
147
+ RVALUE *freelist;
148
+ struct list_node page_node;
149
+
150
+ bits_t wb_unprotected_bits[HEAP_PAGE_BITMAP_LIMIT];
151
+ /* the following three bitmaps are cleared at the beginning of full GC */
152
+ bits_t mark_bits[HEAP_PAGE_BITMAP_LIMIT];
153
+ bits_t uncollectible_bits[HEAP_PAGE_BITMAP_LIMIT];
154
+ bits_t marking_bits[HEAP_PAGE_BITMAP_LIMIT];
155
+
156
+ /* If set, the object is not movable */
157
+ bits_t pinned_bits[HEAP_PAGE_BITMAP_LIMIT];
158
+ };
159
+
160
+
161
+ typedef struct rb_heap_struct {
162
+ struct heap_page *free_pages;
163
+ struct list_head pages;
164
+ struct heap_page *sweeping_page; /* iterator for .pages */
165
+ struct heap_page *compact_cursor;
166
+ size_t compact_cursor_index;
167
+ #if GC_ENABLE_INCREMENTAL_MARK
168
+ struct heap_page *pooled_pages;
169
+ #endif
170
+ size_t total_pages; /* total page count in a heap */
171
+ size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */
172
+ } rb_heap_t;
173
+
174
+ typedef struct gc_profile_record {
175
+ int flags;
176
+
177
+ double gc_time;
178
+ double gc_invoke_time;
179
+
180
+ size_t heap_total_objects;
181
+ size_t heap_use_size;
182
+ size_t heap_total_size;
183
+ size_t moved_objects;
184
+
185
+ #if GC_PROFILE_MORE_DETAIL
186
+ double gc_mark_time;
187
+ double gc_sweep_time;
188
+
189
+ size_t heap_use_pages;
190
+ size_t heap_live_objects;
191
+ size_t heap_free_objects;
192
+
193
+ size_t allocate_increase;
194
+ size_t allocate_limit;
195
+
196
+ double prepare_time;
197
+ size_t removing_objects;
198
+ size_t empty_objects;
199
+ #if GC_PROFILE_DETAIL_MEMORY
200
+ long maxrss;
201
+ long minflt;
202
+ long majflt;
203
+ #endif
204
+ #endif
205
+ #if MALLOC_ALLOCATED_SIZE
206
+ size_t allocated_size;
207
+ #endif
208
+
209
+ #if RGENGC_PROFILE > 0
210
+ size_t old_objects;
211
+ size_t remembered_normal_objects;
212
+ size_t remembered_shady_objects;
213
+ #endif
214
+ } gc_profile_record;
215
+
216
+ typedef struct rb_objspace {
217
+ struct {
218
+ size_t limit;
219
+ size_t increase;
220
+ #if MALLOC_ALLOCATED_SIZE
221
+ size_t allocated_size;
222
+ size_t allocations;
223
+ #endif
224
+ } malloc_params;
225
+
226
+ struct {
227
+ unsigned int mode : 2;
228
+ unsigned int immediate_sweep : 1;
229
+ unsigned int dont_gc : 1;
230
+ unsigned int dont_incremental : 1;
231
+ unsigned int during_gc : 1;
232
+ unsigned int during_compacting : 1;
233
+ unsigned int gc_stressful: 1;
234
+ unsigned int has_hook: 1;
235
+ unsigned int during_minor_gc : 1;
236
+ #if GC_ENABLE_INCREMENTAL_MARK
237
+ unsigned int during_incremental_marking : 1;
238
+ #endif
239
+ } flags;
240
+
241
+ rb_event_flag_t hook_events;
242
+ size_t total_allocated_objects;
243
+ VALUE next_object_id;
244
+
245
+ rb_heap_t eden_heap;
246
+ rb_heap_t tomb_heap; /* heap for zombies and ghosts */
247
+
248
+ struct {
249
+ rb_atomic_t finalizing;
250
+ } atomic_flags;
251
+
252
+ mark_stack_t mark_stack;
253
+ size_t marked_slots;
254
+
255
+ struct {
256
+ struct heap_page **sorted;
257
+ size_t allocated_pages;
258
+ size_t allocatable_pages;
259
+ size_t sorted_length;
260
+ RVALUE *range[2];
261
+ size_t freeable_pages;
262
+
263
+ /* final */
264
+ size_t final_slots;
265
+ VALUE deferred_final;
266
+ } heap_pages;
267
+
268
+ st_table *finalizer_table;
269
+
270
+ struct {
271
+ int run;
272
+ int latest_gc_info;
273
+ gc_profile_record *records;
274
+ gc_profile_record *current_record;
275
+ size_t next_index;
276
+ size_t size;
277
+
278
+ #if GC_PROFILE_MORE_DETAIL
279
+ double prepare_time;
280
+ #endif
281
+ double invoke_time;
282
+
283
+ size_t minor_gc_count;
284
+ size_t major_gc_count;
285
+ size_t compact_count;
286
+ size_t read_barrier_faults;
287
+ #if RGENGC_PROFILE > 0
288
+ size_t total_generated_normal_object_count;
289
+ size_t total_generated_shady_object_count;
290
+ size_t total_shade_operation_count;
291
+ size_t total_promoted_count;
292
+ size_t total_remembered_normal_object_count;
293
+ size_t total_remembered_shady_object_count;
294
+
295
+ #if RGENGC_PROFILE >= 2
296
+ size_t generated_normal_object_count_types[RUBY_T_MASK];
297
+ size_t generated_shady_object_count_types[RUBY_T_MASK];
298
+ size_t shade_operation_count_types[RUBY_T_MASK];
299
+ size_t promoted_types[RUBY_T_MASK];
300
+ size_t remembered_normal_object_count_types[RUBY_T_MASK];
301
+ size_t remembered_shady_object_count_types[RUBY_T_MASK];
302
+ #endif
303
+ #endif /* RGENGC_PROFILE */
304
+
305
+ /* temporary profiling space */
306
+ double gc_sweep_start_time;
307
+ size_t total_allocated_objects_at_gc_start;
308
+ size_t heap_used_at_gc_start;
309
+
310
+ /* basic statistics */
311
+ size_t count;
312
+ size_t total_freed_objects;
313
+ size_t total_allocated_pages;
314
+ size_t total_freed_pages;
315
+ } profile;
316
+ struct gc_list *global_list;
317
+
318
+ VALUE gc_stress_mode;
319
+
320
+ struct {
321
+ VALUE parent_object;
322
+ int need_major_gc;
323
+ size_t last_major_gc;
324
+ size_t uncollectible_wb_unprotected_objects;
325
+ size_t uncollectible_wb_unprotected_objects_limit;
326
+ size_t old_objects;
327
+ size_t old_objects_limit;
328
+
329
+ #if RGENGC_ESTIMATE_OLDMALLOC
330
+ size_t oldmalloc_increase;
331
+ size_t oldmalloc_increase_limit;
332
+ #endif
333
+
334
+ #if RGENGC_CHECK_MODE >= 2
335
+ struct st_table *allrefs_table;
336
+ size_t error_count;
337
+ #endif
338
+ } rgengc;
339
+
340
+ struct {
341
+ size_t considered_count_table[T_MASK];
342
+ size_t moved_count_table[T_MASK];
343
+ size_t total_moved;
344
+ } rcompactor;
345
+
346
+ #if GC_ENABLE_INCREMENTAL_MARK
347
+ struct {
348
+ size_t pooled_slots;
349
+ size_t step_slots;
350
+ } rincgc;
351
+ #endif
352
+
353
+ st_table *id_to_obj_tbl;
354
+ st_table *obj_to_id_tbl;
355
+
356
+ #if GC_DEBUG_STRESS_TO_CLASS
357
+ VALUE stress_to_class;
358
+ #endif
359
+ } rb_objspace_t;
360
+
361
+ #endif