vernier 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3190b81748262d9620de74e12f6adca9b2c4126741781f9860076d96c96a123
4
- data.tar.gz: b54848781f0b17c16074fd630d0aae6b6ea206e47679713ce858e6e3f08525a5
3
+ metadata.gz: f552d6fe2d529de743412cbc9975bfbd4ac87b894777a44ce26ef07dddc8e032
4
+ data.tar.gz: b9ddcd3e4ce0acb5ac53363e041d1bd9e3a2d4c5bf21b2bbe56c48ed5fef4cdd
5
5
  SHA512:
6
- metadata.gz: de91010589471c0b4a7cfddb37bab92262392ef33da2af44930cdab848a6fd290468abe76c147485ba032d89cdac33b631937eea01bd15af8e89b03a5200e69e
7
- data.tar.gz: 82b40e4d93685ab8c560a995df31421c06ff00f8c27f33d6b37296bed96ca5b37cacda3be60e64464f535dd52d273f80d4885705f591e7246d7b3fb2269c151f
6
+ metadata.gz: 1b0808ee6ae8e64866e81e7ba8ed4847788421a00517c00e7aacb54c2fdff16287f92eb10132b5802fcb93955c3e4cf1a8fe4cfc97f4a9742a8130341bea75f7
7
+ data.tar.gz: 686a7397043be44451cccf9380473cda1e350ee342878ca2428d8bcd6c69aeea36244d15c92e3f998d4b6245c46c37d74ac3aac18ed58c783c288501d0cf7243
@@ -853,13 +853,12 @@ class Thread {
853
853
  markers->record_interval(Marker::Type::MARKER_THREAD_RUNNING, from, now);
854
854
  break;
855
855
  case State::STOPPED:
856
- // We can go from RUNNING or STARTED to STOPPED
857
- assert(state == State::RUNNING || state == State::STARTED);
856
+ // We can go from RUNNING or STARTED or SUSPENDED to STOPPED
857
+ assert(state == State::RUNNING || state == State::STARTED || state == State::SUSPENDED);
858
858
  markers->record_interval(Marker::Type::MARKER_THREAD_RUNNING, from, now);
859
859
  markers->record(Marker::Type::MARKER_GVL_THREAD_EXITED);
860
860
 
861
861
  stopped_at = now;
862
- capture_name();
863
862
 
864
863
  break;
865
864
  }
@@ -872,13 +871,6 @@ class Thread {
872
871
  return state != State::STOPPED;
873
872
  }
874
873
 
875
- void capture_name() {
876
- //char buf[128];
877
- //int rc = pthread_getname_np(pthread_id, buf, sizeof(buf));
878
- //if (rc == 0)
879
- // name = std::string(buf);
880
- }
881
-
882
874
  void mark() {
883
875
  }
884
876
  };
@@ -1082,6 +1074,12 @@ class RetainedCollector : public BaseCollector {
1082
1074
  void record(VALUE obj) {
1083
1075
  RawSample sample;
1084
1076
  sample.sample();
1077
+ if (sample.empty()) {
1078
+ // During thread allocation we allocate one object without a frame
1079
+ // (as of Ruby 3.3)
1080
+ // Ideally we'd allow empty samples to be represented
1081
+ return;
1082
+ }
1085
1083
  int stack_index = frame_list.stack_index(sample);
1086
1084
 
1087
1085
  object_list.push_back(obj);
@@ -1496,13 +1494,6 @@ class TimeCollector : public BaseCollector {
1496
1494
  rb_remove_event_hook(internal_gc_event_cb);
1497
1495
  rb_remove_event_hook(internal_thread_event_cb);
1498
1496
 
1499
- // capture thread names
1500
- for (auto& thread: this->threads.list) {
1501
- if (thread.running()) {
1502
- thread.capture_name();
1503
- }
1504
- }
1505
-
1506
1497
  frame_list.finalize();
1507
1498
 
1508
1499
  VALUE result = build_collector_result();
@@ -163,7 +163,7 @@ module Vernier
163
163
  @profile = profile
164
164
  @categorizer = categorizer
165
165
  @tid = tid
166
- @name = name
166
+ @name = pretty_name(name)
167
167
 
168
168
  timestamps ||= [0] * samples.size
169
169
  @samples, @weights, @timestamps = samples, weights, timestamps
@@ -385,6 +385,25 @@ module Vernier
385
385
 
386
386
  private
387
387
 
388
+ def pretty_name(name)
389
+ if name.empty?
390
+ begin
391
+ tr = ObjectSpace._id2ref(@ruby_thread_id)
392
+ name = tr.inspect if tr
393
+ rescue RangeError
394
+ # Thread was already GC'd
395
+ end
396
+ end
397
+ return name unless name.start_with?("#<Thread")
398
+ pretty = []
399
+ obj_address = name[/Thread:(0x\w+)/,1]
400
+ best_id = name[/\#<Thread:0x\w+@?\s?(.*)\s+\S+>/,1] || ""
401
+ Gem.path.each { |gem_dir| best_id = best_id.gsub(gem_dir, "...") }
402
+ pretty << best_id unless best_id.empty?
403
+ pretty << "(#{obj_address})"
404
+ pretty.join(' ')
405
+ end
406
+
388
407
  def gc_category
389
408
  @categorizer.get_category("GC")
390
409
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vernier
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vernier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-15 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An experimental profiler
14
14
  email: