summaryrefslogtreecommitdiff
path: root/test/objspace
Commit message (Collapse)AuthorAgeFilesLines
* [Feature #18239] Implement VWA for stringsPeter Zhu2021-10-251-2/+2
| | | | | This commit adds support for embedded strings with variable capacity and uses Variable Width Allocation to allocate strings.
* test/objspace/test_objspace.rb: check stderr before stdoutYusuke Endoh2021-05-141-1/+1
| | | | | | | | | | | When `require "objspace/trace"` fails, previously the failure says: ``` 1) Failure: TestObjSpace#test_objspace_trace [/tmp/ruby/v3/src/trunk-mjit/test/objspace/test_objspace.rb:621]: <3> expected but was <0>. ``` but this is hard to debug.
* ext/objspace/lib/objspace/trace.rb: AddedYusuke Endoh2021-05-141-0/+16
| | | | | | | | | This file, when require'ed, starts tracing the object allocations, and redefines `Kernel#p` to show the allocation site. This commit is experimental; the library name and APIs may change. [Feature #17762]
* * remove trailing spaces. [ci skip]git2021-05-121-1/+1
|
* Use another class for the comparison.Koichi Sasada2021-05-121-3/+2
| | | | | | | `memsize_of(Object.new)` can be changed with past ivar creation history for Object instances (another Object instance has 4 or more ivars, next created Object instance has the area for the ivars). So use antoher class for the comparison.
* skip test for debug.Koichi Sasada2021-05-121-0/+2
| | | | | | | | test_memsize_of_iseq fails on repeat tests and it seems to difficult to solve immediately. Now this test is skipped. It seems that the result of `memsize_of(Object.new)` are increased. Why...?
* Fix some typos by spell checkerRyuta Kamizono2021-04-261-1/+1
|
* Use EnvUtil.under_gc_stressNobuyoshi Nakada2021-03-311-9/+5
|
* skip marking for uninitialized imemo_env.Koichi Sasada2021-03-311-0/+13
| | | | | | | | | | RUBY_INTERNAL_EVENT_NEWOBJ can expose uninitialized imemo_env objects and marking it will cause critical error. This patch skips marking on uninitialized imemo_env. See: http://rubyci.s3.amazonaws.com/centos7/ruby-master/log/20210329T183003Z.fail.html.gz Shortest repro-code is provided by mame-san.
* objspace_dump.c: tag singleton classes and reference the superclassJean Boussier2021-02-041-0/+15
|
* Implement NameError::message#clone for RactorNobuyoshi Nakada2021-02-011-0/+9
|
* Fix ObjectSpace.dump(obj, output: :stdout)Kazuhiro NISHIYAMA2020-10-031-7/+14
| | | | | | | RDoc says `ObjectSpace.dump(obj, output: :stdout) # => nil`, but it returns STDOUT since fbba6bd4e3dff7a61965208fecae908f10c4edbe. I think it is unintentional change.
* Return nil when argument to ObjectSpace.internal_class_of is T_IMEMOAlan Wu2020-09-251-0/+5
| | | | | | | The added test case crashes the interpreter because it makes ObjectSpace.internal_class_of return the second VALUE slot of an AST imemo object. The second VALUE slot of `struct rb_ast_struct` is not a VALUE and not a pointer to a Ruby object.
* Optimize ObjectSpace.dump_allJean Boussier2020-09-091-0/+6
| | | | | | | | | | | | | | | | | | The two main optimization are: - buffer writes for improved performance - avoid formatting functions when possible ``` | |compare-ruby|built-ruby| |:------------------|-----------:|---------:| |dump_all_string | 1.038| 195.925| | | -| 188.77x| |dump_all_file | 33.453| 139.645| | | -| 4.17x| |dump_all_dev_null | 44.030| 278.552| | | -| 6.33x| ```
* Add a :since option to dump_allJean Boussier2020-09-091-0/+23
| | | | | | | | | | | | | | | | | This is useful to see what a block of code allocated, e.g. ``` GC.start GC.disable ObjectSpace.trace_object_allocations do # run some code end gc_gen = GC.count allocations = ObjectSpace.dump_all(output: :file, since: gc_gen) GC.enable GC.start retentions = ObjectSpace.dump_all(output: :file, since: gc_gen) ```
* Fix ObjectSpace.trace_object_allocations_stop to not raise if the tracepoint ↵Jean Boussier2020-08-191-0/+9
| | | | were not initialized
* Reset object allocation trace informationAaron Patterson2020-08-181-0/+1
| | | | | Compaction makes collisions in the weak map more likely. For now, clear the tracing information before the test run so we get accurate results
* Update references when tracing allocationsAaron Patterson2020-08-181-1/+1
| | | | | | | | | | The allocation tracing code keeps essentially a weak reference to objects that have been allocated (storing the allocation information along with the weak ref). Compacting the heap would break references in this weak map, so the wrong values could be returned. This commit just updates the values in the weak ref in order to fix the allocation tracing book keeping
* Disable debugging test.Koichi Sasada2020-08-181-1/+1
| | | | | | | | | | | ``` 1) Failure: TestObjSpace#test_trace_object_allocations [/tmp/ruby/v3/src/trunk-gc_compact/test/objspace/test_objspace.rb:175]: <nil> expected but was <"/tmp/ruby/v3/src/trunk-gc_compact/test/objspace/test_objspace.rb">. ``` @tenderlove will re-enable it soon.
* Fix method name escaping in ObjectSpace.dumpJohn Hawthorn2020-08-171-0/+18
| | | | | | | | It's possible to define methods with any name, even if the parser doesn't support it and it can only be used with ex. send. This fixes an issue where invalid JSON was output from ObjectSpace.dump when a method name needed escaping.
* Also escape DEL codeNobuyoshi Nakada2020-08-171-0/+1
|
* Fixed the radix for control charsNobuyoshi Nakada2020-08-171-0/+4
|
* Removed fragile tests in https://github.com/ruby/ruby/pull/3349Nobuyoshi Nakada2020-07-231-22/+0
|
* Avoid allocating a string when dumping an anonymous module or classJean Boussier2020-07-231-0/+27
|
* Suppress unused variable warningsNobuyoshi Nakada2019-06-301-1/+1
|
* Suppress unused variable warning with RUBYOPT=-wNobuyoshi Nakada2019-06-281-1/+1
|
* O_EXCL has no meaning for fdopenNobuyoshi Nakada2019-06-281-3/+3
| | | | | "exclusive access mode is not supported" exception has resulted in empty "rubyheap-*.json" files after test/objspace/test_objspace.rb.
* Disable frozen-string-literal to disable deduplicationNobuyoshi Nakada2019-06-231-2/+4
| | | | [Bug #14194]
* Ignore warnings about ambiguous first argument of regexp with assert match.Hiroshi SHIBATA2019-06-011-10/+10
|
* fix imemo entry description.ko12019-02-131-0/+2
| | | | | | | | | * ext/objspace/objspace.c (count_imemo_objects): `imemo_type_ids` should be match with `enum imemo_type` in internal.h and this patch fix mismatch. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/objspace/objspace_dump.c: print addresses consistentlynobu2018-10-091-0/+56
| | | | | | | | | | | | | The format addresses are printed in are different if you use `ObjectSpace.dump_all(output: :stdout)` vs. `ObjectSpace.dump_all(output: :string)` (or `ObjectSpace.dump`) due to differences in the underlying `vfprintf` implementation. Use `"%#"PRIxVALUE` to format `VALUE`. Co-authored-by: Ashe Connor <ashe@kivikakk.ee> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Revert "ext/objspace/objspace_dump.c: print addresses consistently"naruse2018-10-091-56/+0
| | | | | | | | | | | This reverts commit r64970. Visual C++ 12.0 doesn't have PRIxPTR. Anyway we have our own vfprintf implementation BSD_vfprintf(). If you want to have portable vfprintf, replace it with BSD_vfprintf like vsnprintf or just use BSD_vfprintf. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64972 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/objspace/objspace_dump.c: print addresses consistentlytenderlove2018-10-081-0/+56
| | | | | | | | | | | | | The format addresses are printed in are different if you use `ObjectSpace.dump_all(output: :stdout)` vs. `ObjectSpace.dump_all(output: :string)` (or `ObjectSpace.dump`) due to differences in the underlying `vfprintf` implementation. Use %"PRIxPTR" instead to be consistent across both. Co-authored-by: Ashe Connor <ashe@kivikakk.ee> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* io.c: encoding of ARGF.inplace_modenobu2017-10-101-1/+1
| | | | | | | * io.c (argf_next_argv): encode inplace mode suffix to the path encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/objspace/objspace.c: remove unneeded code clones.mame2017-09-171-0/+10
| | | | | | `setup_hash` have already performed nil check and empty check. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix mortal_dynamic_symbol countnobu2017-06-221-5/+10
| | | | | | | | * test/objspace/test_objspace.rb (test_count_symbols): exclude a dynamic symbol which has been turned into immortal by define_method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* try to fix symbol duplication.ko12017-06-221-1/+1
| | | | | | | | | | * test/objspace/test_objspace.rb (test_count_symbols): make more complex dynamic symbols to avoid conflict with other existing static symbols. Sometimes this test fails with "mortal_dynamic_symbol=>127". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add IMEMO type to heap dump output.tenderlove2017-01-311-0/+17
| | | | | | | | | IMEMO objects have many types. Without this change, we cannot see what types of IMEMO objects are being used when dumping the heap. Adding the type to the IMEMO object will allow us to gather statistics about IMEMO objects being used. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57486 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* adjust indent [ci skip]nobu2017-01-041-57/+62
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add `full` option to `ObjectSpace.dump_all`tenderlove2017-01-031-0/+13
| | | | | | | | | | | | | | | | | | | The `full` option includes all slots (even `T_NONE`) in the JSON output. This is to help with debugging heap fragmentation. Here is an example usage: ```ruby File.open('heap.json', 'w') do |f| ObjectSpace.dump_all(output: f, full: true) end ``` The `heap.json` file contains all slots, including empty slots. [Feature #13001] [ruby-core:78468] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Use JSON lines format for full heap dumps.tenderlove2016-09-161-1/+1
| | | | | | | | This commit changes full heap dumps back to using JSON lines format (http://jsonlines.org) so that we can process very large heaps without loading the entire heap in to memory at once. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* dump to stdoutnobu2016-06-121-2/+9
| | | | | | | * test/objspace/test_objspace.rb (test_dump_all): dump to stdout instead of a string, get rid of hung up. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ObjectSpace.dump_all: valid JSONnobu2016-06-111-0/+13
| | | | | | * ext/objspace/objspace_dump.c: generate valid JSON for dump_all. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Add frozen_string_literal: false for all filesnaruse2015-12-161-0/+1
| | | | | | When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* objspace_dump.c: special constnobu2015-10-191-5/+11
| | | | | | * ext/objspace/objspace_dump.c: support special constant objects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52191 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* fix typos [ci skip]kazu2015-10-151-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52133 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * test/objspace/test_objspace.rbnagachika2015-10-141-0/+4
| | | | | | | | (test_trace_object_allocations_start_stop_clear): clear object allocation table first to get rid of erronous detection for obj3. [ruby-dev:49095] [Bug #11271] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * ext/objspace/objspace.c: add a new method ObjectSpace.count_symbols.ko12015-08-211-0/+11
| | | | | | | | | | | | [Feature #11158] * symbol.c (rb_sym_immortal_count): added to count immortal symbols. * symbol.h: ditto. * test/objspace/test_objspace.rb: add a test for this method. * NEWS: describe about this method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* iseq.c (iseq_memsize): reimplement for wrappernormal2015-08-121-0/+6
| | | | | | | | | | | | | | | | | | * iseq.c (iseq_memsize): reimplement for wrapper (param_keyword_size): extracted from iseq_memsize (iseqw_mark): new mark function (iseqw_data_type): new data type (iseqw_new): wrap as iseqw_data_type (iseqw_check): adjust for wrapper (Init_ISeq): remove iseqw_iseq_key initialization * test/objspace/test_objspace.rb: new test [ruby-core:70344] [Feature #11435] v2 changes: - added RUBY_TYPED_WB_PROTECTED and write barrier - account for rb_call_info_kw_arg_t entries git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51547 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * ext/objspace/objspace_dump.c(dump_object): Return empty JSON object whensorah2015-06-201-0/+9
| | | | | | | | | passed object is a special const, instead of SEGV. Based patch by Kohei Suzuki (eagletmt). [ruby-core:69692] [Bug #11291] * test/objspace/test_objspace.rb(test_dump_special_consts): Test for above fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e