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
test-lockers.cc
Go to the documentation of this file.
1 // Copyright 2007-2011 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 #include <limits.h>
29 
30 #include "v8.h"
31 
32 #include "api.h"
33 #include "isolate.h"
34 #include "compilation-cache.h"
35 #include "execution.h"
36 #include "snapshot.h"
37 #include "platform.h"
38 #include "utils.h"
39 #include "cctest.h"
40 #include "parser.h"
41 #include "unicode-inl.h"
42 
43 using ::v8::AccessorInfo;
44 using ::v8::Context;
45 using ::v8::Extension;
46 using ::v8::Function;
47 using ::v8::HandleScope;
48 using ::v8::Local;
50 using ::v8::ObjectTemplate;
51 using ::v8::Persistent;
52 using ::v8::Script;
53 using ::v8::String;
54 using ::v8::Value;
55 using ::v8::V8;
56 
57 
58 // Migrating an isolate
60  public:
62  v8::Handle<v8::Context> context, int value)
63  : Thread("KangarooThread"),
64  isolate_(isolate), context_(context), value_(value) {
65  }
66 
67  void Run() {
68  {
69  v8::Locker locker(isolate_);
70  v8::Isolate::Scope isolate_scope(isolate_);
71  CHECK_EQ(isolate_, v8::internal::Isolate::Current());
72  v8::HandleScope scope;
73  v8::Context::Scope context_scope(context_);
74  Local<Value> v = CompileRun("getValue()");
75  CHECK(v->IsNumber());
76  CHECK_EQ(30, static_cast<int>(v->NumberValue()));
77  }
78  {
79  v8::Locker locker(isolate_);
80  v8::Isolate::Scope isolate_scope(isolate_);
81  v8::Context::Scope context_scope(context_);
82  v8::HandleScope scope;
83  Local<Value> v = CompileRun("getValue()");
84  CHECK(v->IsNumber());
85  CHECK_EQ(30, static_cast<int>(v->NumberValue()));
86  }
87  isolate_->Dispose();
88  }
89 
90  private:
91  v8::Isolate* isolate_;
92  Persistent<v8::Context> context_;
93  int value_;
94 };
95 
96 // Migrates an isolate from one thread to another
97 TEST(KangarooIsolates) {
98  v8::Isolate* isolate = v8::Isolate::New();
99  Persistent<v8::Context> context;
100  {
101  v8::Locker locker(isolate);
102  v8::Isolate::Scope isolate_scope(isolate);
103  v8::HandleScope handle_scope;
104  context = v8::Context::New();
105  v8::Context::Scope context_scope(context);
106  CHECK_EQ(isolate, v8::internal::Isolate::Current());
107  CompileRun("function getValue() { return 30; }");
108  }
109  KangarooThread thread1(isolate, context, 1);
110  thread1.Start();
111  thread1.Join();
112 }
113 
114 static void CalcFibAndCheck() {
115  Local<Value> v = CompileRun("function fib(n) {"
116  " if (n <= 2) return 1;"
117  " return fib(n-1) + fib(n-2);"
118  "}"
119  "fib(10)");
120  CHECK(v->IsNumber());
121  CHECK_EQ(55, static_cast<int>(v->NumberValue()));
122 }
123 
125  public:
126  explicit JoinableThread(const char* name)
127  : name_(name),
128  semaphore_(i::OS::CreateSemaphore(0)),
129  thread_(this) {
130  }
131 
132  virtual ~JoinableThread() {
133  delete semaphore_;
134  }
135 
136  void Start() {
137  thread_.Start();
138  }
139 
140  void Join() {
141  semaphore_->Wait();
142  }
143 
144  virtual void Run() = 0;
145 
146  private:
147  class ThreadWithSemaphore : public i::Thread {
148  public:
149  explicit ThreadWithSemaphore(JoinableThread* joinable_thread)
150  : Thread(joinable_thread->name_),
151  joinable_thread_(joinable_thread) {
152  }
153 
154  virtual void Run() {
155  joinable_thread_->Run();
156  joinable_thread_->semaphore_->Signal();
157  }
158 
159  private:
160  JoinableThread* joinable_thread_;
161  };
162 
163  const char* name_;
164  i::Semaphore* semaphore_;
165  ThreadWithSemaphore thread_;
166 
167  friend class ThreadWithSemaphore;
168 
170 };
171 
172 
174  public:
176  : JoinableThread("IsolateLockingThread"),
177  isolate_(isolate) {
178  }
179 
180  virtual void Run() {
181  v8::Locker locker(isolate_);
182  v8::Isolate::Scope isolate_scope(isolate_);
183  v8::HandleScope handle_scope;
184  LocalContext local_context;
185  CHECK_EQ(isolate_, v8::internal::Isolate::Current());
186  CalcFibAndCheck();
187  }
188  private:
189  v8::Isolate* isolate_;
190 };
191 
192 static void StartJoinAndDeleteThreads(const i::List<JoinableThread*>& threads) {
193  for (int i = 0; i < threads.length(); i++) {
194  threads[i]->Start();
195  }
196  for (int i = 0; i < threads.length(); i++) {
197  threads[i]->Join();
198  }
199  for (int i = 0; i < threads.length(); i++) {
200  delete threads[i];
201  }
202 }
203 
204 
205 // Run many threads all locking on the same isolate
206 TEST(IsolateLockingStress) {
207 #ifdef V8_TARGET_ARCH_MIPS
208  const int kNThreads = 50;
209 #else
210  const int kNThreads = 100;
211 #endif
212  i::List<JoinableThread*> threads(kNThreads);
213  v8::Isolate* isolate = v8::Isolate::New();
214  for (int i = 0; i < kNThreads; i++) {
215  threads.Add(new IsolateLockingThreadWithLocalContext(isolate));
216  }
217  StartJoinAndDeleteThreads(threads);
218  isolate->Dispose();
219 }
220 
222  public:
224  : JoinableThread("IsolateNonlockingThread") {
225  }
226 
227  virtual void Run() {
228  v8::Isolate* isolate = v8::Isolate::New();
229  {
230  v8::Isolate::Scope isolate_scope(isolate);
231  v8::HandleScope handle_scope;
233  v8::Context::Scope context_scope(context);
234  CHECK_EQ(isolate, v8::internal::Isolate::Current());
235  CalcFibAndCheck();
236  }
237  isolate->Dispose();
238  }
239  private:
240 };
241 
242 // Run many threads each accessing its own isolate without locking
243 TEST(MultithreadedParallelIsolates) {
244 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
245  const int kNThreads = 10;
246 #else
247  const int kNThreads = 50;
248 #endif
249  i::List<JoinableThread*> threads(kNThreads);
250  for (int i = 0; i < kNThreads; i++) {
251  threads.Add(new IsolateNonlockingThread());
252  }
253  StartJoinAndDeleteThreads(threads);
254 }
255 
256 
258  public:
260  : JoinableThread("IsolateNestedLocking"), isolate_(isolate) {
261  }
262  virtual void Run() {
263  v8::Locker lock(isolate_);
264  v8::Isolate::Scope isolate_scope(isolate_);
265  v8::HandleScope handle_scope;
266  LocalContext local_context;
267  {
268  v8::Locker another_lock(isolate_);
269  CalcFibAndCheck();
270  }
271  {
272  v8::Locker another_lock(isolate_);
273  CalcFibAndCheck();
274  }
275  }
276  private:
277  v8::Isolate* isolate_;
278 };
279 
280 // Run many threads with nested locks
281 TEST(IsolateNestedLocking) {
282 #ifdef V8_TARGET_ARCH_MIPS
283  const int kNThreads = 50;
284 #else
285  const int kNThreads = 100;
286 #endif
287  v8::Isolate* isolate = v8::Isolate::New();
288  i::List<JoinableThread*> threads(kNThreads);
289  for (int i = 0; i < kNThreads; i++) {
290  threads.Add(new IsolateNestedLockingThread(isolate));
291  }
292  StartJoinAndDeleteThreads(threads);
293 }
294 
295 
297  public:
299  v8::Isolate* isolate2)
300  : JoinableThread("SeparateIsolatesLocksNonexclusiveThread"),
301  isolate1_(isolate1), isolate2_(isolate2) {
302  }
303 
304  virtual void Run() {
305  v8::Locker lock(isolate1_);
306  v8::Isolate::Scope isolate_scope(isolate1_);
307  v8::HandleScope handle_scope;
308  LocalContext local_context;
309 
310  IsolateLockingThreadWithLocalContext threadB(isolate2_);
311  threadB.Start();
312  CalcFibAndCheck();
313  threadB.Join();
314  }
315  private:
316  v8::Isolate* isolate1_;
317  v8::Isolate* isolate2_;
318 };
319 
320 // Run parallel threads that lock and access different isolates in parallel
321 TEST(SeparateIsolatesLocksNonexclusive) {
322 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
323  const int kNThreads = 50;
324 #else
325  const int kNThreads = 100;
326 #endif
327  v8::Isolate* isolate1 = v8::Isolate::New();
328  v8::Isolate* isolate2 = v8::Isolate::New();
329  i::List<JoinableThread*> threads(kNThreads);
330  for (int i = 0; i < kNThreads; i++) {
331  threads.Add(new SeparateIsolatesLocksNonexclusiveThread(isolate1,
332  isolate2));
333  }
334  StartJoinAndDeleteThreads(threads);
335  isolate2->Dispose();
336  isolate1->Dispose();
337 }
338 
340  public:
342  v8::Isolate* isolate, v8::Handle<v8::Context> context)
343  : JoinableThread("LockIsolateAndCalculateFibThread"),
344  isolate_(isolate),
345  context_(context) {
346  }
347 
348  virtual void Run() {
349  v8::Locker lock(isolate_);
350  v8::Isolate::Scope isolate_scope(isolate_);
351  HandleScope handle_scope;
352  v8::Context::Scope context_scope(context_);
353  CalcFibAndCheck();
354  }
355  private:
356  v8::Isolate* isolate_;
357  Persistent<v8::Context> context_;
358 };
359 
361  public:
363  : JoinableThread("LockerUnlockerThread"),
364  isolate_(isolate) {
365  }
366 
367  virtual void Run() {
368  v8::Locker lock(isolate_);
369  v8::Isolate::Scope isolate_scope(isolate_);
370  v8::HandleScope handle_scope;
372  {
373  v8::Context::Scope context_scope(context);
374  CalcFibAndCheck();
375  }
376  {
377  isolate_->Exit();
378  v8::Unlocker unlocker(isolate_);
379  LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
380  thread.Start();
381  thread.Join();
382  }
383  isolate_->Enter();
384  {
385  v8::Context::Scope context_scope(context);
386  CalcFibAndCheck();
387  }
388  }
389 
390  private:
391  v8::Isolate* isolate_;
392 };
393 
394 // Use unlocker inside of a Locker, multiple threads.
395 TEST(LockerUnlocker) {
396 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
397  const int kNThreads = 50;
398 #else
399  const int kNThreads = 100;
400 #endif
401  i::List<JoinableThread*> threads(kNThreads);
402  v8::Isolate* isolate = v8::Isolate::New();
403  for (int i = 0; i < kNThreads; i++) {
404  threads.Add(new LockerUnlockerThread(isolate));
405  }
406  StartJoinAndDeleteThreads(threads);
407  isolate->Dispose();
408 }
409 
411  public:
413  : JoinableThread("LockTwiceAndUnlockThread"),
414  isolate_(isolate) {
415  }
416 
417  virtual void Run() {
418  v8::Locker lock(isolate_);
419  v8::Isolate::Scope isolate_scope(isolate_);
420  v8::HandleScope handle_scope;
422  {
423  v8::Context::Scope context_scope(context);
424  CalcFibAndCheck();
425  }
426  {
427  v8::Locker second_lock(isolate_);
428  {
429  isolate_->Exit();
430  v8::Unlocker unlocker(isolate_);
431  LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
432  thread.Start();
433  thread.Join();
434  }
435  }
436  isolate_->Enter();
437  {
438  v8::Context::Scope context_scope(context);
439  CalcFibAndCheck();
440  }
441  }
442 
443  private:
444  v8::Isolate* isolate_;
445 };
446 
447 // Use Unlocker inside two Lockers.
448 TEST(LockTwiceAndUnlock) {
449 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
450  const int kNThreads = 50;
451 #else
452  const int kNThreads = 100;
453 #endif
454  i::List<JoinableThread*> threads(kNThreads);
455  v8::Isolate* isolate = v8::Isolate::New();
456  for (int i = 0; i < kNThreads; i++) {
457  threads.Add(new LockTwiceAndUnlockThread(isolate));
458  }
459  StartJoinAndDeleteThreads(threads);
460  isolate->Dispose();
461 }
462 
464  public:
466  v8::Isolate* isolate2)
467  : JoinableThread("LockAndUnlockDifferentIsolatesThread"),
468  isolate1_(isolate1),
469  isolate2_(isolate2) {
470  }
471 
472  virtual void Run() {
473  Persistent<v8::Context> context1;
474  Persistent<v8::Context> context2;
475  v8::Locker lock1(isolate1_);
476  CHECK(v8::Locker::IsLocked(isolate1_));
477  CHECK(!v8::Locker::IsLocked(isolate2_));
478  {
479  v8::Isolate::Scope isolate_scope(isolate1_);
480  v8::HandleScope handle_scope;
481  context1 = v8::Context::New();
482  {
483  v8::Context::Scope context_scope(context1);
484  CalcFibAndCheck();
485  }
486  }
487  v8::Locker lock2(isolate2_);
488  CHECK(v8::Locker::IsLocked(isolate1_));
489  CHECK(v8::Locker::IsLocked(isolate2_));
490  {
491  v8::Isolate::Scope isolate_scope(isolate2_);
492  v8::HandleScope handle_scope;
493  context2 = v8::Context::New();
494  {
495  v8::Context::Scope context_scope(context2);
496  CalcFibAndCheck();
497  }
498  }
499  {
500  v8::Unlocker unlock1(isolate1_);
501  CHECK(!v8::Locker::IsLocked(isolate1_));
502  CHECK(v8::Locker::IsLocked(isolate2_));
503  v8::Isolate::Scope isolate_scope(isolate2_);
504  v8::HandleScope handle_scope;
505  v8::Context::Scope context_scope(context2);
506  LockIsolateAndCalculateFibSharedContextThread thread(isolate1_, context1);
507  thread.Start();
508  CalcFibAndCheck();
509  thread.Join();
510  }
511  }
512 
513  private:
514  v8::Isolate* isolate1_;
515  v8::Isolate* isolate2_;
516 };
517 
518 // Lock two isolates and unlock one of them.
519 TEST(LockAndUnlockDifferentIsolates) {
520  v8::Isolate* isolate1 = v8::Isolate::New();
521  v8::Isolate* isolate2 = v8::Isolate::New();
522  LockAndUnlockDifferentIsolatesThread thread(isolate1, isolate2);
523  thread.Start();
524  thread.Join();
525  isolate2->Dispose();
526  isolate1->Dispose();
527 }
528 
530  public:
532  : JoinableThread("LockUnlockLockThread"),
533  isolate_(isolate),
534  context_(context) {
535  }
536 
537  virtual void Run() {
538  v8::Locker lock1(isolate_);
539  CHECK(v8::Locker::IsLocked(isolate_));
541  {
542  v8::Isolate::Scope isolate_scope(isolate_);
543  v8::HandleScope handle_scope;
544  v8::Context::Scope context_scope(context_);
545  CalcFibAndCheck();
546  }
547  {
548  v8::Unlocker unlock1(isolate_);
549  CHECK(!v8::Locker::IsLocked(isolate_));
551  {
552  v8::Locker lock2(isolate_);
553  v8::Isolate::Scope isolate_scope(isolate_);
554  v8::HandleScope handle_scope;
555  CHECK(v8::Locker::IsLocked(isolate_));
557  v8::Context::Scope context_scope(context_);
558  CalcFibAndCheck();
559  }
560  }
561  }
562 
563  private:
564  v8::Isolate* isolate_;
566 };
567 
568 // Locker inside an Unlocker inside a Locker.
569 TEST(LockUnlockLockMultithreaded) {
570 #ifdef V8_TARGET_ARCH_MIPS
571  const int kNThreads = 50;
572 #else
573  const int kNThreads = 100;
574 #endif
575  v8::Isolate* isolate = v8::Isolate::New();
576  Persistent<v8::Context> context;
577  {
578  v8::Locker locker_(isolate);
579  v8::Isolate::Scope isolate_scope(isolate);
580  v8::HandleScope handle_scope;
581  context = v8::Context::New();
582  }
583  i::List<JoinableThread*> threads(kNThreads);
584  for (int i = 0; i < kNThreads; i++) {
585  threads.Add(new LockUnlockLockThread(isolate, context));
586  }
587  StartJoinAndDeleteThreads(threads);
588 }
589 
591  public:
593  : JoinableThread("LockUnlockLockDefaultIsolateThread"),
594  context_(context) {
595  }
596 
597  virtual void Run() {
598  v8::Locker lock1;
599  {
600  v8::HandleScope handle_scope;
601  v8::Context::Scope context_scope(context_);
602  CalcFibAndCheck();
603  }
604  {
605  v8::Unlocker unlock1;
606  {
607  v8::Locker lock2;
608  v8::HandleScope handle_scope;
609  v8::Context::Scope context_scope(context_);
610  CalcFibAndCheck();
611  }
612  }
613  }
614 
615  private:
617 };
618 
619 // Locker inside an Unlocker inside a Locker for default isolate.
620 TEST(LockUnlockLockDefaultIsolateMultithreaded) {
621 #ifdef V8_TARGET_ARCH_MIPS
622  const int kNThreads = 50;
623 #else
624  const int kNThreads = 100;
625 #endif
626  Persistent<v8::Context> context;
627  {
628  v8::Locker locker_;
629  v8::HandleScope handle_scope;
630  context = v8::Context::New();
631  }
632  i::List<JoinableThread*> threads(kNThreads);
633  for (int i = 0; i < kNThreads; i++) {
634  threads.Add(new LockUnlockLockDefaultIsolateThread(context));
635  }
636  StartJoinAndDeleteThreads(threads);
637 }
638 
639 
640 TEST(Regress1433) {
641  for (int i = 0; i < 10; i++) {
642  v8::Isolate* isolate = v8::Isolate::New();
643  {
644  v8::Locker lock(isolate);
645  v8::Isolate::Scope isolate_scope(isolate);
646  v8::HandleScope handle_scope;
648  v8::Context::Scope context_scope(context);
649  v8::Handle<String> source = v8::String::New("1+1");
650  v8::Handle<Script> script = v8::Script::Compile(source);
651  v8::Handle<Value> result = script->Run();
652  v8::String::AsciiValue ascii(result);
653  context.Dispose();
654  }
655  isolate->Dispose();
656  }
657 }
658 
659 
660 static const char* kSimpleExtensionSource =
661  "(function Foo() {"
662  " return 4;"
663  "})() ";
664 
666  public:
667  IsolateGenesisThread(int count, const char* extension_names[])
668  : JoinableThread("IsolateGenesisThread"),
669  count_(count),
670  extension_names_(extension_names)
671  {}
672 
673  virtual void Run() {
674  v8::Isolate* isolate = v8::Isolate::New();
675  {
676  v8::Isolate::Scope isolate_scope(isolate);
677  CHECK(!i::Isolate::Current()->has_installed_extensions());
678  v8::ExtensionConfiguration extensions(count_, extension_names_);
679  v8::Persistent<v8::Context> context = v8::Context::New(&extensions);
680  CHECK(i::Isolate::Current()->has_installed_extensions());
681  context.Dispose();
682  }
683  isolate->Dispose();
684  }
685  private:
686  int count_;
687  const char** extension_names_;
688 };
689 
690 // Test installing extensions in separate isolates concurrently.
691 // http://code.google.com/p/v8/issues/detail?id=1821
692 TEST(ExtensionsRegistration) {
693 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS)
694  const int kNThreads = 10;
695 #else
696  const int kNThreads = 40;
697 #endif
699  kSimpleExtensionSource));
701  kSimpleExtensionSource));
703  kSimpleExtensionSource));
705  kSimpleExtensionSource));
707  kSimpleExtensionSource));
709  kSimpleExtensionSource));
711  kSimpleExtensionSource));
713  kSimpleExtensionSource));
714  const char* extension_names[] = { "test0", "test1",
715  "test2", "test3", "test4",
716  "test5", "test6", "test7" };
717  i::List<JoinableThread*> threads(kNThreads);
718  for (int i = 0; i < kNThreads; i++) {
719  threads.Add(new IsolateGenesisThread(8, extension_names));
720  }
721  StartJoinAndDeleteThreads(threads);
722 }
static Local< Script > Compile(Handle< String > source, ScriptOrigin *origin=NULL, ScriptData *pre_data=NULL, Handle< String > script_data=Handle< String >())
Definition: api.cc:1560
#define CHECK_EQ(expected, value)
Definition: checks.h:219
void Dispose()
Definition: api.cc:5392
void Dispose()
Definition: v8.h:4065
void Exit()
Definition: api.cc:5409
Thread(const Options &options)
LockIsolateAndCalculateFibSharedContextThread(v8::Isolate *isolate, v8::Handle< v8::Context > context)
void V8EXPORT RegisterExtension(Extension *extension)
Definition: api.cc:525
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 V8EXPORT Local< String > New(const char *data, int length=-1)
Definition: api.cc:4655
IsolateNestedLockingThread(v8::Isolate *isolate)
virtual void Run()
virtual void Run()
#define CHECK(condition)
Definition: checks.h:56
virtual ~JoinableThread()
LockAndUnlockDifferentIsolatesThread(v8::Isolate *isolate1, v8::Isolate *isolate2)
IsolateLockingThreadWithLocalContext(v8::Isolate *isolate)
static Isolate * New()
Definition: api.cc:5386
LockerUnlockerThread(v8::Isolate *isolate)
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: globals.h:321
void Enter()
Definition: api.cc:5403
TEST(KangarooIsolates)
Definition: test-lockers.cc:97
friend class ThreadWithSemaphore
KangarooThread(v8::Isolate *isolate, v8::Handle< v8::Context > context, int value)
Definition: test-lockers.cc:61
LockUnlockLockDefaultIsolateThread(v8::Handle< v8::Context > context)
SeparateIsolatesLocksNonexclusiveThread(v8::Isolate *isolate1, v8::Isolate *isolate2)
JoinableThread(const char *name)
LockTwiceAndUnlockThread(v8::Isolate *isolate)
virtual void Run()=0
LockUnlockLockThread(v8::Isolate *isolate, v8::Handle< v8::Context > context)
virtual void Wait()=0
void Add(const T &element, AllocationPolicy allocator=AllocationPolicy())
Definition: list-inl.h:38
Local< Value > Run()
Definition: api.cc:1590
static Persistent< Context > New(ExtensionConfiguration *extensions=NULL, Handle< ObjectTemplate > global_template=Handle< ObjectTemplate >(), Handle< Value > global_object=Handle< Value >())
Definition: api.cc:4308
virtual void Run()
IsolateGenesisThread(int count, const char *extension_names[])
static bool IsLocked(Isolate *isolate=NULL)
Definition: v8threads.cc:88