changeset 9152:150ab470bf7f

8205516: JFR tool Reviewed-by: mgronlun
author egahlin
date Wed, 05 Dec 2018 16:40:12 +0100
parents 41515291559a
children 69fb91513217
files src/share/vm/jfr/leakprofiler/emitEventOperation.cpp src/share/vm/jfr/leakprofiler/sampling/objectSampler.cpp src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp src/share/vm/jfr/leakprofiler/sampling/sampleList.cpp src/share/vm/jfr/leakprofiler/sampling/sampleList.hpp
diffstat 5 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/jfr/leakprofiler/emitEventOperation.cpp	Tue Aug 28 10:10:11 2018 -0400
+++ b/src/share/vm/jfr/leakprofiler/emitEventOperation.cpp	Wed Dec 05 16:40:12 2018 +0100
@@ -157,12 +157,14 @@
   const jlong last_sweep = _emit_all ? max_jlong : _object_sampler->last_sweep().value();
   int count = 0;
 
-  for (int i = 0; i < _object_sampler->item_count(); ++i) {
-    const ObjectSample* sample = _object_sampler->item_at(i);
-    if (sample->is_alive_and_older_than(last_sweep)) {
-      write_event(sample, edge_store);
+  const ObjectSample* current = _object_sampler->first();
+  while (current != NULL) {
+    ObjectSample* prev = current->prev();
+    if (current->is_alive_and_older_than(last_sweep)) {
+      write_event(current, edge_store);
       ++count;
     }
+    current = prev;
   }
 
   // restore thread local stack trace and thread id
--- a/src/share/vm/jfr/leakprofiler/sampling/objectSampler.cpp	Tue Aug 28 10:10:11 2018 -0400
+++ b/src/share/vm/jfr/leakprofiler/sampling/objectSampler.cpp	Wed Dec 05 16:40:12 2018 +0100
@@ -121,6 +121,10 @@
   return _list->last();
 }
 
+const ObjectSample* ObjectSampler::first() const {
+  return _list->first();
+}
+
 const ObjectSample* ObjectSampler::last_resolved() const {
   return _list->last_resolved();
 }
--- a/src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp	Tue Aug 28 10:10:11 2018 -0400
+++ b/src/share/vm/jfr/leakprofiler/sampling/objectSampler.hpp	Wed Dec 05 16:40:12 2018 +0100
@@ -69,6 +69,7 @@
   const ObjectSample* item_at(int index) const;
   ObjectSample* item_at(int index);
   int item_count() const;
+  const ObjectSample* first() const;
   const ObjectSample* last() const;
   const ObjectSample* last_resolved() const;
   void set_last_resolved(const ObjectSample* sample);
--- a/src/share/vm/jfr/leakprofiler/sampling/sampleList.cpp	Tue Aug 28 10:10:11 2018 -0400
+++ b/src/share/vm/jfr/leakprofiler/sampling/sampleList.cpp	Wed Dec 05 16:40:12 2018 +0100
@@ -45,6 +45,10 @@
   return _in_use_list.head();
 }
 
+ObjectSample* SampleList::first() const {
+  return _in_use_list.tail();
+}
+
 const ObjectSample* SampleList::last_resolved() const {
   return _last_resolved;
 }
--- a/src/share/vm/jfr/leakprofiler/sampling/sampleList.hpp	Tue Aug 28 10:10:11 2018 -0400
+++ b/src/share/vm/jfr/leakprofiler/sampling/sampleList.hpp	Wed Dec 05 16:40:12 2018 +0100
@@ -53,6 +53,7 @@
   void set_last_resolved(const ObjectSample* sample);
   ObjectSample* get();
   ObjectSample* last() const;
+  ObjectSample* first() const;
   void release(ObjectSample* sample);
   const ObjectSample* last_resolved() const;
   ObjectSample* reuse(ObjectSample* sample);