< prev index next >

src/hotspot/share/jfr/periodic/sampling/jfrSampleRequest.cpp

Print this page

113   if (is_interpreter(request)) {
114     fp = frame_link(request);
115   }
116   request._sample_bcp = nullptr;
117   return fp;
118 }
119 
120 static bool build(JfrSampleRequest& request, intptr_t* fp, JavaThread* jt);
121 
122 static bool build_for_interpreter(JfrSampleRequest& request, JavaThread* jt) {
123   assert(is_interpreter(request), "invariant");
124   assert(jt != nullptr, "invariant");
125   if (!fp_in_stack(request, jt)) {
126     return false;
127   }
128   if (is_valid_interpreter_frame(request, jt)) {
129     // Set fp as sp for interpreter frames.
130     request._sample_sp = request._sample_bcp;
131     // Get real bcp.
132     void* const bcp = interpreter_frame_bcp(request);
133     // Setting bcp = 1 marks the sample request to represent a native method.
134     request._sample_bcp = bcp != nullptr ? bcp : reinterpret_cast<address>(1);
135     return true;
136   }
137   intptr_t* fp = sender_for_interpreter_frame(request, jt);
138   if (request._sample_pc == nullptr || request._sample_sp == nullptr) {
139     return false;
140   }
141   return build(request, fp, jt);
142 }
143 
144 // Attempt to build a Jfr sample request.
145 static bool build(JfrSampleRequest& request, intptr_t* fp, JavaThread* jt) {
146   assert(request._sample_sp != nullptr, "invariant");
147   assert(request._sample_pc != nullptr, "invariant");
148   assert(jt != nullptr, "invariant");
149   assert(jt->thread_state() == _thread_in_Java || jt->thread_state() == _thread_in_native, "invariant");
150 
151   // 1. Interpreter frame?
152   if (is_interpreter(request)) {
153     request._sample_bcp = fp;
154     return build_for_interpreter(request, jt);

113   if (is_interpreter(request)) {
114     fp = frame_link(request);
115   }
116   request._sample_bcp = nullptr;
117   return fp;
118 }
119 
120 static bool build(JfrSampleRequest& request, intptr_t* fp, JavaThread* jt);
121 
122 static bool build_for_interpreter(JfrSampleRequest& request, JavaThread* jt) {
123   assert(is_interpreter(request), "invariant");
124   assert(jt != nullptr, "invariant");
125   if (!fp_in_stack(request, jt)) {
126     return false;
127   }
128   if (is_valid_interpreter_frame(request, jt)) {
129     // Set fp as sp for interpreter frames.
130     request._sample_sp = request._sample_bcp;
131     // Get real bcp.
132     void* const bcp = interpreter_frame_bcp(request);
133     // Setting bcp == JfrSampleRequestFrameType::INTERPRETER marks the sample request to represent an interpreted native method.
134     request._sample_bcp = bcp != nullptr ? bcp : reinterpret_cast<address>(JfrSampleRequestFrameType::INTERPRETER);
135     return true;
136   }
137   intptr_t* fp = sender_for_interpreter_frame(request, jt);
138   if (request._sample_pc == nullptr || request._sample_sp == nullptr) {
139     return false;
140   }
141   return build(request, fp, jt);
142 }
143 
144 // Attempt to build a Jfr sample request.
145 static bool build(JfrSampleRequest& request, intptr_t* fp, JavaThread* jt) {
146   assert(request._sample_sp != nullptr, "invariant");
147   assert(request._sample_pc != nullptr, "invariant");
148   assert(jt != nullptr, "invariant");
149   assert(jt->thread_state() == _thread_in_Java || jt->thread_state() == _thread_in_native, "invariant");
150 
151   // 1. Interpreter frame?
152   if (is_interpreter(request)) {
153     request._sample_bcp = fp;
154     return build_for_interpreter(request, jt);
< prev index next >