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,374 @@
1
+ #ifndef GC_PRIVATE_H
2
+ #define GC_PRIVATE_H
3
+
4
+ struct RMoved {
5
+ VALUE flags;
6
+ VALUE dummy;
7
+ VALUE destination;
8
+ };
9
+
10
+ struct RRational {
11
+ struct RBasic basic;
12
+ VALUE num;
13
+ VALUE den;
14
+ };
15
+
16
+ struct RComplex {
17
+ struct RBasic basic;
18
+ VALUE real;
19
+ VALUE imag;
20
+ };
21
+
22
+ struct RSymbol {
23
+ struct RBasic basic;
24
+ st_index_t hashval;
25
+ VALUE fstr;
26
+ ID id;
27
+ };
28
+
29
+ typedef struct RVALUE {
30
+ union {
31
+ struct {
32
+ VALUE flags; /* always 0 for freed obj */
33
+ struct RVALUE *next;
34
+ } free;
35
+ struct RMoved moved;
36
+ struct RBasic basic;
37
+ struct RObject object;
38
+ struct RClass klass;
39
+ struct RFloat flonum;
40
+ struct RString string;
41
+ struct RArray array;
42
+ struct RRegexp regexp;
43
+ struct RHash hash;
44
+ struct RData data;
45
+ struct RTypedData typeddata;
46
+ struct RStruct rstruct;
47
+ struct RBignum bignum;
48
+ struct RFile file;
49
+ struct RMatch match;
50
+ struct RRational rational;
51
+ struct RComplex complex;
52
+ struct RSymbol symbol;
53
+ union {
54
+ rb_cref_t cref;
55
+ struct vm_svar svar;
56
+ struct vm_throw_data throw_data;
57
+ struct vm_ifunc ifunc;
58
+ struct MEMO memo;
59
+ struct rb_method_entry_struct ment;
60
+ const rb_iseq_t iseq;
61
+ rb_env_t env;
62
+ struct rb_imemo_tmpbuf_struct alloc;
63
+ rb_ast_t ast;
64
+ } imemo;
65
+ struct {
66
+ struct RBasic basic;
67
+ VALUE v1;
68
+ VALUE v2;
69
+ VALUE v3;
70
+ } values;
71
+ } as;
72
+ #if GC_DEBUG
73
+ const char *file;
74
+ int line;
75
+ #endif
76
+ } RVALUE;
77
+
78
+ #define RANY(o) ((RVALUE*)(o))
79
+ #define STACK_CHUNK_SIZE 500
80
+
81
+ typedef struct stack_chunk {
82
+ VALUE data[STACK_CHUNK_SIZE];
83
+ struct stack_chunk *next;
84
+ } stack_chunk_t;
85
+
86
+ typedef struct mark_stack {
87
+ stack_chunk_t *chunk;
88
+ stack_chunk_t *cache;
89
+ int index;
90
+ int limit;
91
+ size_t cache_size;
92
+ size_t unused_cache_size;
93
+ } mark_stack_t;
94
+
95
+ typedef struct rb_heap_struct {
96
+ struct heap_page *free_pages;
97
+ struct list_head pages;
98
+ struct heap_page *sweeping_page; /* iterator for .pages */
99
+ struct heap_page *compact_cursor;
100
+ RVALUE * compact_cursor_index;
101
+ #if GC_ENABLE_INCREMENTAL_MARK
102
+ struct heap_page *pooled_pages;
103
+ #endif
104
+ size_t total_pages; /* total page count in a heap */
105
+ size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */
106
+ } rb_heap_t;
107
+
108
+ typedef struct rb_size_pool_struct {
109
+ short slot_size;
110
+
111
+ size_t allocatable_pages;
112
+
113
+ #if USE_RVARGC
114
+ /* Sweeping statistics */
115
+ size_t freed_slots;
116
+ size_t empty_slots;
117
+
118
+ /* Global statistics */
119
+ size_t force_major_gc_count;
120
+ #endif
121
+
122
+ rb_heap_t eden_heap;
123
+ rb_heap_t tomb_heap;
124
+ } rb_size_pool_t;
125
+
126
+ struct heap_page_header {
127
+ struct heap_page *page;
128
+ };
129
+
130
+ struct heap_page_body {
131
+ struct heap_page_header header;
132
+ /* char gap[]; */
133
+ /* RVALUE values[]; */
134
+ };
135
+
136
+ typedef uintptr_t bits_t;
137
+ enum {
138
+ BITS_SIZE = sizeof(bits_t),
139
+ BITS_BITLENGTH = ( BITS_SIZE * CHAR_BIT )
140
+ };
141
+ #define HEAP_PAGE_ALIGN_LOG 14
142
+ #define CEILDIV(i, mod) (((i) + (mod) - 1)/(mod))
143
+ enum {
144
+ HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG),
145
+ HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)),
146
+ HEAP_PAGE_SIZE = HEAP_PAGE_ALIGN,
147
+ HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)),
148
+ HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH),
149
+ HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT),
150
+ };
151
+ #define NUM_IN_PAGE(p) (((bits_t)(p) & HEAP_PAGE_ALIGN_MASK)/sizeof(RVALUE))
152
+
153
+ struct heap_page {
154
+ short slot_size;
155
+ short total_slots;
156
+ short free_slots;
157
+ short pinned_slots;
158
+ short final_slots;
159
+ struct {
160
+ unsigned int before_sweep : 1;
161
+ unsigned int has_remembered_objects : 1;
162
+ unsigned int has_uncollectible_shady_objects : 1;
163
+ unsigned int in_tomb : 1;
164
+ } flags;
165
+
166
+ rb_size_pool_t *size_pool;
167
+
168
+ struct heap_page *free_next;
169
+ RVALUE *start;
170
+ RVALUE *freelist;
171
+ struct list_node page_node;
172
+
173
+ bits_t wb_unprotected_bits[HEAP_PAGE_BITMAP_LIMIT];
174
+ /* the following three bitmaps are cleared at the beginning of full GC */
175
+ bits_t mark_bits[HEAP_PAGE_BITMAP_LIMIT];
176
+ bits_t uncollectible_bits[HEAP_PAGE_BITMAP_LIMIT];
177
+ bits_t marking_bits[HEAP_PAGE_BITMAP_LIMIT];
178
+
179
+ /* If set, the object is not movable */
180
+ bits_t pinned_bits[HEAP_PAGE_BITMAP_LIMIT];
181
+ };
182
+
183
+
184
+ typedef struct gc_profile_record {
185
+ unsigned int flags;
186
+
187
+ double gc_time;
188
+ double gc_invoke_time;
189
+
190
+ size_t heap_total_objects;
191
+ size_t heap_use_size;
192
+ size_t heap_total_size;
193
+ size_t moved_objects;
194
+
195
+ #if GC_PROFILE_MORE_DETAIL
196
+ double gc_mark_time;
197
+ double gc_sweep_time;
198
+
199
+ size_t heap_use_pages;
200
+ size_t heap_live_objects;
201
+ size_t heap_free_objects;
202
+
203
+ size_t allocate_increase;
204
+ size_t allocate_limit;
205
+
206
+ double prepare_time;
207
+ size_t removing_objects;
208
+ size_t empty_objects;
209
+ #if GC_PROFILE_DETAIL_MEMORY
210
+ long maxrss;
211
+ long minflt;
212
+ long majflt;
213
+ #endif
214
+ #endif
215
+ #if MALLOC_ALLOCATED_SIZE
216
+ size_t allocated_size;
217
+ #endif
218
+
219
+ #if RGENGC_PROFILE > 0
220
+ size_t old_objects;
221
+ size_t remembered_normal_objects;
222
+ size_t remembered_shady_objects;
223
+ #endif
224
+ } gc_profile_record;
225
+
226
+
227
+ typedef struct rb_objspace {
228
+ struct {
229
+ size_t limit;
230
+ size_t increase;
231
+ #if MALLOC_ALLOCATED_SIZE
232
+ size_t allocated_size;
233
+ size_t allocations;
234
+ #endif
235
+ } malloc_params;
236
+
237
+ struct {
238
+ unsigned int mode : 2;
239
+ unsigned int immediate_sweep : 1;
240
+ unsigned int dont_gc : 1;
241
+ unsigned int dont_incremental : 1;
242
+ unsigned int during_gc : 1;
243
+ unsigned int during_compacting : 1;
244
+ unsigned int gc_stressful: 1;
245
+ unsigned int has_hook: 1;
246
+ unsigned int during_minor_gc : 1;
247
+ #if GC_ENABLE_INCREMENTAL_MARK
248
+ unsigned int during_incremental_marking : 1;
249
+ #endif
250
+ unsigned int measure_gc : 1;
251
+ } flags;
252
+
253
+ rb_event_flag_t hook_events;
254
+ size_t total_allocated_objects;
255
+ VALUE next_object_id;
256
+
257
+ rb_size_pool_t size_pools[SIZE_POOL_COUNT];
258
+
259
+ struct {
260
+ rb_atomic_t finalizing;
261
+ } atomic_flags;
262
+
263
+ mark_stack_t mark_stack;
264
+ size_t marked_slots;
265
+
266
+ struct {
267
+ struct heap_page **sorted;
268
+ size_t allocated_pages;
269
+ size_t allocatable_pages;
270
+ size_t sorted_length;
271
+ RVALUE *range[2];
272
+ size_t freeable_pages;
273
+
274
+ /* final */
275
+ size_t final_slots;
276
+ VALUE deferred_final;
277
+ } heap_pages;
278
+
279
+ st_table *finalizer_table;
280
+
281
+ struct {
282
+ int run;
283
+ unsigned int latest_gc_info;
284
+ gc_profile_record *records;
285
+ gc_profile_record *current_record;
286
+ size_t next_index;
287
+ size_t size;
288
+
289
+ #if GC_PROFILE_MORE_DETAIL
290
+ double prepare_time;
291
+ #endif
292
+ double invoke_time;
293
+
294
+ size_t minor_gc_count;
295
+ size_t major_gc_count;
296
+ size_t compact_count;
297
+ size_t read_barrier_faults;
298
+ #if RGENGC_PROFILE > 0
299
+ size_t total_generated_normal_object_count;
300
+ size_t total_generated_shady_object_count;
301
+ size_t total_shade_operation_count;
302
+ size_t total_promoted_count;
303
+ size_t total_remembered_normal_object_count;
304
+ size_t total_remembered_shady_object_count;
305
+
306
+ #if RGENGC_PROFILE >= 2
307
+ size_t generated_normal_object_count_types[RUBY_T_MASK];
308
+ size_t generated_shady_object_count_types[RUBY_T_MASK];
309
+ size_t shade_operation_count_types[RUBY_T_MASK];
310
+ size_t promoted_types[RUBY_T_MASK];
311
+ size_t remembered_normal_object_count_types[RUBY_T_MASK];
312
+ size_t remembered_shady_object_count_types[RUBY_T_MASK];
313
+ #endif
314
+ #endif /* RGENGC_PROFILE */
315
+
316
+ /* temporary profiling space */
317
+ double gc_sweep_start_time;
318
+ size_t total_allocated_objects_at_gc_start;
319
+ size_t heap_used_at_gc_start;
320
+
321
+ /* basic statistics */
322
+ size_t count;
323
+ size_t total_freed_objects;
324
+ size_t total_allocated_pages;
325
+ size_t total_freed_pages;
326
+ uint64_t total_time_ns;
327
+ struct timespec start_time;
328
+ } profile;
329
+ struct gc_list *global_list;
330
+
331
+ VALUE gc_stress_mode;
332
+
333
+ struct {
334
+ VALUE parent_object;
335
+ int need_major_gc;
336
+ size_t last_major_gc;
337
+ size_t uncollectible_wb_unprotected_objects;
338
+ size_t uncollectible_wb_unprotected_objects_limit;
339
+ size_t old_objects;
340
+ size_t old_objects_limit;
341
+
342
+ #if RGENGC_ESTIMATE_OLDMALLOC
343
+ size_t oldmalloc_increase;
344
+ size_t oldmalloc_increase_limit;
345
+ #endif
346
+
347
+ #if RGENGC_CHECK_MODE >= 2
348
+ struct st_table *allrefs_table;
349
+ size_t error_count;
350
+ #endif
351
+ } rgengc;
352
+
353
+ struct {
354
+ size_t considered_count_table[T_MASK];
355
+ size_t moved_count_table[T_MASK];
356
+ size_t total_moved;
357
+ } rcompactor;
358
+
359
+ #if GC_ENABLE_INCREMENTAL_MARK
360
+ struct {
361
+ size_t pooled_slots;
362
+ size_t step_slots;
363
+ } rincgc;
364
+ #endif
365
+
366
+ st_table *id_to_obj_tbl;
367
+ st_table *obj_to_id_tbl;
368
+
369
+ #if GC_DEBUG_STRESS_TO_CLASS
370
+ VALUE stress_to_class;
371
+ #endif
372
+ } rb_objspace_t;
373
+
374
+ #endif
@@ -0,0 +1,31 @@
1
+ #ifndef __RUBY_PRIVATE_H
2
+ #define __RUBY_PRIVATE_H
3
+
4
+ #include "extconf.h"
5
+ #include RUBY_MJIT_HEADER
6
+
7
+ #include <ruby.h>
8
+ #include <ruby/re.h>
9
+
10
+ // Default this to zero unless the MJIT header already has a value
11
+ #ifndef GC_DEBUG_STRESS_TO_CLASS
12
+ #define GC_DEBUG_STRESS_TO_CLASS 0
13
+ #endif
14
+
15
+ // This is the correct default for GC_ENABLE_INCREMENTAL_MARK
16
+ #ifndef GC_ENABLE_INCREMENTAL_MARK
17
+ #define GC_ENABLE_INCREMENTAL_MARK USE_RINCGC
18
+ #endif
19
+
20
+ // Prototype for functions that are exposed with external linkage, but not in
21
+ // the public headers.
22
+ size_t rb_obj_memsize_of(VALUE obj);
23
+
24
+ // Bring in an appropriate version of the rb_objspace structs; this will include
25
+ // one of the files under ruby_private/ depending on version.
26
+ #include "gc_private.h"
27
+
28
+ #define CLASS_OR_MODULE_P(obj) \
29
+ (!SPECIAL_CONST_P(obj) && (BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE))
30
+
31
+ #endif
@@ -0,0 +1,43 @@
1
+ #include "ruby_memprofiler_pprof.h"
2
+ #include <backtracie.h>
3
+ #include <ruby.h>
4
+
5
+ // Total size of all things owned by the sample, for accounting purposes
6
+ size_t mpp_sample_memsize(struct mpp_sample *sample) {
7
+ return sizeof(struct mpp_sample) + sample->frames_capacity * sizeof(minimal_location_t);
8
+ }
9
+
10
+ // Free the sample, incl. releasing strings it interned.
11
+ void mpp_sample_free(struct mpp_sample *sample) { mpp_free(sample); }
12
+
13
+ struct mpp_sample *mpp_sample_capture(VALUE allocated_value_weak) {
14
+ VALUE thread = rb_thread_current();
15
+ int stack_size = backtracie_frame_count_for_thread(thread);
16
+ struct mpp_sample *sample = mpp_xmalloc(sizeof(struct mpp_sample) + stack_size * sizeof(minimal_location_t));
17
+ sample->frames_capacity = stack_size;
18
+ sample->frames_count = 0;
19
+ sample->allocated_value_weak = allocated_value_weak;
20
+ memset(sample->frames, 0, stack_size * sizeof(minimal_location_t));
21
+
22
+ for (int i = 0; i < stack_size; i++) {
23
+ minimal_location_t *frame = &sample->frames[sample->frames_count];
24
+ bool is_valid = backtracie_capture_minimal_frame_for_thread(thread, i, frame);
25
+ if (is_valid) {
26
+ sample->frames_count++;
27
+ }
28
+ }
29
+
30
+ return sample;
31
+ }
32
+
33
+ size_t mpp_sample_frame_function_name(struct mpp_sample *sample, int frame_index, char *outbuf, size_t outbuf_len) {
34
+ return backtracie_minimal_frame_name_cstr(&sample->frames[frame_index], outbuf, outbuf_len);
35
+ }
36
+
37
+ size_t mpp_sample_frame_file_name(struct mpp_sample *sample, int frame_index, char *outbuf, size_t outbuf_len) {
38
+ return backtracie_minimal_frame_filename_cstr(&sample->frames[frame_index], outbuf, outbuf_len);
39
+ }
40
+
41
+ int mpp_sample_frame_line_number(struct mpp_sample *sample, int frame_index) {
42
+ return sample->frames[frame_index].line_number;
43
+ }