mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-24 13:24:27 +02:00
8173715: Remove FlatProfiler
Obsoleted Xprof flag, removed FlatProfiler code Reviewed-by: dholmes, coleenp, vlivanov, pliden
This commit is contained in:
parent
1d5aeeb5f1
commit
59445a845c
43 changed files with 92 additions and 2447 deletions
|
@ -4000,11 +4000,10 @@ void os::hint_no_preempt() {}
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// suspend/resume support
|
||||
|
||||
// the low-level signal-based suspend/resume support is a remnant from the
|
||||
// The low-level signal-based suspend/resume support is a remnant from the
|
||||
// old VM-suspension that used to be for java-suspension, safepoints etc,
|
||||
// within hotspot. Now there is a single use-case for this:
|
||||
// - calling get_thread_pc() on the VMThread by the flat-profiler task
|
||||
// that runs in the watcher thread.
|
||||
// within hotspot. Currently used by JFR's OSThreadSampler
|
||||
//
|
||||
// The remaining code is greatly simplified from the more general suspension
|
||||
// code that used to be used.
|
||||
//
|
||||
|
@ -4020,6 +4019,13 @@ void os::hint_no_preempt() {}
|
|||
//
|
||||
// Note that the SR_lock plays no role in this suspend/resume protocol,
|
||||
// but is checked for NULL in SR_handler as a thread termination indicator.
|
||||
// The SR_lock is, however, used by JavaThread::java_suspend()/java_resume() APIs.
|
||||
//
|
||||
// Note that resume_clear_context() and suspend_save_context() are needed
|
||||
// by SR_handler(), so that fetch_frame_from_ucontext() works,
|
||||
// which in part is used by:
|
||||
// - Forte Analyzer: AsyncGetCallTrace()
|
||||
// - StackBanging: get_frame_at_stack_banging_point()
|
||||
|
||||
static void resume_clear_context(OSThread *osthread) {
|
||||
osthread->set_ucontext(NULL);
|
||||
|
@ -5060,44 +5066,6 @@ void os::SuspendedThreadTask::internal_do_task() {
|
|||
}
|
||||
}
|
||||
|
||||
class PcFetcher : public os::SuspendedThreadTask {
|
||||
public:
|
||||
PcFetcher(Thread* thread) : os::SuspendedThreadTask(thread) {}
|
||||
ExtendedPC result();
|
||||
protected:
|
||||
void do_task(const os::SuspendedThreadTaskContext& context);
|
||||
private:
|
||||
ExtendedPC _epc;
|
||||
};
|
||||
|
||||
ExtendedPC PcFetcher::result() {
|
||||
guarantee(is_done(), "task is not done yet.");
|
||||
return _epc;
|
||||
}
|
||||
|
||||
void PcFetcher::do_task(const os::SuspendedThreadTaskContext& context) {
|
||||
Thread* thread = context.thread();
|
||||
OSThread* osthread = thread->osthread();
|
||||
if (osthread->ucontext() != NULL) {
|
||||
_epc = os::Linux::ucontext_get_pc((const ucontext_t *) context.ucontext());
|
||||
} else {
|
||||
// NULL context is unexpected, double-check this is the VMThread
|
||||
guarantee(thread->is_VM_thread(), "can only be called for VMThread");
|
||||
}
|
||||
}
|
||||
|
||||
// Suspends the target using the signal mechanism and then grabs the PC before
|
||||
// resuming the target. Used by the flat-profiler only
|
||||
ExtendedPC os::get_thread_pc(Thread* thread) {
|
||||
// Make sure that it is called by the watcher for the VMThread
|
||||
assert(Thread::current()->is_Watcher_thread(), "Must be watcher");
|
||||
assert(thread->is_VM_thread(), "Can only be called for VMThread");
|
||||
|
||||
PcFetcher fetcher(thread);
|
||||
fetcher.run();
|
||||
return fetcher.result();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// debug support
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue