@@ -67,7 +67,7 @@ static const size_t ELEMENT_SIZE = sizeof(JfrEpochQueueKlassElement);
6767static const size_t NARROW_ELEMENT_SIZE = sizeof (JfrEpochQueueNarrowKlassElement);
6868static const size_t THRESHOLD_SHIFT = 30 ;
6969
70- // If the upshifted traceid value is less than this threshold (1 073 741 824),
70+ // If the traceid value is less than this threshold (1 073 741 824),
7171// compress the element for more effective queue storage.
7272static const traceid uncompressed_threshold = ((traceid)1 ) << THRESHOLD_SHIFT ;
7373
@@ -121,30 +121,36 @@ static traceid read_element(const u1* pos, const Klass** klass, bool compressed)
121121 return compressed ? read_compressed_element (pos, klass) : read_uncompressed_element (pos, klass);
122122}
123123
124+ template <typename T>
125+ static inline void store_traceid (T* element, traceid id, bool uncompressed) {
126+ #ifdef VM_LITTLE_ENDIAN
127+ id <<= METADATA_SHIFT ;
128+ #endif
129+ element->id = uncompressed ? id | UNCOMPRESSED : id;
130+ }
131+
124132static void store_compressed_element (traceid id, const Klass* klass, u1* pos) {
133+ assert (can_compress_element (id), " invariant" );
125134 JfrEpochQueueNarrowKlassElement* const element = new (pos) JfrEpochQueueNarrowKlassElement ();
126- element-> id = id ;
135+ store_traceid ( element, id, false ) ;
127136 element->compressed_klass = encode (klass);
128137}
129138
130139static void store_uncompressed_element (traceid id, const Klass* klass, u1* pos) {
131140 JfrEpochQueueKlassElement* const element = new (pos) JfrEpochQueueKlassElement ();
132- element-> id = id | UNCOMPRESSED ;
141+ store_traceid ( element, id, true ) ;
133142 element->klass = klass;
134143}
135144
136145static void store_element (const Klass* klass, u1* pos) {
137146 assert (pos != NULL , " invariant" );
138147 assert (klass != NULL , " invariant" );
139- traceid id = JfrTraceId::load_raw (klass);
140- #ifdef VM_LITTLE_ENDIAN
141- id <<= METADATA_SHIFT ;
142- #endif
148+ const traceid id = JfrTraceId::load_raw (klass);
143149 if (can_compress_element (id)) {
144150 store_compressed_element (id, klass, pos);
145- } else {
146- store_uncompressed_element (id, klass, pos);
151+ return ;
147152 }
153+ store_uncompressed_element (id, klass, pos);
148154}
149155
150156static void set_unloaded (const u1* pos) {
0 commit comments