v8  3.11.10(node0.8.26)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
d8.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_D8_H_
29 #define V8_D8_H_
30 
31 #ifndef V8_SHARED
32 #include "allocation.h"
33 #include "hashmap.h"
34 #include "smart-array-pointer.h"
35 #include "v8.h"
36 #else
37 #include "../include/v8.h"
38 #endif // V8_SHARED
39 
40 namespace v8 {
41 
42 
43 #ifndef V8_SHARED
44 // A single counter in a counter collection.
45 class Counter {
46  public:
47  static const int kMaxNameSize = 64;
48  int32_t* Bind(const char* name, bool histogram);
49  int32_t* ptr() { return &count_; }
50  int32_t count() { return count_; }
51  int32_t sample_total() { return sample_total_; }
52  bool is_histogram() { return is_histogram_; }
53  void AddSample(int32_t sample);
54  private:
55  int32_t count_;
56  int32_t sample_total_;
57  bool is_histogram_;
58  uint8_t name_[kMaxNameSize];
59 };
60 
61 
62 // A set of counters and associated information. An instance of this
63 // class is stored directly in the memory-mapped counters file if
64 // the --map-counters options is used
66  public:
69  private:
70  static const unsigned kMaxCounters = 256;
71  uint32_t magic_number_;
72  uint32_t max_counters_;
73  uint32_t max_name_size_;
74  uint32_t counters_in_use_;
75  Counter counters_[kMaxCounters];
76 };
77 
78 
79 class CounterMap {
80  public:
81  CounterMap(): hash_map_(Match) { }
82  Counter* Lookup(const char* name) {
83  i::HashMap::Entry* answer = hash_map_.Lookup(
84  const_cast<char*>(name),
85  Hash(name),
86  false);
87  if (!answer) return NULL;
88  return reinterpret_cast<Counter*>(answer->value);
89  }
90  void Set(const char* name, Counter* value) {
91  i::HashMap::Entry* answer = hash_map_.Lookup(
92  const_cast<char*>(name),
93  Hash(name),
94  true);
95  ASSERT(answer != NULL);
96  answer->value = value;
97  }
98  class Iterator {
99  public:
100  explicit Iterator(CounterMap* map)
101  : map_(&map->hash_map_), entry_(map_->Start()) { }
102  void Next() { entry_ = map_->Next(entry_); }
103  bool More() { return entry_ != NULL; }
104  const char* CurrentKey() { return static_cast<const char*>(entry_->key); }
105  Counter* CurrentValue() { return static_cast<Counter*>(entry_->value); }
106  private:
107  i::HashMap* map_;
108  i::HashMap::Entry* entry_;
109  };
110 
111  private:
112  static int Hash(const char* name);
113  static bool Match(void* key1, void* key2);
114  i::HashMap hash_map_;
115 };
116 #endif // V8_SHARED
117 
118 
119 class LineEditor {
120  public:
121  enum Type { DUMB = 0, READLINE = 1 };
122  LineEditor(Type type, const char* name);
123  virtual ~LineEditor() { }
124 
125  virtual Handle<String> Prompt(const char* prompt) = 0;
126  virtual bool Open() { return true; }
127  virtual bool Close() { return true; }
128  virtual void AddHistory(const char* str) { }
129 
130  const char* name() { return name_; }
131  static LineEditor* Get();
132  private:
133  Type type_;
134  const char* name_;
135  LineEditor* next_;
136  static LineEditor* first_;
137 };
138 
139 
140 class SourceGroup {
141  public:
143 #ifndef V8_SHARED
144  next_semaphore_(v8::internal::OS::CreateSemaphore(0)),
145  done_semaphore_(v8::internal::OS::CreateSemaphore(0)),
146  thread_(NULL),
147 #endif // V8_SHARED
148  argv_(NULL),
149  begin_offset_(0),
150  end_offset_(0) {}
151 
152  ~SourceGroup();
153 
154  void Begin(char** argv, int offset) {
155  argv_ = const_cast<const char**>(argv);
156  begin_offset_ = offset;
157  }
158 
159  void End(int offset) { end_offset_ = offset; }
160 
161  void Execute();
162 
163 #ifndef V8_SHARED
164  void StartExecuteInThread();
165  void WaitForThread();
166 
167  private:
168  class IsolateThread : public i::Thread {
169  public:
170  explicit IsolateThread(SourceGroup* group)
171  : i::Thread(GetThreadOptions()), group_(group) {}
172 
173  virtual void Run() {
174  group_->ExecuteInThread();
175  }
176 
177  private:
178  SourceGroup* group_;
179  };
180 
181  static i::Thread::Options GetThreadOptions();
182  void ExecuteInThread();
183 
184  i::Semaphore* next_semaphore_;
185  i::Semaphore* done_semaphore_;
186  i::Thread* thread_;
187 #endif // V8_SHARED
188 
189  void ExitShell(int exit_code);
190  Handle<String> ReadFile(const char* name);
191 
192  const char** argv_;
193  int begin_offset_;
194  int end_offset_;
195 };
196 
197 
199  public:
200  BinaryResource(const char* string, int length)
201  : data_(string),
202  length_(length) { }
203 
205  delete[] data_;
206  data_ = NULL;
207  length_ = 0;
208  }
209 
210  virtual const char* data() const { return data_; }
211  virtual size_t length() const { return length_; }
212 
213  private:
214  const char* data_;
215  size_t length_;
216 };
217 
218 
220  public:
222 #ifndef V8_SHARED
227 #endif // V8_SHARED
229  last_run(true),
230  stress_opt(false),
233  test_shell(false),
234  num_isolates(1),
235  isolate_sources(NULL) { }
236 
238 #ifndef V8_SHARED
239  delete[] parallel_files;
240 #endif // V8_SHARED
241  delete[] isolate_sources;
242  }
243 
244 #ifndef V8_SHARED
249 #endif // V8_SHARED
251  bool last_run;
258 };
259 
260 #ifdef V8_SHARED
261 class Shell {
262 #else
263 class Shell : public i::AllStatic {
264 #endif // V8_SHARED
265 
266  public:
267  static bool ExecuteString(Handle<String> source,
269  bool print_result,
270  bool report_exceptions);
271  static const char* ToCString(const v8::String::Utf8Value& value);
272  static void ReportException(TryCatch* try_catch);
273  static Handle<String> ReadFile(const char* name);
275  static int RunMain(int argc, char* argv[]);
276  static int Main(int argc, char* argv[]);
277  static void Exit(int exit_code);
278 
279 #ifndef V8_SHARED
281  Handle<String> full);
282  static void OnExit();
283  static int* LookupCounter(const char* name);
284  static void* CreateHistogram(const char* name,
285  int min,
286  int max,
287  size_t buckets);
288  static void AddHistogramSample(void* histogram, int sample);
289  static void MapCounters(const char* name);
290 
291 #ifdef ENABLE_DEBUGGER_SUPPORT
292  static Handle<Object> DebugMessageDetails(Handle<String> message);
293  static Handle<Value> DebugCommandToJSONRequest(Handle<String> command);
294  static void DispatchDebugMessages();
295 #endif // ENABLE_DEBUGGER_SUPPORT
296 #endif // V8_SHARED
297 
298 #ifdef WIN32
299 #undef Yield
300 #endif
301 
302  static Handle<Value> Print(const Arguments& args);
303  static Handle<Value> Write(const Arguments& args);
304  static Handle<Value> Yield(const Arguments& args);
305  static Handle<Value> Quit(const Arguments& args);
306  static Handle<Value> Version(const Arguments& args);
307  static Handle<Value> EnableProfiler(const Arguments& args);
308  static Handle<Value> DisableProfiler(const Arguments& args);
309  static Handle<Value> Read(const Arguments& args);
310  static Handle<Value> ReadBuffer(const Arguments& args);
311  static Handle<String> ReadFromStdin();
312  static Handle<Value> ReadLine(const Arguments& args) {
313  return ReadFromStdin();
314  }
315  static Handle<Value> Load(const Arguments& args);
316  static Handle<Value> ArrayBuffer(const Arguments& args);
317  static Handle<Value> Int8Array(const Arguments& args);
318  static Handle<Value> Uint8Array(const Arguments& args);
319  static Handle<Value> Int16Array(const Arguments& args);
320  static Handle<Value> Uint16Array(const Arguments& args);
321  static Handle<Value> Int32Array(const Arguments& args);
322  static Handle<Value> Uint32Array(const Arguments& args);
323  static Handle<Value> Float32Array(const Arguments& args);
324  static Handle<Value> Float64Array(const Arguments& args);
325  static Handle<Value> PixelArray(const Arguments& args);
326  // The OS object on the global object contains methods for performing
327  // operating system calls:
328  //
329  // os.system("program_name", ["arg1", "arg2", ...], timeout1, timeout2) will
330  // run the command, passing the arguments to the program. The standard output
331  // of the program will be picked up and returned as a multiline string. If
332  // timeout1 is present then it should be a number. -1 indicates no timeout
333  // and a positive number is used as a timeout in milliseconds that limits the
334  // time spent waiting between receiving output characters from the program.
335  // timeout2, if present, should be a number indicating the limit in
336  // milliseconds on the total running time of the program. Exceptions are
337  // thrown on timeouts or other errors or if the exit status of the program
338  // indicates an error.
339  //
340  // os.chdir(dir) changes directory to the given directory. Throws an
341  // exception/ on error.
342  //
343  // os.setenv(variable, value) sets an environment variable. Repeated calls to
344  // this method leak memory due to the API of setenv in the standard C library.
345  //
346  // os.umask(alue) calls the umask system call and returns the old umask.
347  //
348  // os.mkdirp(name, mask) creates a directory. The mask (if present) is anded
349  // with the current umask. Intermediate directories are created if necessary.
350  // An exception is not thrown if the directory already exists. Analogous to
351  // the "mkdir -p" command.
352  static Handle<Value> OSObject(const Arguments& args);
353  static Handle<Value> System(const Arguments& args);
354  static Handle<Value> ChangeDirectory(const Arguments& args);
355  static Handle<Value> SetEnvironment(const Arguments& args);
356  static Handle<Value> UnsetEnvironment(const Arguments& args);
357  static Handle<Value> SetUMask(const Arguments& args);
358  static Handle<Value> MakeDirectory(const Arguments& args);
359  static Handle<Value> RemoveDirectory(const Arguments& args);
360 
361  static void AddOSMethods(Handle<ObjectTemplate> os_template);
362 
364  static const char* kPrompt;
366 
367  private:
368  static Persistent<Context> evaluation_context_;
369 #ifndef V8_SHARED
370  static Persistent<Context> utility_context_;
371  static CounterMap* counter_map_;
372  // We statically allocate a set of local counters to be used if we
373  // don't want to store the stats in a memory-mapped file
374  static CounterCollection local_counters_;
375  static CounterCollection* counters_;
376  static i::OS::MemoryMappedFile* counters_file_;
377  static i::Mutex* context_mutex_;
378 
379  static Counter* GetCounter(const char* name, bool is_histogram);
380  static void InstallUtilityScript();
381 #endif // V8_SHARED
382  static void Initialize();
383  static void RunShell();
384  static bool SetOptions(int argc, char* argv[]);
386  static Handle<Value> CreateExternalArrayBuffer(int32_t size);
387  static Handle<Value> CreateExternalArrayBuffer(const Arguments& args);
388  static Handle<Value> CreateExternalArray(const Arguments& args,
390  int32_t element_size);
391  static void ExternalArrayWeakCallback(Persistent<Value> object, void* data);
392 };
393 
394 
395 } // namespace v8
396 
397 
398 #endif // V8_D8_H_
static void Exit(int exit_code)
Definition: d8.cc:921
~ShellOptions()
Definition: d8.h:237
static Handle< Array > GetCompletions(Handle< String > text, Handle< String > full)
Definition: d8.cc:575
void Set(const char *name, Counter *value)
Definition: d8.h:90
int num_parallel_files
Definition: d8.h:247
bool use_preemption
Definition: d8.h:245
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 true
CounterMap()
Definition: d8.h:81
char ** parallel_files
Definition: d8.h:248
SourceGroup()
Definition: d8.h:142
static Handle< Value > Version(const Arguments &args)
Definition: d8.cc:523
static int Main(int argc, char *argv[])
Definition: d8.cc:1480
void WaitForThread()
Definition: d8.cc:1257
static void AddHistogramSample(void *histogram, int sample)
Definition: d8.cc:711
void AddSample(int32_t sample)
Definition: d8.cc:629
bool interactive_shell
Definition: d8.h:254
static Handle< Value > Int32Array(const Arguments &args)
Definition: d8.cc:480
static Handle< Value > Float32Array(const Arguments &args)
Definition: d8.cc:490
value format" "after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false, "print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false, "report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true, "garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true, "flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true, "use incremental marking") DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") DEFINE_bool(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true, "Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false, "Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true, "use inline caching") DEFINE_bool(native_code_counters, false, "generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false, "Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true, "Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false, "Never perform compaction on full GC-testing only") DEFINE_bool(compact_code_space, true, "Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true, "Flush inline caches prior to mark compact collection and" "flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0, "Default seed for initializing random generator" "(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true, "allows verbose printing") DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") DEFINE_bool(trace_sim, false, "Trace simulator execution") DEFINE_bool(check_icache, false, "Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8, "Stack alingment in bytes in simulator(4 or 8, 8 is default)") DEFINE_bool(trace_exception, false, "print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false, "preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true, "randomize hashes to avoid predictable hash collisions" "(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0, "Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false, "activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") DEFINE_int(testing_int_flag, 13, "testing_int_flag") DEFINE_float(testing_float_flag, 2.5, "float-flag") DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") DEFINE_string(testing_serialization_file, "/tmp/serdes", "file in which to serialize heap") DEFINE_bool(help, false, "Print usage message, including flags, on console") DEFINE_bool(dump_counters, false, "Dump counters on exit") DEFINE_string(map_counters, "", "Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT, "Pass all remaining arguments to the script.Alias for\"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#43"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2#define FLAG_MODE_DEFINE_DEFAULTS#1"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flag-definitions.h"1#define FLAG_FULL(ftype, ctype, nam, def, cmt)#define FLAG_READONLY(ftype, ctype, nam, def, cmt)#define DEFINE_implication(whenflag, thenflag)#define DEFINE_bool(nam, def, cmt)#define DEFINE_int(nam, def, cmt)#define DEFINE_float(nam, def, cmt)#define DEFINE_string(nam, def, cmt)#define DEFINE_args(nam, def, cmt)#define FLAG DEFINE_bool(use_strict, false,"enforce strict mode") DEFINE_bool(es5_readonly, false,"activate correct semantics for inheriting readonliness") DEFINE_bool(es52_globals, false,"activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false,"enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false,"enable harmony block scoping") DEFINE_bool(harmony_modules, false,"enable harmony modules (implies block scoping)") DEFINE_bool(harmony_proxies, false,"enable harmony proxies") DEFINE_bool(harmony_collections, false,"enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false,"enable all harmony features (except typeof)") DEFINE_implication(harmony, harmony_scoping) DEFINE_implication(harmony, harmony_modules) DEFINE_implication(harmony, harmony_proxies) DEFINE_implication(harmony, harmony_collections) DEFINE_implication(harmony_modules, harmony_scoping) DEFINE_bool(packed_arrays, false,"optimizes arrays that have no holes") DEFINE_bool(smi_only_arrays, true,"tracks arrays with only smi values") DEFINE_bool(clever_optimizations, true,"Optimize object size, Array shift, DOM strings and string +") DEFINE_bool(unbox_double_arrays, true,"automatically unbox arrays of doubles") DEFINE_bool(string_slices, true,"use string slices") DEFINE_bool(crankshaft, true,"use crankshaft") DEFINE_string(hydrogen_filter,"","optimization filter") DEFINE_bool(use_range, true,"use hydrogen range analysis") DEFINE_bool(eliminate_dead_phis, true,"eliminate dead phis") DEFINE_bool(use_gvn, true,"use hydrogen global value numbering") DEFINE_bool(use_canonicalizing, true,"use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true,"use function inlining") DEFINE_int(max_inlined_source_size, 600,"maximum source size in bytes considered for a single inlining") DEFINE_int(max_inlined_nodes, 196,"maximum number of AST nodes considered for a single inlining") DEFINE_int(max_inlined_nodes_cumulative, 196,"maximum cumulative number of AST nodes considered for inlining") DEFINE_bool(loop_invariant_code_motion, true,"loop invariant code motion") DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true,"crankshaft harvests type feedback from stub cache") DEFINE_bool(hydrogen_stats, false,"print statistics for hydrogen") DEFINE_bool(trace_hydrogen, false,"trace generated hydrogen to file") DEFINE_string(trace_phase,"Z","trace generated IR for specified phases") DEFINE_bool(trace_inlining, false,"trace inlining decisions") DEFINE_bool(trace_alloc, false,"trace register allocator") DEFINE_bool(trace_all_uses, false,"trace all use positions") DEFINE_bool(trace_range, false,"trace range analysis") DEFINE_bool(trace_gvn, false,"trace global value numbering") DEFINE_bool(trace_representation, false,"trace representation types") DEFINE_bool(stress_pointer_maps, false,"pointer map for every instruction") DEFINE_bool(stress_environments, false,"environment for every instruction") DEFINE_int(deopt_every_n_times, 0,"deoptimize every n times a deopt point is passed") DEFINE_bool(trap_on_deopt, false,"put a break point before deoptimizing") DEFINE_bool(deoptimize_uncommon_cases, true,"deoptimize uncommon cases") DEFINE_bool(polymorphic_inlining, true,"polymorphic inlining") DEFINE_bool(use_osr, true,"use on-stack replacement") DEFINE_bool(array_bounds_checks_elimination, false,"perform array bounds checks elimination") DEFINE_bool(array_index_dehoisting, false,"perform array index dehoisting") DEFINE_bool(trace_osr, false,"trace on-stack replacement") DEFINE_int(stress_runs, 0,"number of stress runs") DEFINE_bool(optimize_closures, true,"optimize closures") DEFINE_bool(inline_construct, true,"inline constructor calls") DEFINE_bool(inline_arguments, true,"inline functions with arguments object") DEFINE_int(loop_weight, 1,"loop weight for representation inference") DEFINE_bool(optimize_for_in, true,"optimize functions containing for-in loops") DEFINE_bool(experimental_profiler, true,"enable all profiler experiments") DEFINE_bool(watch_ic_patching, false,"profiler considers IC stability") DEFINE_int(frame_count, 1,"number of stack frames inspected by the profiler") DEFINE_bool(self_optimization, false,"primitive functions trigger their own optimization") DEFINE_bool(direct_self_opt, false,"call recompile stub directly when self-optimizing") DEFINE_bool(retry_self_opt, false,"re-try self-optimization if it failed") DEFINE_bool(count_based_interrupts, false,"trigger profiler ticks based on counting instead of timing") DEFINE_bool(interrupt_at_exit, false,"insert an interrupt check at function exit") DEFINE_bool(weighted_back_edges, false,"weight back edges by jump distance for interrupt triggering") DEFINE_int(interrupt_budget, 5900,"execution budget before interrupt is triggered") DEFINE_int(type_info_threshold, 15,"percentage of ICs that must have type info to allow optimization") DEFINE_int(self_opt_count, 130,"call count before self-optimization") DEFINE_implication(experimental_profiler, watch_ic_patching) DEFINE_implication(experimental_profiler, self_optimization) DEFINE_implication(experimental_profiler, retry_self_opt) DEFINE_implication(experimental_profiler, count_based_interrupts) DEFINE_implication(experimental_profiler, interrupt_at_exit) DEFINE_implication(experimental_profiler, weighted_back_edges) DEFINE_bool(trace_opt_verbose, false,"extra verbose compilation tracing") DEFINE_implication(trace_opt_verbose, trace_opt) DEFINE_bool(debug_code, false,"generate extra code (assertions) for debugging") DEFINE_bool(code_comments, false,"emit comments in code disassembly") DEFINE_bool(enable_sse2, true,"enable use of SSE2 instructions if available") DEFINE_bool(enable_sse3, true,"enable use of SSE3 instructions if available") DEFINE_bool(enable_sse4_1, true,"enable use of SSE4.1 instructions if available") DEFINE_bool(enable_cmov, true,"enable use of CMOV instruction if available") DEFINE_bool(enable_rdtsc, true,"enable use of RDTSC instruction if available") DEFINE_bool(enable_sahf, true,"enable use of SAHF instruction if available (X64 only)") DEFINE_bool(enable_vfp3, true,"enable use of VFP3 instructions if available - this implies ""enabling ARMv7 instructions (ARM only)") DEFINE_bool(enable_armv7, true,"enable use of ARMv7 instructions if available (ARM only)") DEFINE_bool(enable_fpu, true,"enable use of MIPS FPU instructions if available (MIPS only)") DEFINE_string(expose_natives_as, NULL,"expose natives in global object") DEFINE_string(expose_debug_as, NULL,"expose debug in global object") DEFINE_bool(expose_gc, false,"expose gc extension") DEFINE_bool(expose_externalize_string, false,"expose externalize string extension") DEFINE_int(stack_trace_limit, 10,"number of stack frames to capture") DEFINE_bool(builtins_in_stack_traces, false,"show built-in functions in stack traces") DEFINE_bool(disable_native_files, false,"disable builtin natives files") DEFINE_bool(inline_new, true,"use fast inline allocation") DEFINE_bool(stack_trace_on_abort, true,"print a stack trace if an assertion failure occurs") DEFINE_bool(trace, false,"trace function calls") DEFINE_bool(mask_constants_with_cookie, true,"use random jit cookie to mask large constants") DEFINE_bool(lazy, true,"use lazy compilation") DEFINE_bool(trace_opt, false,"trace lazy optimization") DEFINE_bool(trace_opt_stats, false,"trace lazy optimization statistics") DEFINE_bool(opt, true,"use adaptive optimizations") DEFINE_bool(always_opt, false,"always try to optimize functions") DEFINE_bool(prepare_always_opt, false,"prepare for turning on always opt") DEFINE_bool(trace_deopt, false,"trace deoptimization") DEFINE_int(min_preparse_length, 1024,"minimum length for automatic enable preparsing") DEFINE_bool(always_full_compiler, false,"try to use the dedicated run-once backend for all code") DEFINE_bool(trace_bailout, false,"print reasons for falling back to using the classic V8 backend") DEFINE_bool(compilation_cache, true,"enable compilation cache") DEFINE_bool(cache_prototype_transitions, true,"cache prototype transitions") DEFINE_bool(trace_debug_json, false,"trace debugging JSON request/response") DEFINE_bool(debugger_auto_break, true,"automatically set the debug break flag when debugger commands are ""in the queue") DEFINE_bool(enable_liveedit, true,"enable liveedit experimental feature") DEFINE_bool(break_on_abort, true,"always cause a debug break before aborting") DEFINE_int(stack_size, kPointerSize *123,"default size of stack region v8 is allowed to use (in kBytes)") DEFINE_int(max_stack_trace_source_length, 300,"maximum length of function source code printed in a stack trace.") DEFINE_bool(always_inline_smi_code, false,"always inline smi code in non-opt code") DEFINE_int(max_new_space_size, 0,"max size of the new generation (in kBytes)") DEFINE_int(max_old_space_size, 0,"max size of the old generation (in Mbytes)") DEFINE_int(max_executable_size, 0,"max size of executable memory (in Mbytes)") DEFINE_bool(gc_global, false,"always perform global GCs") DEFINE_int(gc_interval,-1,"garbage collect after <n> allocations") DEFINE_bool(trace_gc, false,"print one trace line following each garbage collection") DEFINE_bool(trace_gc_nvp, false,"print one detailed trace line in name=value format ""after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false,"print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false,"print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false,"report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true,"garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true,"flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true,"use incremental marking") DEFINE_bool(incremental_marking_steps, true,"do incremental marking steps") DEFINE_bool(trace_incremental_marking, false,"trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true,"Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false,"Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true,"use inline caching") DEFINE_bool(native_code_counters, false,"generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false,"Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true,"Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false,"Never perform compaction on full GC - testing only") DEFINE_bool(compact_code_space, true,"Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true,"Flush inline caches prior to mark compact collection and ""flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0,"Default seed for initializing random generator ""(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true,"allows verbose printing") DEFINE_bool(allow_natives_syntax, false,"allow natives syntax") DEFINE_bool(trace_sim, false,"Trace simulator execution") DEFINE_bool(check_icache, false,"Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0,"Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8,"Stack alingment in bytes in simulator (4 or 8, 8 is default)") DEFINE_bool(trace_exception, false,"print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false,"preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true,"randomize hashes to avoid predictable hash collisions ""(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0,"Fixed seed to use to hash property keys (0 means random)""(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false,"activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true,"generate optimized regexp code") DEFINE_bool(testing_bool_flag, true,"testing_bool_flag") DEFINE_int(testing_int_flag, 13,"testing_int_flag") DEFINE_float(testing_float_flag, 2.5,"float-flag") DEFINE_string(testing_string_flag,"Hello, world!","string-flag") DEFINE_int(testing_prng_seed, 42,"Seed used for threading test randomness") DEFINE_string(testing_serialization_file,"/tmp/serdes","file in which to serialize heap") DEFINE_bool(help, false,"Print usage message, including flags, on console") DEFINE_bool(dump_counters, false,"Dump counters on exit") DEFINE_string(map_counters,"","Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT,"Pass all remaining arguments to the script. Alias for \"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#47"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2 namespace{struct Flag{enum FlagType{TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING, TYPE_ARGS} name
Definition: flags.cc:1349
static Handle< Value > OSObject(const Arguments &args)
virtual size_t length() const
Definition: d8.h:211
static Handle< Value > SetUMask(const Arguments &args)
Definition: d8-posix.cc:542
void DispatchDebugMessages()
static Handle< Value > ReadLine(const Arguments &args)
Definition: d8.h:312
static void AddOSMethods(Handle< ObjectTemplate > os_template)
Definition: d8-posix.cc:677
int int32_t
Definition: unicode.cc:47
virtual bool Open()
Definition: d8.h:126
static LineEditor * Get()
Definition: d8.cc:81
int32_t * ptr()
Definition: d8.h:49
int preemption_interval
Definition: d8.h:246
TickSample * sample
static Handle< Value > PixelArray(const Arguments &args)
Definition: d8.cc:502
Counter * GetNextCounter()
Definition: d8.cc:643
int32_t * Bind(const char *name, bool histogram)
Definition: d8.cc:619
#define ASSERT(condition)
Definition: checks.h:270
static Handle< Value > Int16Array(const Arguments &args)
Definition: d8.cc:469
ExternalArrayType
Definition: v8.h:1407
void End(int offset)
Definition: d8.h:159
static const int kMaxNameSize
Definition: d8.h:47
v8::Handle< v8::ObjectTemplate > CreateGlobalTemplate(v8::InvocationCallback terminate, v8::InvocationCallback doloop)
Iterator(CounterMap *map)
Definition: d8.h:100
static Handle< Value > Uint16Array(const Arguments &args)
Definition: d8.cc:474
static LineEditor * console
Definition: d8.h:363
static Handle< Value > SetEnvironment(const Arguments &args)
Definition: d8-posix.cc:639
static ShellOptions options
Definition: d8.h:365
virtual const char * data() const
Definition: d8.h:210
LineEditor(Type type, const char *name)
Definition: d8.cc:73
bool is_histogram()
Definition: d8.h:52
static Handle< Value > ArrayBuffer(const Arguments &args)
Definition: d8.cc:454
static Handle< Value > EnableProfiler(const Arguments &args)
Definition: d8.cc:214
static const char * ToCString(const v8::String::Utf8Value &value)
Definition: d8.cc:137
static Handle< Value > DisableProfiler(const Arguments &args)
Definition: d8.cc:220
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 trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt 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 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
int32_t sample_total()
Definition: d8.h:51
static Handle< Value > Read(const Arguments &args)
Definition: d8.cc:226
SourceGroup * isolate_sources
Definition: d8.h:257
Counter * CurrentValue()
Definition: d8.h:105
Entry * Lookup(void *key, uint32_t hash, bool insert, AllocationPolicy allocator=AllocationPolicy())
Definition: hashmap.h:130
~SourceGroup()
Definition: d8.cc:1164
int num_isolates
Definition: d8.h:256
static const char * kPrompt
Definition: d8.h:364
bool stress_opt
Definition: d8.h:252
static void * CreateHistogram(const char *name, int min, int max, size_t buckets)
Definition: d8.cc:703
const char * name()
Definition: d8.h:130
ShellOptions()
Definition: d8.h:221
static Handle< Value > RemoveDirectory(const Arguments &args)
Definition: d8-posix.cc:624
static Handle< Value > Int8Array(const Arguments &args)
Definition: d8.cc:459
bool stress_deopt
Definition: d8.h:253
static Handle< Value > Write(const Arguments &args)
Definition: d8.cc:197
virtual bool Close()
Definition: d8.h:127
static Handle< Value > Load(const Arguments &args)
Definition: d8.cc:269
Counter * Lookup(const char *name)
Definition: d8.h:82
BinaryResource(const char *string, int length)
Definition: d8.h:200
Definition: d8.h:263
virtual Handle< String > Prompt(const char *prompt)=0
static Handle< Value > ReadBuffer(const Arguments &args)
Definition: d8.cc:1022
static Handle< Value > UnsetEnvironment(const Arguments &args)
Definition: d8-posix.cc:661
static Handle< Value > Print(const Arguments &args)
Definition: d8.cc:189
void Execute()
Definition: d8.cc:1176
static bool ExecuteString(Handle< String > source, Handle< Value > name, bool print_result, bool report_exceptions)
Definition: d8.cc:143
static Handle< Value > Float64Array(const Arguments &args)
Definition: d8.cc:496
static Persistent< Context > CreateEvaluationContext()
Definition: d8.cc:892
static Handle< String > ReadFile(const char *name)
Definition: d8.cc:1073
void Begin(char **argv, int offset)
Definition: d8.h:154
static void MapCounters(const char *name)
Definition: d8.cc:649
static void ReportException(TryCatch *try_catch)
Definition: d8.cc:528
static Handle< Value > Uint8Array(const Arguments &args)
Definition: d8.cc:464
virtual ~LineEditor()
Definition: d8.h:123
static Handle< String > ReadFromStdin()
Definition: d8.cc:239
int32_t count()
Definition: d8.h:50
static Handle< Value > Quit(const Arguments &args)
Definition: d8.cc:513
static Handle< Value > Uint32Array(const Arguments &args)
Definition: d8.cc:485
static Handle< Value > MakeDirectory(const Arguments &args)
Definition: d8-posix.cc:601
bool test_shell
Definition: d8.h:255
const char * CurrentKey()
Definition: d8.h:104
virtual void AddHistory(const char *str)
Definition: d8.h:128
static int * LookupCounter(const char *name)
Definition: d8.cc:692
static Handle< Value > Yield(const Arguments &args)
Definition: d8.cc:507
~BinaryResource()
Definition: d8.h:204
bool script_executed
Definition: d8.h:250
static Handle< Value > System(const Arguments &args)
Definition: d8-posix.cc:451
void RunShell(v8::Handle< v8::Context > context)
Definition: shell.cc:251
static Handle< Value > ChangeDirectory(const Arguments &args)
Definition: d8-posix.cc:525
Definition: d8.h:45
void StartExecuteInThread()
Definition: d8.cc:1248
static void OnExit()
Definition: d8.cc:943
FlagType type() const
Definition: flags.cc:1358
static int RunMain(int argc, char *argv[])
Definition: d8.cc:1398
Entry * Next(Entry *p) const
Definition: hashmap.h:241
bool last_run
Definition: d8.h:251