v8  3.14.5(node0.10.28)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
log.h
Go to the documentation of this file.
1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 #ifndef V8_LOG_H_
29 #define V8_LOG_H_
30 
31 #include "allocation.h"
32 #include "objects.h"
33 #include "platform.h"
34 #include "log-utils.h"
35 
36 namespace v8 {
37 namespace internal {
38 
39 // Logger is used for collecting logging information from V8 during
40 // execution. The result is dumped to a file.
41 //
42 // Available command line flags:
43 //
44 // --log
45 // Minimal logging (no API, code, or GC sample events), default is off.
46 //
47 // --log-all
48 // Log all events to the file, default is off. This is the same as combining
49 // --log-api, --log-code, --log-gc, and --log-regexp.
50 //
51 // --log-api
52 // Log API events to the logfile, default is off. --log-api implies --log.
53 //
54 // --log-code
55 // Log code (create, move, and delete) events to the logfile, default is off.
56 // --log-code implies --log.
57 //
58 // --log-gc
59 // Log GC heap samples after each GC that can be processed by hp2ps, default
60 // is off. --log-gc implies --log.
61 //
62 // --log-regexp
63 // Log creation and use of regular expressions, Default is off.
64 // --log-regexp implies --log.
65 //
66 // --logfile <filename>
67 // Specify the name of the logfile, default is "v8.log".
68 //
69 // --prof
70 // Collect statistical profiling information (ticks), default is off. The
71 // tick profiler requires code events, so --prof implies --log-code.
72 
73 // Forward declarations.
74 class LogMessageBuilder;
75 class Profiler;
76 class Semaphore;
77 class SlidingStateWindow;
78 class Ticker;
79 
80 #undef LOG
81 #define LOG(isolate, Call) \
82  do { \
83  v8::internal::Logger* logger = \
84  (isolate)->logger(); \
85  if (logger->is_logging()) \
86  logger->Call; \
87  } while (false)
88 
89 #define LOG_CODE_EVENT(isolate, Call) \
90  do { \
91  v8::internal::Logger* logger = \
92  (isolate)->logger(); \
93  if (logger->is_logging_code_events()) \
94  logger->Call; \
95  } while (false)
96 
97 
98 #define LOG_EVENTS_AND_TAGS_LIST(V) \
99  V(CODE_CREATION_EVENT, "code-creation") \
100  V(CODE_MOVE_EVENT, "code-move") \
101  V(CODE_DELETE_EVENT, "code-delete") \
102  V(CODE_MOVING_GC, "code-moving-gc") \
103  V(SHARED_FUNC_MOVE_EVENT, "sfi-move") \
104  V(SNAPSHOT_POSITION_EVENT, "snapshot-pos") \
105  V(SNAPSHOT_CODE_NAME_EVENT, "snapshot-code-name") \
106  V(TICK_EVENT, "tick") \
107  V(REPEAT_META_EVENT, "repeat") \
108  V(BUILTIN_TAG, "Builtin") \
109  V(CALL_DEBUG_BREAK_TAG, "CallDebugBreak") \
110  V(CALL_DEBUG_PREPARE_STEP_IN_TAG, "CallDebugPrepareStepIn") \
111  V(CALL_IC_TAG, "CallIC") \
112  V(CALL_INITIALIZE_TAG, "CallInitialize") \
113  V(CALL_MEGAMORPHIC_TAG, "CallMegamorphic") \
114  V(CALL_MISS_TAG, "CallMiss") \
115  V(CALL_NORMAL_TAG, "CallNormal") \
116  V(CALL_PRE_MONOMORPHIC_TAG, "CallPreMonomorphic") \
117  V(KEYED_CALL_DEBUG_BREAK_TAG, "KeyedCallDebugBreak") \
118  V(KEYED_CALL_DEBUG_PREPARE_STEP_IN_TAG, \
119  "KeyedCallDebugPrepareStepIn") \
120  V(KEYED_CALL_IC_TAG, "KeyedCallIC") \
121  V(KEYED_CALL_INITIALIZE_TAG, "KeyedCallInitialize") \
122  V(KEYED_CALL_MEGAMORPHIC_TAG, "KeyedCallMegamorphic") \
123  V(KEYED_CALL_MISS_TAG, "KeyedCallMiss") \
124  V(KEYED_CALL_NORMAL_TAG, "KeyedCallNormal") \
125  V(KEYED_CALL_PRE_MONOMORPHIC_TAG, "KeyedCallPreMonomorphic") \
126  V(CALLBACK_TAG, "Callback") \
127  V(EVAL_TAG, "Eval") \
128  V(FUNCTION_TAG, "Function") \
129  V(KEYED_LOAD_IC_TAG, "KeyedLoadIC") \
130  V(KEYED_LOAD_MEGAMORPHIC_IC_TAG, "KeyedLoadMegamorphicIC") \
131  V(KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG, "KeyedExternalArrayLoadIC") \
132  V(KEYED_STORE_IC_TAG, "KeyedStoreIC") \
133  V(KEYED_STORE_MEGAMORPHIC_IC_TAG, "KeyedStoreMegamorphicIC") \
134  V(KEYED_EXTERNAL_ARRAY_STORE_IC_TAG, "KeyedExternalArrayStoreIC") \
135  V(LAZY_COMPILE_TAG, "LazyCompile") \
136  V(LOAD_IC_TAG, "LoadIC") \
137  V(REG_EXP_TAG, "RegExp") \
138  V(SCRIPT_TAG, "Script") \
139  V(STORE_IC_TAG, "StoreIC") \
140  V(STUB_TAG, "Stub") \
141  V(NATIVE_FUNCTION_TAG, "Function") \
142  V(NATIVE_LAZY_COMPILE_TAG, "LazyCompile") \
143  V(NATIVE_SCRIPT_TAG, "Script")
144 // Note that 'NATIVE_' cases for functions and scripts are mapped onto
145 // original tags when writing to the log.
146 
147 
148 class Sampler;
149 
150 
151 class Logger {
152  public:
153 #define DECLARE_ENUM(enum_item, ignore) enum_item,
157  };
158 #undef DECLARE_ENUM
159 
160  // Acquires resources for logging if the right flags are set.
161  bool SetUp();
162 
163  // Sets the current code event handler.
164  void SetCodeEventHandler(uint32_t options,
165  JitCodeEventHandler event_handler);
166 
167  void EnsureTickerStarted();
168  void EnsureTickerStopped();
169 
170  Sampler* sampler();
171 
172  // Frees resources acquired in SetUp.
173  // When a temporary file is used for the log, returns its stream descriptor,
174  // leaving the file open.
175  FILE* TearDown();
176 
177  // Enable the computation of a sliding window of states.
179 
180  // Emits an event with a string value -> (name, value).
181  void StringEvent(const char* name, const char* value);
182 
183  // Emits an event with an int value -> (name, value).
184  void IntEvent(const char* name, int value);
185  void IntPtrTEvent(const char* name, intptr_t value);
186 
187  // Emits an event with an handle value -> (name, location).
188  void HandleEvent(const char* name, Object** location);
189 
190  // Emits memory management events for C allocated structures.
191  void NewEvent(const char* name, void* object, size_t size);
192  void DeleteEvent(const char* name, void* object);
193 
194  // Static versions of the above, operate on current isolate's logger.
195  // Used in TRACK_MEMORY(TypeName) defined in globals.h
196  static void NewEventStatic(const char* name, void* object, size_t size);
197  static void DeleteEventStatic(const char* name, void* object);
198 
199  // Emits an event with a tag, and some resource usage information.
200  // -> (name, tag, <rusage information>).
201  // Currently, the resource usage information is a process time stamp
202  // and a real time timestamp.
203  void ResourceEvent(const char* name, const char* tag);
204 
205  // Emits an event that an undefined property was read from an
206  // object.
207  void SuspectReadEvent(String* name, Object* obj);
208 
209  // Emits an event when a message is put on or read from a debugging queue.
210  // DebugTag lets us put a call-site specific label on the event.
211  void DebugTag(const char* call_site_tag);
212  void DebugEvent(const char* event_type, Vector<uint16_t> parameter);
213 
214 
215  // ==== Events logged by --log-api. ====
216  void ApiNamedSecurityCheck(Object* key);
217  void ApiIndexedSecurityCheck(uint32_t index);
218  void ApiNamedPropertyAccess(const char* tag, JSObject* holder, Object* name);
219  void ApiIndexedPropertyAccess(const char* tag,
220  JSObject* holder,
221  uint32_t index);
222  void ApiObjectAccess(const char* tag, JSObject* obj);
223  void ApiEntryCall(const char* name);
224 
225 
226  // ==== Events logged by --log-code. ====
227  // Emits a code event for a callback function.
228  void CallbackEvent(String* name, Address entry_point);
229  void GetterCallbackEvent(String* name, Address entry_point);
230  void SetterCallbackEvent(String* name, Address entry_point);
231  // Emits a code create event.
233  Code* code, const char* source);
235  Code* code, String* name);
237  Code* code,
238  SharedFunctionInfo* shared,
239  String* name);
241  Code* code,
242  SharedFunctionInfo* shared,
243  String* source, int line);
244  void CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count);
245  void CodeMovingGCEvent();
246  // Emits a code create event for a RegExp.
247  void RegExpCodeCreateEvent(Code* code, String* source);
248  // Emits a code move event.
249  void CodeMoveEvent(Address from, Address to);
250  // Emits a code delete event.
251  void CodeDeleteEvent(Address from);
252 
254 
255  void SnapshotPositionEvent(Address addr, int pos);
256 
257  // ==== Events logged by --log-gc. ====
258  // Heap sampling events: start, end, and individual types.
259  void HeapSampleBeginEvent(const char* space, const char* kind);
260  void HeapSampleEndEvent(const char* space, const char* kind);
261  void HeapSampleItemEvent(const char* type, int number, int bytes);
262  void HeapSampleJSConstructorEvent(const char* constructor,
263  int number, int bytes);
264  void HeapSampleJSRetainersEvent(const char* constructor,
265  const char* event);
266  void HeapSampleJSProducerEvent(const char* constructor,
267  Address* stack);
268  void HeapSampleStats(const char* space, const char* kind,
269  intptr_t capacity, intptr_t used);
270 
271  void SharedLibraryEvent(const char* library_path,
272  uintptr_t start,
273  uintptr_t end);
274  void SharedLibraryEvent(const wchar_t* library_path,
275  uintptr_t start,
276  uintptr_t end);
277 
278  // ==== Events logged by --log-regexp ====
279  // Regexp compilation and execution events.
280 
281  void RegExpCompileEvent(Handle<JSRegExp> regexp, bool in_cache);
282 
283  // Log an event reported from generated code
284  void LogRuntime(Vector<const char> format, JSArray* args);
285 
286  bool is_logging() {
287  return logging_nesting_ > 0;
288  }
289 
291  return is_logging() || code_event_handler_ != NULL;
292  }
293 
294  // Pause/Resume collection of profiling data.
295  // When data collection is paused, CPU Tick events are discarded until
296  // data collection is Resumed.
297  void PauseProfiler();
298  void ResumeProfiler();
299  bool IsProfilerPaused();
300 
303  // Logs all compiled functions found in the heap.
304  void LogCompiledFunctions();
305  // Logs all accessor callbacks found in the heap.
306  void LogAccessorCallbacks();
307  // Used for logging stubs found in the snapshot.
308  void LogCodeObjects();
309 
310  // Converts tag to a corresponding NATIVE_... if the script is native.
311  INLINE(static LogEventsAndTags ToNativeByScript(LogEventsAndTags, Script*));
312 
313  // Profiler's sampling interval (in milliseconds).
314 #if defined(ANDROID)
315  // Phones and tablets have processors that are much slower than desktop
316  // and laptop computers for which current heuristics are tuned.
317  static const int kSamplingIntervalMs = 5;
318 #else
319  static const int kSamplingIntervalMs = 1;
320 #endif
321 
322  // Callback from Log, stops profiling in case of insufficient resources.
323  void LogFailure();
324 
325  private:
326  class NameBuffer;
327  class NameMap;
328 
329  Logger();
330  ~Logger();
331 
332  // Issue code notifications.
333  void IssueCodeAddedEvent(Code* code, const char* name, size_t name_len);
334  void IssueCodeMovedEvent(Address from, Address to);
335  void IssueCodeRemovedEvent(Address from);
336 
337  // Emits the profiler's first message.
338  void ProfilerBeginEvent();
339 
340  // Emits callback event messages.
341  void CallbackEventInternal(const char* prefix,
342  const char* name,
343  Address entry_point);
344 
345  // Internal configurable move event.
346  void MoveEventInternal(LogEventsAndTags event, Address from, Address to);
347 
348  // Internal configurable move event.
349  void DeleteEventInternal(LogEventsAndTags event, Address from);
350 
351  // Emits the source code of a regexp. Used by regexp events.
352  void LogRegExpSource(Handle<JSRegExp> regexp);
353 
354  // Used for logging stubs found in the snapshot.
355  void LogCodeObject(Object* code_object);
356 
357  // Emits general information about generated code.
358  void LogCodeInfo();
359 
360  void RegisterSnapshotCodeName(Code* code, const char* name, int name_size);
361 
362  // Low-level logging support.
363 
364  void LowLevelCodeCreateEvent(Code* code, const char* name, int name_size);
365 
366  void LowLevelCodeMoveEvent(Address from, Address to);
367 
368  void LowLevelCodeDeleteEvent(Address from);
369 
370  void LowLevelSnapshotPositionEvent(Address addr, int pos);
371 
372  void LowLevelLogWriteBytes(const char* bytes, int size);
373 
374  template <typename T>
375  void LowLevelLogWriteStruct(const T& s) {
376  char tag = T::kTag;
377  LowLevelLogWriteBytes(reinterpret_cast<const char*>(&tag), sizeof(tag));
378  LowLevelLogWriteBytes(reinterpret_cast<const char*>(&s), sizeof(s));
379  }
380 
381  // Emits a profiler tick event. Used by the profiler thread.
382  void TickEvent(TickSample* sample, bool overflow);
383 
384  void ApiEvent(const char* name, ...);
385 
386  // Logs a StringEvent regardless of whether FLAG_log is true.
387  void UncheckedStringEvent(const char* name, const char* value);
388 
389  // Logs an IntEvent regardless of whether FLAG_log is true.
390  void UncheckedIntEvent(const char* name, int value);
391  void UncheckedIntPtrTEvent(const char* name, intptr_t value);
392 
393  // Returns whether profiler's sampler is active.
394  bool IsProfilerSamplerActive();
395 
396  // The sampler used by the profiler and the sliding state window.
397  Ticker* ticker_;
398 
399  // When the statistical profile is active, profiler_
400  // points to a Profiler, that handles collection
401  // of samples.
402  Profiler* profiler_;
403 
404  // SlidingStateWindow instance keeping a sliding window of the most
405  // recent VM states.
406  SlidingStateWindow* sliding_state_window_;
407 
408  // An array of log events names.
409  const char* const* log_events_;
410 
411  // Internal implementation classes with access to
412  // private members.
413  friend class EventLog;
414  friend class Isolate;
415  friend class LogMessageBuilder;
416  friend class TimeLog;
417  friend class Profiler;
418  friend class SlidingStateWindow;
419  friend class StackTracer;
420  friend class VMState;
421 
422  friend class LoggerTestHelper;
423 
424 
425  int logging_nesting_;
426  int cpu_profiler_nesting_;
427 
428  Log* log_;
429 
430  NameBuffer* name_buffer_;
431 
432  NameMap* address_to_name_map_;
433 
434  // Guards against multiple calls to TearDown() that can happen in some tests.
435  // 'true' between SetUp() and TearDown().
436  bool is_initialized_;
437 
438  // The code event handler - if any.
439  JitCodeEventHandler code_event_handler_;
440 
441  // Support for 'incremental addresses' in compressed logs:
442  // LogMessageBuilder::AppendAddress(Address addr)
443  Address last_address_;
444  // Logger::TickEvent(...)
445  Address prev_sp_;
446  Address prev_function_;
447  // Logger::MoveEventInternal(...)
448  Address prev_to_;
449  // Logger::FunctionCreateEvent(...)
450  Address prev_code_;
451 
452  friend class CpuProfiler;
453 };
454 
455 
456 // Process wide registry of samplers.
457 class SamplerRegistry : public AllStatic {
458  public:
459  enum State {
462  HAS_CPU_PROFILING_SAMPLERS
463  };
464 
465  static void SetUp();
466 
467  typedef void (*VisitSampler)(Sampler*, void*);
468 
469  static State GetState();
470 
471  // Iterates over all active samplers keeping the internal lock held.
472  // Returns whether there are any active samplers.
473  static bool IterateActiveSamplers(VisitSampler func, void* param);
474 
475  // Adds/Removes an active sampler.
476  static void AddActiveSampler(Sampler* sampler);
477  static void RemoveActiveSampler(Sampler* sampler);
478 
479  private:
480  static bool ActiveSamplersExist() {
481  return active_samplers_ != NULL && !active_samplers_->is_empty();
482  }
483 
484  static List<Sampler*>* active_samplers_;
485 
487 };
488 
489 
490 // Class that extracts stack trace, used for profiling.
491 class StackTracer : public AllStatic {
492  public:
493  static void Trace(Isolate* isolate, TickSample* sample);
494 };
495 
496 } } // namespace v8::internal
497 
498 
499 #endif // V8_LOG_H_
byte * Address
Definition: globals.h:157
void LogRuntime(Vector< const char > format, JSArray *args)
Definition: log.cc:759
void PauseProfiler()
Definition: log.cc:1349
static void NewEventStatic(const char *name, void *object, size_t size)
Definition: log.cc:864
void RegExpCodeCreateEvent(Code *code, String *source)
Definition: log.cc:1124
void CodeMoveEvent(Address from, Address to)
Definition: log.cc:1156
void GetterCallbackEvent(String *name, Address entry_point)
Definition: log.cc:895
void SetterCallbackEvent(String *name, Address entry_point)
Definition: log.cc:903
static void DeleteEventStatic(const char *name, void *object)
Definition: log.cc:869
bool is_logging()
Definition: log.h:286
void EnsureTickerStopped()
Definition: log.cc:1775
Sampler * sampler()
Definition: log.cc:1764
bool is_logging_code_events()
Definition: log.h:290
void LogCompiledFunctions()
Definition: log.cc:1655
void CodeDeleteEvent(Address from)
Definition: log.cc:1167
TickSample * sample
void IntPtrTEvent(const char *name, intptr_t value)
Definition: log.cc:624
void EnsureTickerStarted()
Definition: log.cc:1769
void ResumeProfiler()
Definition: log.cc:1368
void ApiNamedSecurityCheck(Object *key)
Definition: log.cc:667
void HandleEvent(const char *name, Object **location)
Definition: log.cc:645
friend class EventLog
Definition: log.h:413
void ApiIndexedSecurityCheck(uint32_t index)
Definition: log.cc:803
void LogFailure()
Definition: log.cc:1391
void SnapshotPositionEvent(Address addr, int pos)
Definition: log.cc:1178
void HeapSampleJSProducerEvent(const char *constructor, Address *stack)
friend class LoggerTestHelper
Definition: log.h:422
void HeapSampleBeginEvent(const char *space, const char *kind)
Definition: log.cc:1265
void LogExistingFunction(Handle< SharedFunctionInfo > shared, Handle< Code > code)
Definition: log.cc:1610
#define DECLARE_ENUM(enum_item, ignore)
Definition: log.h:153
void DebugEvent(const char *event_type, Vector< uint16_t > parameter)
Definition: log.cc:1300
FILE * TearDown()
Definition: log.cc:1780
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName)
Definition: globals.h:318
void RegExpCompileEvent(Handle< JSRegExp > regexp, bool in_cache)
Definition: log.cc:749
void HeapSampleStats(const char *space, const char *kind, intptr_t capacity, intptr_t used)
INLINE(static LogEventsAndTags ToNativeByScript(LogEventsAndTags, Script *))
void EnableSlidingStateWindow()
Definition: log.cc:1801
void ApiNamedPropertyAccess(const char *tag, JSObject *holder, Object *name)
Definition: log.cc:809
void LogCodeObjects()
Definition: log.cc:1599
#define T(name, string, precedence)
Definition: token.cc:48
void ApiIndexedPropertyAccess(const char *tag, JSObject *holder, uint32_t index)
Definition: log.cc:822
void SharedLibraryEvent(const char *library_path, uintptr_t start, uintptr_t end)
Definition: log.cc:681
void ApiEntryCall(const char *name)
Definition: log.cc:841
void(* JitCodeEventHandler)(const JitCodeEvent *event)
Definition: v8.h:3017
void HeapSampleEndEvent(const char *space, const char *kind)
Definition: log.cc:1276
void HeapSampleJSConstructorEvent(const char *constructor, int number, int bytes)
void CallbackEvent(String *name, Address entry_point)
Definition: log.cc:887
void HeapSampleItemEvent(const char *type, int number, int bytes)
Definition: log.cc:1284
void DeleteEvent(const char *name, void *object)
Definition: log.cc:856
void ApiObjectAccess(const char *tag, JSObject *obj)
Definition: log.cc:832
friend class VMState
Definition: log.h:420
static const int kSamplingIntervalMs
Definition: log.h:319
void CodeMovingGCEvent()
Definition: log.cc:1117
void HeapSampleJSRetainersEvent(const char *constructor, const char *event)
friend class TimeLog
Definition: log.h:416
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of MIPS FPU instructions if NULL
Definition: flags.cc:301
void SharedFunctionInfoMoveEvent(Address from, Address to)
Definition: log.cc:1203
void IntEvent(const char *name, int value)
Definition: log.cc:619
void LogAccessorCallbacks()
Definition: log.cc:1675
bool IsProfilerPaused()
Definition: log.cc:1344
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
friend class LogMessageBuilder
Definition: log.h:415
void CodeCreateEvent(LogEventsAndTags tag, Code *code, const char *source)
Definition: log.cc:911
void DebugTag(const char *call_site_tag)
Definition: log.cc:1292
void ResourceEvent(const char *name, const char *tag)
Definition: log.cc:1232
void NewEvent(const char *name, void *object, size_t size)
Definition: log.cc:847
void SuspectReadEvent(String *name, Object *obj)
Definition: log.cc:1248
#define LOG_EVENTS_AND_TAGS_LIST(V)
Definition: log.h:98
void StringEvent(const char *name, const char *value)
Definition: log.cc:606
void SetCodeEventHandler(uint32_t options, JitCodeEventHandler event_handler)
Definition: log.cc:1752