V8 Project
vTune::internal::VTUNEJITInterface Class Reference

#include <vtune-jit.h>

+ Collaboration diagram for vTune::internal::VTUNEJITInterface:

Static Public Member Functions

static void event_handler (const v8::JitCodeEvent *event)
 

Detailed Description

Definition at line 69 of file vtune-jit.h.

Member Function Documentation

◆ event_handler()

void vTune::internal::VTUNEJITInterface::event_handler ( const v8::JitCodeEvent event)
static

Definition at line 180 of file vtune-jit.cc.

180  {
181  if (VTUNERUNNING && event != NULL) {
182  switch (event->type) {
184  char* temp_file_name = NULL;
185  char* temp_method_name =
187  static_cast<int>(event->name.len));
188  iJIT_Method_Load jmethod;
189  memset(&jmethod, 0, sizeof jmethod);
190  jmethod.method_id = iJIT_GetNewMethodID();
191  jmethod.method_load_address = event->code_start;
192  jmethod.method_size = static_cast<unsigned int>(event->code_len);
193  jmethod.method_name = temp_method_name;
194 
195  Handle<UnboundScript> script = event->script;
196 
197  if (*script != NULL) {
198  // Get the source file name and set it to jmethod.source_file_name
199  if ((*script->GetScriptName())->IsString()) {
200  Handle<String> script_name = script->GetScriptName()->ToString();
201  temp_file_name = new char[script_name->Utf8Length() + 1];
202  script_name->WriteUtf8(temp_file_name);
203  jmethod.source_file_name = temp_file_name;
204  }
205 
206  JitInfoMap::iterator entry =
207  GetEntries()->find(event->code_start);
208  if (entry != GetEntries()->end() && IsLineInfoTagged(entry->first)) {
209  JITCodeLineInfo* line_info = UntagLineInfo(entry->second);
210  // Get the line_num_info and set it to jmethod.line_number_table
211  std::list<JITCodeLineInfo::LineNumInfo>* vtunelineinfo =
212  line_info->GetLineNumInfo();
213 
214  jmethod.line_number_size = (unsigned int)vtunelineinfo->size();
215  jmethod.line_number_table =
216  reinterpret_cast<LineNumberInfo*>(
217  malloc(sizeof(LineNumberInfo)*jmethod.line_number_size));
218 
219  std::list<JITCodeLineInfo::LineNumInfo>::iterator Iter;
220  int index = 0;
221  for (Iter = vtunelineinfo->begin();
222  Iter != vtunelineinfo->end();
223  Iter++) {
224  jmethod.line_number_table[index].Offset =
225  static_cast<unsigned int>(Iter->pc_);
226  jmethod.line_number_table[index++].LineNumber =
227  script->GetLineNumber(Iter->pos_) + 1;
228  }
229  GetEntries()->erase(event->code_start);
230  }
231  }
232 
234  reinterpret_cast<void*>(&jmethod));
235  if (temp_method_name)
236  delete []temp_method_name;
237  if (temp_file_name)
238  delete []temp_file_name;
239  break;
240  }
241  // TODO(chunyang.dai@intel.com): code_move will be supported.
243  break;
244  // Currently the CODE_REMOVED event is not issued.
246  break;
248  JITCodeLineInfo* line_info =
249  reinterpret_cast<JITCodeLineInfo*>(event->user_data);
250  if (line_info != NULL) {
251  line_info->SetPosition(static_cast<intptr_t>(event->line_info.offset),
252  static_cast<int>(event->line_info.pos));
253  }
254  break;
255  }
257  v8::JitCodeEvent* temp_event = const_cast<v8::JitCodeEvent*>(event);
258  temp_event->user_data = new JITCodeLineInfo();
259  break;
260  }
262  GetEntries()->insert(std::pair <void*, void*>(event->code_start, event->user_data));
263  break;
264  }
265  default:
266  break;
267  }
268  }
269  return;
270 }
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
ITT_EXTERN_C int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData)
ITT_EXTERN_C unsigned int JITAPI iJIT_GetNewMethodID()
@ iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED
Definition: jitprofiling.h:82
static JitInfoMap * GetEntries()
Definition: vtune-jit.cc:135
static char * GetFunctionNameFromMixedName(const char *str, int length)
Definition: vtune-jit.cc:156
static JITCodeLineInfo * UntagLineInfo(void *ptr)
Definition: vtune-jit.cc:147
static bool IsLineInfoTagged(void *ptr)
Definition: vtune-jit.cc:143
unsigned int Offset
Definition: jitprofiling.h:207
unsigned int LineNumber
Definition: jitprofiling.h:210
unsigned int line_number_size
Definition: jitprofiling.h:233
unsigned int method_id
Definition: jitprofiling.h:217
pLineNumberInfo line_number_table
Definition: jitprofiling.h:236
unsigned int method_size
Definition: jitprofiling.h:230
void * method_load_address
Definition: jitprofiling.h:227
const char * str
Definition: v8.h:4304
A JIT code event is issued each time code is added, moved or removed.
Definition: v8.h:4271
struct name_t name
Definition: v8.h:4320
struct line_info_t line_info
Definition: v8.h:4323
void * user_data
Definition: v8.h:4299
@ CODE_END_LINE_INFO_RECORDING
Definition: v8.h:4278
@ CODE_ADD_LINE_POS_INFO
Definition: v8.h:4276
@ CODE_REMOVED
Definition: v8.h:4275
@ CODE_START_LINE_INFO_RECORDING
Definition: v8.h:4277
EventType type
Definition: v8.h:4288
void * code_start
Definition: v8.h:4290
#define VTUNERUNNING
Definition: vtune-jit.h:64

References v8::JitCodeEvent::CODE_ADD_LINE_POS_INFO, v8::JitCodeEvent::CODE_ADDED, v8::JitCodeEvent::CODE_END_LINE_INFO_RECORDING, v8::JitCodeEvent::CODE_MOVED, v8::JitCodeEvent::CODE_REMOVED, v8::JitCodeEvent::code_start, v8::JitCodeEvent::CODE_START_LINE_INFO_RECORDING, vTune::internal::GetEntries(), vTune::internal::GetFunctionNameFromMixedName(), vTune::internal::JITCodeLineInfo::GetLineNumInfo(), iJIT_GetNewMethodID(), iJIT_NotifyEvent(), iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, vTune::internal::IsLineInfoTagged(), v8::JitCodeEvent::name_t::len, v8::JitCodeEvent::line_info, _iJIT_Method_Load::line_number_size, _iJIT_Method_Load::line_number_table, _LineNumberInfo::LineNumber, _iJIT_Method_Load::method_id, _iJIT_Method_Load::method_load_address, _iJIT_Method_Load::method_name, _iJIT_Method_Load::method_size, v8::JitCodeEvent::name, NULL, v8::JitCodeEvent::line_info_t::offset, _LineNumberInfo::Offset, vTune::internal::JITCodeLineInfo::SetPosition(), _iJIT_Method_Load::source_file_name, v8::JitCodeEvent::name_t::str, v8::JitCodeEvent::type, vTune::internal::UntagLineInfo(), v8::JitCodeEvent::user_data, and VTUNERUNNING.

Referenced by vTune::InitializeVtuneForV8().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

The documentation for this class was generated from the following files: