< prev index next >

src/hotspot/share/runtime/vframe.cpp

Print this page
rev 60137 : 8227745: Enable Escape Analysis for Better Performance in the Presence of JVMTI Agents
Reviewed-by: mdoerr, goetz


  65   if (f->is_interpreted_frame()) {
  66     return new interpretedVFrame(f, reg_map, thread);
  67   }
  68 
  69   // Compiled frame
  70   CodeBlob* cb = f->cb();
  71   if (cb != NULL) {
  72     if (cb->is_compiled()) {
  73       CompiledMethod* nm = (CompiledMethod*)cb;
  74       return new compiledVFrame(f, reg_map, thread, nm);
  75     }
  76 
  77     if (f->is_runtime_frame()) {
  78       // Skip this frame and try again.
  79       RegisterMap temp_map = *reg_map;
  80       frame s = f->sender(&temp_map);
  81       return new_vframe(&s, &temp_map, thread);
  82     }
  83   }
  84 





  85   // External frame
  86   return new externalVFrame(f, reg_map, thread);
  87 }
  88 
  89 vframe* vframe::sender() const {
  90   RegisterMap temp_map = *register_map();
  91   assert(is_top(), "just checking");
  92   if (_fr.is_entry_frame() && _fr.is_first_frame()) return NULL;
  93   frame s = _fr.real_sender(&temp_map);
  94   if (s.is_first_frame()) return NULL;
  95   return vframe::new_vframe(&s, &temp_map, thread());
  96 }
  97 
  98 vframe* vframe::top() const {
  99   vframe* vf = (vframe*) this;
 100   while (!vf->is_top()) vf = vf->sender();
 101   return vf;
 102 }
 103 
 104 




  65   if (f->is_interpreted_frame()) {
  66     return new interpretedVFrame(f, reg_map, thread);
  67   }
  68 
  69   // Compiled frame
  70   CodeBlob* cb = f->cb();
  71   if (cb != NULL) {
  72     if (cb->is_compiled()) {
  73       CompiledMethod* nm = (CompiledMethod*)cb;
  74       return new compiledVFrame(f, reg_map, thread, nm);
  75     }
  76 
  77     if (f->is_runtime_frame()) {
  78       // Skip this frame and try again.
  79       RegisterMap temp_map = *reg_map;
  80       frame s = f->sender(&temp_map);
  81       return new_vframe(&s, &temp_map, thread);
  82     }
  83   }
  84 
  85   // Entry frame
  86   if (f->is_entry_frame()) {
  87     return new entryVFrame(f, reg_map, thread);
  88   }
  89 
  90   // External frame
  91   return new externalVFrame(f, reg_map, thread);
  92 }
  93 
  94 vframe* vframe::sender() const {
  95   RegisterMap temp_map = *register_map();
  96   assert(is_top(), "just checking");
  97   if (_fr.is_entry_frame() && _fr.is_first_frame()) return NULL;
  98   frame s = _fr.real_sender(&temp_map);
  99   if (s.is_first_frame()) return NULL;
 100   return vframe::new_vframe(&s, &temp_map, thread());
 101 }
 102 
 103 vframe* vframe::top() const {
 104   vframe* vf = (vframe*) this;
 105   while (!vf->is_top()) vf = vf->sender();
 106   return vf;
 107 }
 108 
 109 


< prev index next >