268 |
268 |
269 static void allocate_traceid_working_set() { |
269 static void allocate_traceid_working_set() { |
270 id_set = new GrowableArray<traceid>(JfrOptionSet::old_object_queue_size()); |
270 id_set = new GrowableArray<traceid>(JfrOptionSet::old_object_queue_size()); |
271 } |
271 } |
272 |
272 |
273 static void resolve_stack_traces(ObjectSampler* sampler, JfrStackTraceRepository& stack_trace_repo) { |
273 static void resolve_stack_traces(const ObjectSampler* sampler, JfrStackTraceRepository& stack_trace_repo) { |
274 assert(sampler != NULL, "invariant"); |
274 assert(sampler != NULL, "invariant"); |
275 const ObjectSample* const last = sampler->last(); |
275 const ObjectSample* const last = sampler->last(); |
276 if (last != sampler->last_resolved()) { |
276 if (last != sampler->last_resolved()) { |
277 allocate_traceid_working_set(); |
277 allocate_traceid_working_set(); |
278 StackTraceBlobInstaller installer(stack_trace_repo); |
278 StackTraceBlobInstaller installer(stack_trace_repo); |
279 iterate_samples(installer); |
279 iterate_samples(installer); |
280 } |
280 } |
281 } |
281 } |
282 |
282 |
283 // caller needs ResourceMark |
283 // caller needs ResourceMark |
284 void ObjectSampleCheckpoint::on_rotation(ObjectSampler* sampler, JfrStackTraceRepository& stack_trace_repo) { |
284 void ObjectSampleCheckpoint::on_rotation(const ObjectSampler* sampler, JfrStackTraceRepository& stack_trace_repo) { |
285 assert(sampler != NULL, "invariant"); |
285 assert(sampler != NULL, "invariant"); |
286 assert(LeakProfiler::is_running(), "invariant"); |
286 assert(LeakProfiler::is_running(), "invariant"); |
287 resolve_stack_traces(sampler, stack_trace_repo); |
287 resolve_stack_traces(sampler, stack_trace_repo); |
288 } |
288 } |
289 |
289 |
385 // reset blob write states |
385 // reset blob write states |
386 cbw.set_reset(); |
386 cbw.set_reset(); |
387 iterate_samples(cbw, true); |
387 iterate_samples(cbw, true); |
388 } |
388 } |
389 |
389 |
390 void ObjectSampleCheckpoint::write(ObjectSampler* sampler, EdgeStore* edge_store, bool emit_all, Thread* thread) { |
390 void ObjectSampleCheckpoint::write(const ObjectSampler* sampler, EdgeStore* edge_store, bool emit_all, Thread* thread) { |
391 assert(sampler != NULL, "invariant"); |
391 assert(sampler != NULL, "invariant"); |
392 assert(edge_store != NULL, "invariant"); |
392 assert(edge_store != NULL, "invariant"); |
393 assert(thread != NULL, "invariant"); |
393 assert(thread != NULL, "invariant"); |
394 write_sample_blobs(sampler, emit_all, thread); |
394 write_sample_blobs(sampler, emit_all, thread); |
395 // write reference chains |
395 // write reference chains |