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.
- checksums.yaml +4 -4
- data/ext/ruby_memprofiler_pprof_ext/collector.c +803 -0
- data/ext/ruby_memprofiler_pprof_ext/compat.c +184 -0
- data/ext/ruby_memprofiler_pprof_ext/compile_commands.json +1 -0
- data/ext/ruby_memprofiler_pprof_ext/extconf.rb +152 -0
- data/ext/ruby_memprofiler_pprof_ext/pprof.upb.c +199 -0
- data/ext/ruby_memprofiler_pprof_ext/pprof.upb.h +924 -0
- data/ext/ruby_memprofiler_pprof_ext/pprof_out.c +430 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_hacks.c +118 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_memprofiler_pprof.c +10 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_memprofiler_pprof.h +183 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby26/gc_private.h +324 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby27/gc_private.h +339 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby30/gc_private.h +361 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_private/ruby31/gc_private.h +374 -0
- data/ext/ruby_memprofiler_pprof_ext/ruby_private.h +31 -0
- data/ext/ruby_memprofiler_pprof_ext/sample.c +43 -0
- data/ext/ruby_memprofiler_pprof_ext/vendor/backtracie/backtracie.h +268 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/CONTRIBUTING.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/DESIGN.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/LICENSE +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/README.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/WORKSPACE +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/amalgamate.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/build_defs.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/lua.BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/protobuf.patch +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/py_proto_library.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/python_downloads.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/system_python.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/upb_proto_library.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/bazel/workspace_deps.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/BUILD.googleapis +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/benchmark.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/build_defs.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/compare.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/descriptor.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/descriptor_sv.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/empty.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_protobuf_binary_cc.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_synthetic_protos.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/benchmarks/gen_upb_binary_c.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/BUILD.bazel +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/README.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/build_defs.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/make_cmakelists.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/staleness_test.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/cmake/staleness_test_lib.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/render.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/style-guide.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/vs-cpp-protos.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/docs/wrapping-upb.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/convert.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/convert.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_containers.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_containers.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_pool.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/descriptor_pool.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/dist/BUILD.bazel +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/dist/dist.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/extension_dict.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/extension_dict.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/map.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/map.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/message.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/message.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/minimal_test.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/README.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_database_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_pool_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/descriptor_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/generator_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/json_format_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/keywords_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/message_factory_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/message_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/proto_builder_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/pyproto_test_wrapper.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/reflection_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/service_reflection_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/symbol_database_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/text_encoding_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/text_format_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/unknown_fields_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/well_known_types_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/pb_unit_tests/wire_format_test_wrapper.py +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/protobuf.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/protobuf.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/py_extension.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/python_api.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/repeated.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/repeated.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/unknown_fields.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/unknown_fields.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/python/version_script.lds +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/LICENSE +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/README.google +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/console.lua +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/lunit/lunit.lua +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/LICENSE +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/naive.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/range2-neon.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/range2-sse.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/third_party/utf8_range/utf8_range.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/BUILD.bazel +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/README.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/def.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/lua_proto_library.bzl +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/main.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/msg.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/test_upb.lua +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upb.lua +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/bindings/lua/upbc.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/collections.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/collections.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/conformance_upb.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/conformance_upb_failures.txt +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_fast.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_fast.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/decode_internal.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/def.hpp +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/empty.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/encode.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/encode.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/fuzz/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/fuzz/file_descriptor_parsenew_fuzzer.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_decode.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_decode.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_encode.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/json_encode.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table.hpp +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors_internal.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_accessors_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/mini_table_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_internal.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/msg_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/port_def.inc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/port_undef.inc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/reflection.hpp +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/table.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/table_internal.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_cpp.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_cpp.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_generated_code.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/test_table.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/text_encode.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/text_encode.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb.hpp +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/upb_internal.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/README.md +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/compare_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_public_import_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_regular_import_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_weak_import_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/def_to_proto_wweak_import_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields.c +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields_test.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upb/util/required_fields_test.proto +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/BUILD +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/common.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/common.h +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/protoc-gen-upb.cc +0 -0
- data/ext/{ruby_memprofiler_pprof → ruby_memprofiler_pprof_ext}/vendor/upb/upbc/protoc-gen-upbdefs.cc +0 -0
- data/lib/ruby_memprofiler_pprof/atfork.rb +1 -1
- data/lib/ruby_memprofiler_pprof/block_flusher.rb +48 -4
- data/lib/ruby_memprofiler_pprof/file_flusher.rb +13 -6
- data/lib/ruby_memprofiler_pprof/profile_app.rb +8 -12
- data/lib/ruby_memprofiler_pprof/profile_data.rb +7 -8
- data/lib/ruby_memprofiler_pprof/version.rb +1 -1
- data/lib/ruby_memprofiler_pprof.rb +5 -4
- data/libexec/ruby_memprofiler_pprof_profile +6 -6
- metadata +207 -200
- data/ext/ruby_memprofiler_pprof/backtrace.c +0 -429
- data/ext/ruby_memprofiler_pprof/collector.c +0 -1055
- data/ext/ruby_memprofiler_pprof/compat.c +0 -182
- data/ext/ruby_memprofiler_pprof/extconf.rb +0 -72
- data/ext/ruby_memprofiler_pprof/pprof.upb.c +0 -170
- data/ext/ruby_memprofiler_pprof/pprof.upb.h +0 -848
- data/ext/ruby_memprofiler_pprof/pprof_out.c +0 -285
- data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.c +0 -11
- data/ext/ruby_memprofiler_pprof/ruby_memprofiler_pprof.h +0 -301
- data/ext/ruby_memprofiler_pprof/strtab.c +0 -391
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#include <errno.h>
|
|
2
|
+
#include <pthread.h>
|
|
3
|
+
#include <stdarg.h>
|
|
4
|
+
#include <stdlib.h>
|
|
5
|
+
#include <time.h>
|
|
6
|
+
|
|
7
|
+
#include <ruby.h>
|
|
8
|
+
|
|
9
|
+
#include "ruby_memprofiler_pprof.h"
|
|
10
|
+
|
|
11
|
+
#if defined(HAVE_ARC4RANDOM)
|
|
12
|
+
uint32_t mpp_rand() { return arc4random(); }
|
|
13
|
+
void mpp_rand_init() {}
|
|
14
|
+
#elif defined(HAVE_MRAND48_R) && defined(HAVE_GETENTROPY)
|
|
15
|
+
// Why? Why does glibc make it so darn difficult to just get random numbers in a way
|
|
16
|
+
// that isn't racy across different threads and doesn't depend on global state?
|
|
17
|
+
#include <sys/random.h>
|
|
18
|
+
|
|
19
|
+
static pthread_mutex_t mpp_rand_lock;
|
|
20
|
+
static struct drand48_data mpp_rand_buffer;
|
|
21
|
+
|
|
22
|
+
uint32_t mpp_rand() {
|
|
23
|
+
pthread_mutex_lock(&mpp_rand_lock);
|
|
24
|
+
long int result;
|
|
25
|
+
int ret = mrand48_r(&mpp_rand_buffer, &result);
|
|
26
|
+
if (ret < 0) {
|
|
27
|
+
rb_bug("mrand48_r returned -1?");
|
|
28
|
+
}
|
|
29
|
+
pthread_mutex_unlock(&mpp_rand_lock);
|
|
30
|
+
return (uint32_t)result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void mpp_rand_init() {
|
|
34
|
+
pthread_mutex_init(&mpp_rand_lock, NULL);
|
|
35
|
+
memset(&mpp_rand_buffer, 0, sizeof(struct drand48_data));
|
|
36
|
+
unsigned short int seedbuf[3];
|
|
37
|
+
int ret;
|
|
38
|
+
ret = getentropy(seedbuf, sizeof(seedbuf));
|
|
39
|
+
if (ret == -1) {
|
|
40
|
+
rb_bug("getentropy returned -1?");
|
|
41
|
+
}
|
|
42
|
+
ret = seed48_r(seedbuf, &mpp_rand_buffer);
|
|
43
|
+
if (ret < 0) {
|
|
44
|
+
rb_bug("seed48_r returned -1?");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
#else
|
|
48
|
+
#error "No suitable RNG implementation"
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
struct timespec mpp_gettime_monotonic() {
|
|
52
|
+
struct timespec tv;
|
|
53
|
+
clock_gettime(CLOCK_MONOTONIC, &tv);
|
|
54
|
+
return tv;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
int64_t mpp_time_delta_nsec(struct timespec t1, struct timespec t2) {
|
|
58
|
+
return (t2.tv_sec - t1.tv_sec) * 1000000000 + (t2.tv_nsec - t1.tv_nsec);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void *mpp_xcalloc(size_t sz) {
|
|
62
|
+
void *mem = mpp_xmalloc(sz);
|
|
63
|
+
memset(mem, 0, sz);
|
|
64
|
+
return mem;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void *mpp_xmalloc(size_t sz) {
|
|
68
|
+
void *mem = ruby_xmalloc(sz);
|
|
69
|
+
if (!mem) {
|
|
70
|
+
MPP_ASSERT_FAIL("failed to allocate memory in ruby_memprofiler_pprof gem");
|
|
71
|
+
}
|
|
72
|
+
return mem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void mpp_free(void *mem) { ruby_xfree(mem); }
|
|
76
|
+
|
|
77
|
+
void *mpp_realloc(void *mem, size_t newsz) {
|
|
78
|
+
void *newmem = ruby_xrealloc(mem, newsz);
|
|
79
|
+
if (!newmem) {
|
|
80
|
+
MPP_ASSERT_FAIL("failed to allocate memory in ruby_memprofiler_pprof gem");
|
|
81
|
+
}
|
|
82
|
+
return newmem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void mpp_pthread_mutex_lock(pthread_mutex_t *m) {
|
|
86
|
+
if (pthread_mutex_lock(m) != 0) {
|
|
87
|
+
MPP_ASSERT_FAIL("failed to lock mutex in ruby_memprofiler_pprof gem");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
void mpp_pthread_mutex_unlock(pthread_mutex_t *m) {
|
|
92
|
+
if (pthread_mutex_unlock(m) != 0) {
|
|
93
|
+
MPP_ASSERT_FAIL("failed to unlock mutex in ruby_memprofiler_pprof gem");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
int mpp_pthread_mutex_trylock(pthread_mutex_t *m) {
|
|
98
|
+
int r = pthread_mutex_trylock(m);
|
|
99
|
+
if (r != 0 && r != EBUSY) {
|
|
100
|
+
MPP_ASSERT_FAIL("failed to trylock mutex in ruby_memprofiler_pprof gem");
|
|
101
|
+
}
|
|
102
|
+
return r;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void mpp_pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *attr) {
|
|
106
|
+
if (pthread_mutex_init(m, attr) != 0) {
|
|
107
|
+
MPP_ASSERT_FAIL("failed to init mutex in ruby_memprofiler_pprof gem");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
void mpp_pthread_mutex_destroy(pthread_mutex_t *m) {
|
|
112
|
+
if (pthread_mutex_destroy(m) != 0) {
|
|
113
|
+
MPP_ASSERT_FAIL("failed to destroy mutex in ruby_memprofiler_pprof gem");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
void mpp_pthread_mutexattr_init(pthread_mutexattr_t *a) {
|
|
118
|
+
if (pthread_mutexattr_init(a) != 0) {
|
|
119
|
+
MPP_ASSERT_FAIL("failed to init pthread_mutexattr in ruby_memprofiler_pprof gem");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
void mpp_pthread_mutexattr_destroy(pthread_mutexattr_t *a) {
|
|
124
|
+
if (pthread_mutexattr_destroy(a) != 0) {
|
|
125
|
+
MPP_ASSERT_FAIL("failed to destroy pthread_mutexattr in ruby_memprofiler_pprof gem");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
void mpp_pthread_mutexattr_settype(pthread_mutexattr_t *a, int type) {
|
|
130
|
+
if (pthread_mutexattr_settype(a, type) != 0) {
|
|
131
|
+
MPP_ASSERT_FAIL("failed to set type on pthread_mutexattr in ruby_memprofiler_pprof gem");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
void mpp_pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) {
|
|
136
|
+
if (pthread_atfork(prepare, parent, child) != 0) {
|
|
137
|
+
MPP_ASSERT_FAIL("pthread_atfork failed in ruby_memprofiler_pprof gem");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
__attribute__((noreturn)) void mpp_assert_fail(const char *msg, const char *assertion, const char *file,
|
|
142
|
+
const char *line, const char *fn) {
|
|
143
|
+
char final_msg_buf[1024];
|
|
144
|
+
int32_t final_msg_ix = 0;
|
|
145
|
+
int32_t final_msg_remaining = sizeof(final_msg_buf) - 2; // -1 for null terminator, -1 for trailing newline.
|
|
146
|
+
|
|
147
|
+
#define FINAL_MSG_BUF_APPEND(str) \
|
|
148
|
+
do { \
|
|
149
|
+
int32_t seg_len = (int32_t)strlen(str); \
|
|
150
|
+
int32_t copy_n = (seg_len > final_msg_remaining) ? final_msg_remaining : seg_len; \
|
|
151
|
+
memcpy(final_msg_buf + final_msg_ix, str, copy_n); \
|
|
152
|
+
final_msg_ix += seg_len; \
|
|
153
|
+
final_msg_remaining -= seg_len; \
|
|
154
|
+
} while (0)
|
|
155
|
+
|
|
156
|
+
FINAL_MSG_BUF_APPEND("assertion failure in ruby_memprofiler_pprof gem: ");
|
|
157
|
+
FINAL_MSG_BUF_APPEND(msg);
|
|
158
|
+
FINAL_MSG_BUF_APPEND(" (");
|
|
159
|
+
FINAL_MSG_BUF_APPEND(assertion);
|
|
160
|
+
FINAL_MSG_BUF_APPEND("; at ");
|
|
161
|
+
FINAL_MSG_BUF_APPEND(file);
|
|
162
|
+
FINAL_MSG_BUF_APPEND(":");
|
|
163
|
+
FINAL_MSG_BUF_APPEND(line);
|
|
164
|
+
FINAL_MSG_BUF_APPEND(" ");
|
|
165
|
+
FINAL_MSG_BUF_APPEND(fn);
|
|
166
|
+
FINAL_MSG_BUF_APPEND(")");
|
|
167
|
+
|
|
168
|
+
// We're guaranteed to have left enough space for this because we started final_msg_remaining off
|
|
169
|
+
// with sizeof(buf) - 2.
|
|
170
|
+
final_msg_remaining += 2;
|
|
171
|
+
FINAL_MSG_BUF_APPEND("\n\0");
|
|
172
|
+
|
|
173
|
+
__attribute__((unused)) size_t r = write(STDERR_FILENO, final_msg_buf, final_msg_ix + 1);
|
|
174
|
+
abort();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
void mpp_log_debug(const char *pattern, ...) {
|
|
178
|
+
va_list args;
|
|
179
|
+
va_start(args, pattern);
|
|
180
|
+
fprintf(stderr, "ruby_memprofiler_pprof gem: ");
|
|
181
|
+
vfprintf(stderr, pattern, args);
|
|
182
|
+
fprintf(stderr, "\n");
|
|
183
|
+
va_end(args);
|
|
184
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ext/ruby_memprofiler_pprof_ext/Users/ktsanaktsidis/Code/zendesk/ruby_memprofiler_pprof/tmp/arm64-dar
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mkmf"
|
|
4
|
+
|
|
5
|
+
# Support GC.compact on Ruby >=- 2.7
|
|
6
|
+
have_func("rb_gc_mark_movable", ["ruby.h"])
|
|
7
|
+
# Handle Ractors
|
|
8
|
+
have_func("rb_ext_ractor_safe", ["ruby.h"])
|
|
9
|
+
|
|
10
|
+
# Find a random number generator API that doesn't have global state.
|
|
11
|
+
has_arc4random = have_func("arc4random", ["stdlib.h"])
|
|
12
|
+
has_mrand48_r = have_func("mrand48_r", ["stdlib.h"])
|
|
13
|
+
has_getentropy = have_func("getentropy", ["sys/random.h"])
|
|
14
|
+
if !has_arc4random && !(has_mrand48_r && has_getentropy)
|
|
15
|
+
abort "Need either arc4random (BSD) or mrand48_r/getentropy (GNU)"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Need zlib
|
|
19
|
+
has_zlib_headers = have_header("zlib.h")
|
|
20
|
+
has_zlib_lib = have_library("z")
|
|
21
|
+
raise "Zlib headers & library are required!" unless has_zlib_headers && has_zlib_lib
|
|
22
|
+
|
|
23
|
+
# Need to actually link pthreads properly
|
|
24
|
+
have_library("pthread") or raise "missing pthread library"
|
|
25
|
+
have_func("clock_gettime", ["time.h"]) or raise "missing clock_gettime"
|
|
26
|
+
|
|
27
|
+
ruby_version = Gem::Version.new RUBY_VERSION
|
|
28
|
+
|
|
29
|
+
# Ruby >= 3.1 has deprecated/no-opp'd rb_gc_force_recycle, which is good for us, because
|
|
30
|
+
# objects freed with that method do not get the freeobj tracepoint called on them.
|
|
31
|
+
if Gem::Requirement.new("< 3.1").satisfied_by?(ruby_version)
|
|
32
|
+
$defs << "-DHAVE_WORKING_RB_GC_FORCE_RECYCLE"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if Gem::Requirement.new("~> 2.6.0").satisfied_by?(ruby_version)
|
|
36
|
+
$VPATH << "$(srcdir)/ruby_private/ruby26"
|
|
37
|
+
$INCFLAGS << " -I#{File.join($srcdir, "ruby_private/ruby26")}"
|
|
38
|
+
elsif Gem::Requirement.new("~> 2.7.0").satisfied_by?(ruby_version)
|
|
39
|
+
$VPATH << "$(srcdir)/ruby_private/ruby27"
|
|
40
|
+
$INCFLAGS << " -I#{File.join($srcdir, "ruby_private/ruby27")}"
|
|
41
|
+
elsif Gem::Requirement.new("~> 3.0.0").satisfied_by?(ruby_version)
|
|
42
|
+
$VPATH << "$(srcdir)/ruby_private/ruby30"
|
|
43
|
+
$INCFLAGS << " -I#{File.join($srcdir, "ruby_private/ruby30")}"
|
|
44
|
+
elsif Gem::Requirement.new("~> 3.1.0").satisfied_by?(ruby_version)
|
|
45
|
+
$VPATH << "$(srcdir)/ruby_private/ruby31"
|
|
46
|
+
$INCFLAGS << " -I#{File.join($srcdir, "ruby_private/ruby31")}"
|
|
47
|
+
else
|
|
48
|
+
raise "Not compatible with Ruby #{ruby_version}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Ask the ruby interpreter at runtime if these features are enabled or not
|
|
52
|
+
# The values detected this way will be used if they are not present in
|
|
53
|
+
# the mjit header.
|
|
54
|
+
gc_opt_keys = %w[
|
|
55
|
+
GC_DEBUG
|
|
56
|
+
USE_RGENGC
|
|
57
|
+
RGENGC_DEBUG
|
|
58
|
+
RGENGC_CHECK_MODE
|
|
59
|
+
RGENGC_PROFILE
|
|
60
|
+
RGENGC_ESTIMATE_OLDMALLOC
|
|
61
|
+
GC_PROFILE_MORE_DETAIL
|
|
62
|
+
GC_ENABLE_LAZY_SWEEP
|
|
63
|
+
CALC_EXACT_MALLOC_SIZE
|
|
64
|
+
MALLOC_ALLOCATED_SIZE
|
|
65
|
+
MALLOC_ALLOCATED_SIZE_CHECK
|
|
66
|
+
GC_PROFILE_DETAIL_MEMORY
|
|
67
|
+
]
|
|
68
|
+
gc_opt_keys.each do |key|
|
|
69
|
+
$defs << if GC::OPTS.include?(key)
|
|
70
|
+
"-D#{key}=1"
|
|
71
|
+
else
|
|
72
|
+
"-D#{key}=0"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# When including the mjit header, it needs to come _before_ ruby.h otherwise
|
|
77
|
+
# the C compiler will spew out multiple definition errors. So we pass a block
|
|
78
|
+
# to the various have_* methods to strip that out (just the first one).
|
|
79
|
+
STRIP_RUBY_INCLUDE = proc do |src|
|
|
80
|
+
src.sub(/#\s*include\s+["<]ruby\.h[">]/, "")
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Record where to find the mjit header
|
|
84
|
+
RUBY_MJIT_HEADER = "rb_mjit_min_header-#{RUBY_VERSION}.h"
|
|
85
|
+
$defs << "-DRUBY_MJIT_HEADER=\\\"#{RUBY_MJIT_HEADER}\\\""
|
|
86
|
+
have_header(RUBY_MJIT_HEADER, &STRIP_RUBY_INCLUDE) or raise "mjit header #{RUBY_MJIT_HEADER} not found"
|
|
87
|
+
|
|
88
|
+
# Whether or not we have variable-sized slots in Ruby 3.1+
|
|
89
|
+
checking_for checking_message("variable sized heap slots") do
|
|
90
|
+
variable_slots_src = <<~CLANG
|
|
91
|
+
#include <#{RUBY_MJIT_HEADER}>
|
|
92
|
+
#include <ruby.h>
|
|
93
|
+
#include <ruby/re.h>
|
|
94
|
+
#include "gc_private.h"
|
|
95
|
+
|
|
96
|
+
int s = (char *)&((struct heap_page *)0)->slot_size - (char *)0;
|
|
97
|
+
int main(int argc, char **argv) {
|
|
98
|
+
return !!argv[argc];
|
|
99
|
+
}
|
|
100
|
+
CLANG
|
|
101
|
+
if try_compile(variable_slots_src, &STRIP_RUBY_INCLUDE)
|
|
102
|
+
$defs << "-DHAVE_VARIABLE_SLOT_SIZE"
|
|
103
|
+
true
|
|
104
|
+
else
|
|
105
|
+
false
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
if have_macro("GET_RACTOR", [RUBY_MJIT_HEADER], &STRIP_RUBY_INCLUDE)
|
|
110
|
+
$defs << "-DHAVE_GET_RACTOR"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Set our cflags up _only after_ we have run all the existence checks above; otherwise
|
|
114
|
+
# stuff like -Werror can break the test programs.
|
|
115
|
+
append_cflags([
|
|
116
|
+
"-g", # Compile with debug info
|
|
117
|
+
"-D_GNU_SOURCE", "-std=gnu11", # Use GNU C extensions (e.g. we use this for atomics)
|
|
118
|
+
"-fvisibility=hidden", # Make sure our upb symbols don't clobber any others from other exts
|
|
119
|
+
"-fno-optimize-sibling-calls"
|
|
120
|
+
])
|
|
121
|
+
append_cflags(["-Wall", "-Wextra"]) # Enable all the warnings
|
|
122
|
+
# These diagnostics are not very interesting at all, just disable them.
|
|
123
|
+
append_cflags([
|
|
124
|
+
"-Wno-unused-parameter",
|
|
125
|
+
"-Wno-declaration-after-statement",
|
|
126
|
+
"-Wno-suggest-attribute=noreturn",
|
|
127
|
+
"-Wno-suggest-attribute=format"
|
|
128
|
+
])
|
|
129
|
+
|
|
130
|
+
# Compile the upb objects into our extension as well.
|
|
131
|
+
$srcs = Dir.glob(File.join($srcdir, "*.c"))
|
|
132
|
+
$srcs += [
|
|
133
|
+
"upb/decode.c",
|
|
134
|
+
"upb/encode.c",
|
|
135
|
+
"upb/msg.c",
|
|
136
|
+
"upb/table.c",
|
|
137
|
+
"upb/upb.c",
|
|
138
|
+
"third_party/utf8_range/naive.c",
|
|
139
|
+
"third_party/utf8_range/range2-neon.c",
|
|
140
|
+
"third_party/utf8_range/range2-sse.c"
|
|
141
|
+
].map { |f| File.join($srcdir, "vendor/upb", f) }
|
|
142
|
+
$VPATH << "$(srcdir)/vendor/upb/upb"
|
|
143
|
+
$VPATH << "$(srcdir)/vendor/upb/third_party/utf8_range"
|
|
144
|
+
$INCFLAGS << " -I#{File.join($srcdir, "vendor/upb")}"
|
|
145
|
+
|
|
146
|
+
# Include the vendored Backtracie header too
|
|
147
|
+
$INCFLAGS << " -I#{File.join($srcdir, 'vendor/backtracie')}"
|
|
148
|
+
|
|
149
|
+
dir_config("ruby")
|
|
150
|
+
|
|
151
|
+
create_header
|
|
152
|
+
create_makefile "ruby_memprofiler_pprof_ext"
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/* This file was generated by upbc (the upb compiler) from the input
|
|
2
|
+
* file:
|
|
3
|
+
*
|
|
4
|
+
* pprof.proto
|
|
5
|
+
*
|
|
6
|
+
* Do not edit -- your changes will be discarded when the file is
|
|
7
|
+
* regenerated. */
|
|
8
|
+
|
|
9
|
+
#include "pprof.upb.h"
|
|
10
|
+
#include "upb/msg_internal.h"
|
|
11
|
+
#include <stddef.h>
|
|
12
|
+
|
|
13
|
+
#include "upb/port_def.inc"
|
|
14
|
+
|
|
15
|
+
static const upb_MiniTable_Sub perftools_profiles_Profile_submsgs[6] = {
|
|
16
|
+
{.submsg = &perftools_profiles_ValueType_msginit}, {.submsg = &perftools_profiles_Sample_msginit},
|
|
17
|
+
{.submsg = &perftools_profiles_Mapping_msginit}, {.submsg = &perftools_profiles_Location_msginit},
|
|
18
|
+
{.submsg = &perftools_profiles_Function_msginit}, {.submsg = &perftools_profiles_ValueType_msginit},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
static const upb_MiniTable_Field perftools_profiles_Profile__fields[14] = {
|
|
22
|
+
{1, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
23
|
+
{2, UPB_SIZE(8, 16), UPB_SIZE(0, 0), 1, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
24
|
+
{3, UPB_SIZE(12, 24), UPB_SIZE(0, 0), 2, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
25
|
+
{4, UPB_SIZE(16, 32), UPB_SIZE(0, 0), 3, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
26
|
+
{5, UPB_SIZE(20, 40), UPB_SIZE(0, 0), 4, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
27
|
+
{6, UPB_SIZE(24, 48), UPB_SIZE(0, 0), kUpb_NoSub, 9,
|
|
28
|
+
kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
29
|
+
{7, UPB_SIZE(40, 72), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
30
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
31
|
+
{8, UPB_SIZE(48, 80), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
32
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
33
|
+
{9, UPB_SIZE(56, 88), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
34
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
35
|
+
{10, UPB_SIZE(64, 96), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
36
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
37
|
+
{11, UPB_SIZE(28, 56), UPB_SIZE(1, 1), 5, 11,
|
|
38
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
39
|
+
{12, UPB_SIZE(72, 104), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
40
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
41
|
+
{13, UPB_SIZE(32, 64), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
42
|
+
kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
43
|
+
{14, UPB_SIZE(80, 112), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
44
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const upb_MiniTable perftools_profiles_Profile_msginit = {
|
|
48
|
+
&perftools_profiles_Profile_submsgs[0],
|
|
49
|
+
&perftools_profiles_Profile__fields[0],
|
|
50
|
+
UPB_SIZE(88, 120),
|
|
51
|
+
14,
|
|
52
|
+
kUpb_ExtMode_NonExtendable,
|
|
53
|
+
14,
|
|
54
|
+
255,
|
|
55
|
+
0,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
static const upb_MiniTable_Field perftools_profiles_ValueType__fields[2] = {
|
|
59
|
+
{1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
60
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
61
|
+
{2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
62
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const upb_MiniTable perftools_profiles_ValueType_msginit = {
|
|
66
|
+
NULL, &perftools_profiles_ValueType__fields[0], UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
static const upb_MiniTable_Sub perftools_profiles_Sample_submsgs[1] = {
|
|
70
|
+
{.submsg = &perftools_profiles_Label_msginit},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
static const upb_MiniTable_Field perftools_profiles_Sample__fields[3] = {
|
|
74
|
+
{1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
75
|
+
kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
76
|
+
{2, UPB_SIZE(4, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
77
|
+
kUpb_FieldMode_Array | kUpb_LabelFlags_IsPacked | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
78
|
+
{3, UPB_SIZE(8, 16), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const upb_MiniTable perftools_profiles_Sample_msginit = {
|
|
82
|
+
&perftools_profiles_Sample_submsgs[0],
|
|
83
|
+
&perftools_profiles_Sample__fields[0],
|
|
84
|
+
UPB_SIZE(12, 24),
|
|
85
|
+
3,
|
|
86
|
+
kUpb_ExtMode_NonExtendable,
|
|
87
|
+
3,
|
|
88
|
+
255,
|
|
89
|
+
0,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
static const upb_MiniTable_Field perftools_profiles_Label__fields[4] = {
|
|
93
|
+
{1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
94
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
95
|
+
{2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
96
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
97
|
+
{3, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
98
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
99
|
+
{4, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
100
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const upb_MiniTable perftools_profiles_Label_msginit = {
|
|
104
|
+
NULL, &perftools_profiles_Label__fields[0], UPB_SIZE(32, 40), 4, kUpb_ExtMode_NonExtendable, 4, 255, 0,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
static const upb_MiniTable_Field perftools_profiles_Mapping__fields[10] = {
|
|
108
|
+
{1, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
109
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
110
|
+
{2, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
111
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
112
|
+
{3, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
113
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
114
|
+
{4, UPB_SIZE(32, 32), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
115
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
116
|
+
{5, UPB_SIZE(40, 40), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
117
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
118
|
+
{6, UPB_SIZE(48, 48), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
119
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
120
|
+
{7, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 8,
|
|
121
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
|
|
122
|
+
{8, UPB_SIZE(1, 1), UPB_SIZE(0, 0), kUpb_NoSub, 8,
|
|
123
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
|
|
124
|
+
{9, UPB_SIZE(2, 2), UPB_SIZE(0, 0), kUpb_NoSub, 8,
|
|
125
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
|
|
126
|
+
{10, UPB_SIZE(3, 3), UPB_SIZE(0, 0), kUpb_NoSub, 8,
|
|
127
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const upb_MiniTable perftools_profiles_Mapping_msginit = {
|
|
131
|
+
NULL, &perftools_profiles_Mapping__fields[0], UPB_SIZE(56, 56), 10, kUpb_ExtMode_NonExtendable, 10, 255, 0,
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
static const upb_MiniTable_Sub perftools_profiles_Location_submsgs[1] = {
|
|
135
|
+
{.submsg = &perftools_profiles_Line_msginit},
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
static const upb_MiniTable_Field perftools_profiles_Location__fields[5] = {
|
|
139
|
+
{1, UPB_SIZE(8, 16), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
140
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
141
|
+
{2, UPB_SIZE(16, 24), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
142
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
143
|
+
{3, UPB_SIZE(24, 32), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
144
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
145
|
+
{4, UPB_SIZE(4, 8), UPB_SIZE(0, 0), 0, 11, kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift)},
|
|
146
|
+
{5, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 8,
|
|
147
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_1Byte << kUpb_FieldRep_Shift)},
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const upb_MiniTable perftools_profiles_Location_msginit = {
|
|
151
|
+
&perftools_profiles_Location_submsgs[0],
|
|
152
|
+
&perftools_profiles_Location__fields[0],
|
|
153
|
+
UPB_SIZE(32, 40),
|
|
154
|
+
5,
|
|
155
|
+
kUpb_ExtMode_NonExtendable,
|
|
156
|
+
5,
|
|
157
|
+
255,
|
|
158
|
+
0,
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
static const upb_MiniTable_Field perftools_profiles_Line__fields[2] = {
|
|
162
|
+
{1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
163
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
164
|
+
{2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
165
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const upb_MiniTable perftools_profiles_Line_msginit = {
|
|
169
|
+
NULL, &perftools_profiles_Line__fields[0], UPB_SIZE(16, 24), 2, kUpb_ExtMode_NonExtendable, 2, 255, 0,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
static const upb_MiniTable_Field perftools_profiles_Function__fields[5] = {
|
|
173
|
+
{1, UPB_SIZE(0, 0), UPB_SIZE(0, 0), kUpb_NoSub, 4,
|
|
174
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
175
|
+
{2, UPB_SIZE(8, 8), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
176
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
177
|
+
{3, UPB_SIZE(16, 16), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
178
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
179
|
+
{4, UPB_SIZE(24, 24), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
180
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
181
|
+
{5, UPB_SIZE(32, 32), UPB_SIZE(0, 0), kUpb_NoSub, 3,
|
|
182
|
+
kUpb_FieldMode_Scalar | (kUpb_FieldRep_8Byte << kUpb_FieldRep_Shift)},
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const upb_MiniTable perftools_profiles_Function_msginit = {
|
|
186
|
+
NULL, &perftools_profiles_Function__fields[0], UPB_SIZE(40, 40), 5, kUpb_ExtMode_NonExtendable, 5, 255, 0,
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
static const upb_MiniTable *messages_layout[8] = {
|
|
190
|
+
&perftools_profiles_Profile_msginit, &perftools_profiles_ValueType_msginit, &perftools_profiles_Sample_msginit,
|
|
191
|
+
&perftools_profiles_Label_msginit, &perftools_profiles_Mapping_msginit, &perftools_profiles_Location_msginit,
|
|
192
|
+
&perftools_profiles_Line_msginit, &perftools_profiles_Function_msginit,
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const upb_MiniTable_File pprof_proto_upb_file_layout = {
|
|
196
|
+
messages_layout, NULL, NULL, 8, 0, 0,
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
#include "upb/port_undef.inc"
|