ruby_memprofiler_pprof 0.0.3 → 0.0.4

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 (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
+ }