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
process.cc
Go to the documentation of this file.
1 // Copyright 2008 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 <v8.h>
29 
30 #include <string>
31 #include <map>
32 
33 #ifdef COMPRESS_STARTUP_DATA_BZ2
34 #error Using compressed startup data is not supported for this sample
35 #endif
36 
37 using namespace std;
38 using namespace v8;
39 
40 // These interfaces represent an existing request processing interface.
41 // The idea is to imagine a real application that uses these interfaces
42 // and then add scripting capabilities that allow you to interact with
43 // the objects through JavaScript.
44 
48 class HttpRequest {
49  public:
50  virtual ~HttpRequest() { }
51  virtual const string& Path() = 0;
52  virtual const string& Referrer() = 0;
53  virtual const string& Host() = 0;
54  virtual const string& UserAgent() = 0;
55 };
56 
61  public:
62  virtual ~HttpRequestProcessor() { }
63 
64  // Initialize this processor. The map contains options that control
65  // how requests should be processed.
66  virtual bool Initialize(map<string, string>* options,
67  map<string, string>* output) = 0;
68 
69  // Process a single request.
70  virtual bool Process(HttpRequest* req) = 0;
71 
72  static void Log(const char* event);
73 };
74 
79  public:
80  // Creates a new processor that processes requests by invoking the
81  // Process function of the JavaScript script given as an argument.
82  explicit JsHttpRequestProcessor(Handle<String> script) : script_(script) { }
83  virtual ~JsHttpRequestProcessor();
84 
85  virtual bool Initialize(map<string, string>* opts,
86  map<string, string>* output);
87  virtual bool Process(HttpRequest* req);
88 
89  private:
90  // Execute the script associated with this processor and extract the
91  // Process function. Returns true if this succeeded, otherwise false.
92  bool ExecuteScript(Handle<String> script);
93 
94  // Wrap the options and output map in a JavaScript objects and
95  // install it in the global namespace as 'options' and 'output'.
96  bool InstallMaps(map<string, string>* opts, map<string, string>* output);
97 
98  // Constructs the template that describes the JavaScript wrapper
99  // type for requests.
100  static Handle<ObjectTemplate> MakeRequestTemplate();
101  static Handle<ObjectTemplate> MakeMapTemplate();
102 
103  // Callbacks that access the individual fields of request objects.
104  static Handle<Value> GetPath(Local<String> name, const AccessorInfo& info);
105  static Handle<Value> GetReferrer(Local<String> name,
106  const AccessorInfo& info);
107  static Handle<Value> GetHost(Local<String> name, const AccessorInfo& info);
108  static Handle<Value> GetUserAgent(Local<String> name,
109  const AccessorInfo& info);
110 
111  // Callbacks that access maps
112  static Handle<Value> MapGet(Local<String> name, const AccessorInfo& info);
113  static Handle<Value> MapSet(Local<String> name,
114  Local<Value> value,
115  const AccessorInfo& info);
116 
117  // Utility methods for wrapping C++ objects as JavaScript objects,
118  // and going back again.
119  static Handle<Object> WrapMap(map<string, string>* obj);
120  static map<string, string>* UnwrapMap(Handle<Object> obj);
121  static Handle<Object> WrapRequest(HttpRequest* obj);
122  static HttpRequest* UnwrapRequest(Handle<Object> obj);
123 
124  Handle<String> script_;
125  Persistent<Context> context_;
126  Persistent<Function> process_;
127  static Persistent<ObjectTemplate> request_template_;
128  static Persistent<ObjectTemplate> map_template_;
129 };
130 
131 // -------------------------
132 // --- P r o c e s s o r ---
133 // -------------------------
134 
135 
136 static Handle<Value> LogCallback(const Arguments& args) {
137  if (args.Length() < 1) return v8::Undefined();
138  HandleScope scope;
139  Handle<Value> arg = args[0];
140  String::Utf8Value value(arg);
142  return v8::Undefined();
143 }
144 
145 
146 // Execute the script and fetch the Process method.
147 bool JsHttpRequestProcessor::Initialize(map<string, string>* opts,
148  map<string, string>* output) {
149  // Create a handle scope to hold the temporary references.
150  HandleScope handle_scope;
151 
152  // Create a template for the global object where we set the
153  // built-in global functions.
154  Handle<ObjectTemplate> global = ObjectTemplate::New();
155  global->Set(String::New("log"), FunctionTemplate::New(LogCallback));
156 
157  // Each processor gets its own context so different processors don't
158  // affect each other. Context::New returns a persistent handle which
159  // is what we need for the reference to remain after we return from
160  // this method. That persistent handle has to be disposed in the
161  // destructor.
162  context_ = Context::New(NULL, global);
163 
164  // Enter the new context so all the following operations take place
165  // within it.
166  Context::Scope context_scope(context_);
167 
168  // Make the options mapping available within the context
169  if (!InstallMaps(opts, output))
170  return false;
171 
172  // Compile and run the script
173  if (!ExecuteScript(script_))
174  return false;
175 
176  // The script compiled and ran correctly. Now we fetch out the
177  // Process function from the global object.
178  Handle<String> process_name = String::New("Process");
179  Handle<Value> process_val = context_->Global()->Get(process_name);
180 
181  // If there is no Process function, or if it is not a function,
182  // bail out
183  if (!process_val->IsFunction()) return false;
184 
185  // It is a function; cast it to a Function
186  Handle<Function> process_fun = Handle<Function>::Cast(process_val);
187 
188  // Store the function in a Persistent handle, since we also want
189  // that to remain after this call returns
190  process_ = Persistent<Function>::New(process_fun);
191 
192  // All done; all went well
193  return true;
194 }
195 
196 
197 bool JsHttpRequestProcessor::ExecuteScript(Handle<String> script) {
198  HandleScope handle_scope;
199 
200  // We're just about to compile the script; set up an error handler to
201  // catch any exceptions the script might throw.
202  TryCatch try_catch;
203 
204  // Compile the script and check for errors.
205  Handle<Script> compiled_script = Script::Compile(script);
206  if (compiled_script.IsEmpty()) {
207  String::Utf8Value error(try_catch.Exception());
208  Log(*error);
209  // The script failed to compile; bail out.
210  return false;
211  }
212 
213  // Run the script!
214  Handle<Value> result = compiled_script->Run();
215  if (result.IsEmpty()) {
216  // The TryCatch above is still in effect and will have caught the error.
217  String::Utf8Value error(try_catch.Exception());
218  Log(*error);
219  // Running the script failed; bail out.
220  return false;
221  }
222  return true;
223 }
224 
225 
226 bool JsHttpRequestProcessor::InstallMaps(map<string, string>* opts,
227  map<string, string>* output) {
228  HandleScope handle_scope;
229 
230  // Wrap the map object in a JavaScript wrapper
231  Handle<Object> opts_obj = WrapMap(opts);
232 
233  // Set the options object as a property on the global object.
234  context_->Global()->Set(String::New("options"), opts_obj);
235 
236  Handle<Object> output_obj = WrapMap(output);
237  context_->Global()->Set(String::New("output"), output_obj);
238 
239  return true;
240 }
241 
242 
244  // Create a handle scope to keep the temporary object references.
245  HandleScope handle_scope;
246 
247  // Enter this processor's context so all the remaining operations
248  // take place there
249  Context::Scope context_scope(context_);
250 
251  // Wrap the C++ request object in a JavaScript wrapper
252  Handle<Object> request_obj = WrapRequest(request);
253 
254  // Set up an exception handler before calling the Process function
255  TryCatch try_catch;
256 
257  // Invoke the process function, giving the global object as 'this'
258  // and one argument, the request.
259  const int argc = 1;
260  Handle<Value> argv[argc] = { request_obj };
261  Handle<Value> result = process_->Call(context_->Global(), argc, argv);
262  if (result.IsEmpty()) {
263  String::Utf8Value error(try_catch.Exception());
264  Log(*error);
265  return false;
266  } else {
267  return true;
268  }
269 }
270 
271 
273  // Dispose the persistent handles. When noone else has any
274  // references to the objects stored in the handles they will be
275  // automatically reclaimed.
276  context_.Dispose();
277  process_.Dispose();
278 }
279 
280 
281 Persistent<ObjectTemplate> JsHttpRequestProcessor::request_template_;
282 Persistent<ObjectTemplate> JsHttpRequestProcessor::map_template_;
283 
284 
285 // -----------------------------------
286 // --- A c c e s s i n g M a p s ---
287 // -----------------------------------
288 
289 // Utility function that wraps a C++ http request object in a
290 // JavaScript object.
291 Handle<Object> JsHttpRequestProcessor::WrapMap(map<string, string>* obj) {
292  // Handle scope for temporary handles.
293  HandleScope handle_scope;
294 
295  // Fetch the template for creating JavaScript map wrappers.
296  // It only has to be created once, which we do on demand.
297  if (map_template_.IsEmpty()) {
298  Handle<ObjectTemplate> raw_template = MakeMapTemplate();
299  map_template_ = Persistent<ObjectTemplate>::New(raw_template);
300  }
301  Handle<ObjectTemplate> templ = map_template_;
302 
303  // Create an empty map wrapper.
304  Handle<Object> result = templ->NewInstance();
305 
306  // Wrap the raw C++ pointer in an External so it can be referenced
307  // from within JavaScript.
308  Handle<External> map_ptr = External::New(obj);
309 
310  // Store the map pointer in the JavaScript wrapper.
311  result->SetInternalField(0, map_ptr);
312 
313  // Return the result through the current handle scope. Since each
314  // of these handles will go away when the handle scope is deleted
315  // we need to call Close to let one, the result, escape into the
316  // outer handle scope.
317  return handle_scope.Close(result);
318 }
319 
320 
321 // Utility function that extracts the C++ map pointer from a wrapper
322 // object.
323 map<string, string>* JsHttpRequestProcessor::UnwrapMap(Handle<Object> obj) {
325  void* ptr = field->Value();
326  return static_cast<map<string, string>*>(ptr);
327 }
328 
329 
330 // Convert a JavaScript string to a std::string. To not bother too
331 // much with string encodings we just use ascii.
333  String::Utf8Value utf8_value(value);
334  return string(*utf8_value);
335 }
336 
337 
338 Handle<Value> JsHttpRequestProcessor::MapGet(Local<String> name,
339  const AccessorInfo& info) {
340  // Fetch the map wrapped by this object.
341  map<string, string>* obj = UnwrapMap(info.Holder());
342 
343  // Convert the JavaScript string to a std::string.
344  string key = ObjectToString(name);
345 
346  // Look up the value if it exists using the standard STL ideom.
347  map<string, string>::iterator iter = obj->find(key);
348 
349  // If the key is not present return an empty handle as signal
350  if (iter == obj->end()) return Handle<Value>();
351 
352  // Otherwise fetch the value and wrap it in a JavaScript string
353  const string& value = (*iter).second;
354  return String::New(value.c_str(), value.length());
355 }
356 
357 
358 Handle<Value> JsHttpRequestProcessor::MapSet(Local<String> name,
359  Local<Value> value_obj,
360  const AccessorInfo& info) {
361  // Fetch the map wrapped by this object.
362  map<string, string>* obj = UnwrapMap(info.Holder());
363 
364  // Convert the key and value to std::strings.
365  string key = ObjectToString(name);
366  string value = ObjectToString(value_obj);
367 
368  // Update the map.
369  (*obj)[key] = value;
370 
371  // Return the value; any non-empty handle will work.
372  return value_obj;
373 }
374 
375 
376 Handle<ObjectTemplate> JsHttpRequestProcessor::MakeMapTemplate() {
377  HandleScope handle_scope;
378 
379  Handle<ObjectTemplate> result = ObjectTemplate::New();
380  result->SetInternalFieldCount(1);
381  result->SetNamedPropertyHandler(MapGet, MapSet);
382 
383  // Again, return the result through the current handle scope.
384  return handle_scope.Close(result);
385 }
386 
387 
388 // -------------------------------------------
389 // --- A c c e s s i n g R e q u e s t s ---
390 // -------------------------------------------
391 
396 Handle<Object> JsHttpRequestProcessor::WrapRequest(HttpRequest* request) {
397  // Handle scope for temporary handles.
398  HandleScope handle_scope;
399 
400  // Fetch the template for creating JavaScript http request wrappers.
401  // It only has to be created once, which we do on demand.
402  if (request_template_.IsEmpty()) {
403  Handle<ObjectTemplate> raw_template = MakeRequestTemplate();
404  request_template_ = Persistent<ObjectTemplate>::New(raw_template);
405  }
406  Handle<ObjectTemplate> templ = request_template_;
407 
408  // Create an empty http request wrapper.
409  Handle<Object> result = templ->NewInstance();
410 
411  // Wrap the raw C++ pointer in an External so it can be referenced
412  // from within JavaScript.
413  Handle<External> request_ptr = External::New(request);
414 
415  // Store the request pointer in the JavaScript wrapper.
416  result->SetInternalField(0, request_ptr);
417 
418  // Return the result through the current handle scope. Since each
419  // of these handles will go away when the handle scope is deleted
420  // we need to call Close to let one, the result, escape into the
421  // outer handle scope.
422  return handle_scope.Close(result);
423 }
424 
425 
430 HttpRequest* JsHttpRequestProcessor::UnwrapRequest(Handle<Object> obj) {
432  void* ptr = field->Value();
433  return static_cast<HttpRequest*>(ptr);
434 }
435 
436 
437 Handle<Value> JsHttpRequestProcessor::GetPath(Local<String> name,
438  const AccessorInfo& info) {
439  // Extract the C++ request object from the JavaScript wrapper.
440  HttpRequest* request = UnwrapRequest(info.Holder());
441 
442  // Fetch the path.
443  const string& path = request->Path();
444 
445  // Wrap the result in a JavaScript string and return it.
446  return String::New(path.c_str(), path.length());
447 }
448 
449 
450 Handle<Value> JsHttpRequestProcessor::GetReferrer(Local<String> name,
451  const AccessorInfo& info) {
452  HttpRequest* request = UnwrapRequest(info.Holder());
453  const string& path = request->Referrer();
454  return String::New(path.c_str(), path.length());
455 }
456 
457 
458 Handle<Value> JsHttpRequestProcessor::GetHost(Local<String> name,
459  const AccessorInfo& info) {
460  HttpRequest* request = UnwrapRequest(info.Holder());
461  const string& path = request->Host();
462  return String::New(path.c_str(), path.length());
463 }
464 
465 
466 Handle<Value> JsHttpRequestProcessor::GetUserAgent(Local<String> name,
467  const AccessorInfo& info) {
468  HttpRequest* request = UnwrapRequest(info.Holder());
469  const string& path = request->UserAgent();
470  return String::New(path.c_str(), path.length());
471 }
472 
473 
474 Handle<ObjectTemplate> JsHttpRequestProcessor::MakeRequestTemplate() {
475  HandleScope handle_scope;
476 
477  Handle<ObjectTemplate> result = ObjectTemplate::New();
478  result->SetInternalFieldCount(1);
479 
480  // Add accessors for each of the fields of the request.
481  result->SetAccessor(String::NewSymbol("path"), GetPath);
482  result->SetAccessor(String::NewSymbol("referrer"), GetReferrer);
483  result->SetAccessor(String::NewSymbol("host"), GetHost);
484  result->SetAccessor(String::NewSymbol("userAgent"), GetUserAgent);
485 
486  // Again, return the result through the current handle scope.
487  return handle_scope.Close(result);
488 }
489 
490 
491 // --- Test ---
492 
493 
494 void HttpRequestProcessor::Log(const char* event) {
495  printf("Logged: %s\n", event);
496 }
497 
498 
503  public:
504  StringHttpRequest(const string& path,
505  const string& referrer,
506  const string& host,
507  const string& user_agent);
508  virtual const string& Path() { return path_; }
509  virtual const string& Referrer() { return referrer_; }
510  virtual const string& Host() { return host_; }
511  virtual const string& UserAgent() { return user_agent_; }
512  private:
513  string path_;
514  string referrer_;
515  string host_;
516  string user_agent_;
517 };
518 
519 
521  const string& referrer,
522  const string& host,
523  const string& user_agent)
524  : path_(path),
525  referrer_(referrer),
526  host_(host),
527  user_agent_(user_agent) { }
528 
529 
530 void ParseOptions(int argc,
531  char* argv[],
532  map<string, string>& options,
533  string* file) {
534  for (int i = 1; i < argc; i++) {
535  string arg = argv[i];
536  size_t index = arg.find('=', 0);
537  if (index == string::npos) {
538  *file = arg;
539  } else {
540  string key = arg.substr(0, index);
541  string value = arg.substr(index+1);
542  options[key] = value;
543  }
544  }
545 }
546 
547 
548 // Reads a file into a v8 string.
549 Handle<String> ReadFile(const string& name) {
550  FILE* file = fopen(name.c_str(), "rb");
551  if (file == NULL) return Handle<String>();
552 
553  fseek(file, 0, SEEK_END);
554  int size = ftell(file);
555  rewind(file);
556 
557  char* chars = new char[size + 1];
558  chars[size] = '\0';
559  for (int i = 0; i < size;) {
560  int read = fread(&chars[i], 1, size - i, file);
561  i += read;
562  }
563  fclose(file);
564  Handle<String> result = String::New(chars, size);
565  delete[] chars;
566  return result;
567 }
568 
569 
570 const int kSampleSize = 6;
572  StringHttpRequest("/process.cc", "localhost", "google.com", "firefox"),
573  StringHttpRequest("/", "localhost", "google.net", "firefox"),
574  StringHttpRequest("/", "localhost", "google.org", "safari"),
575  StringHttpRequest("/", "localhost", "yahoo.com", "ie"),
576  StringHttpRequest("/", "localhost", "yahoo.com", "safari"),
577  StringHttpRequest("/", "localhost", "yahoo.com", "firefox")
578 };
579 
580 
581 bool ProcessEntries(HttpRequestProcessor* processor, int count,
582  StringHttpRequest* reqs) {
583  for (int i = 0; i < count; i++) {
584  if (!processor->Process(&reqs[i]))
585  return false;
586  }
587  return true;
588 }
589 
590 
591 void PrintMap(map<string, string>* m) {
592  for (map<string, string>::iterator i = m->begin(); i != m->end(); i++) {
593  pair<string, string> entry = *i;
594  printf("%s: %s\n", entry.first.c_str(), entry.second.c_str());
595  }
596 }
597 
598 
599 int main(int argc, char* argv[]) {
600  map<string, string> options;
601  string file;
602  ParseOptions(argc, argv, options, &file);
603  if (file.empty()) {
604  fprintf(stderr, "No script was specified.\n");
605  return 1;
606  }
607  HandleScope scope;
608  Handle<String> source = ReadFile(file);
609  if (source.IsEmpty()) {
610  fprintf(stderr, "Error reading '%s'.\n", file.c_str());
611  return 1;
612  }
613  JsHttpRequestProcessor processor(source);
614  map<string, string> output;
615  if (!processor.Initialize(&options, &output)) {
616  fprintf(stderr, "Error initializing processor.\n");
617  return 1;
618  }
619  if (!ProcessEntries(&processor, kSampleSize, kSampleRequests))
620  return 1;
621  PrintMap(&output);
622 }
virtual bool Process(HttpRequest *req)
Definition: process.cc:243
Handle< String > ReadFile(const string &name)
Definition: process.cc:549
bool ProcessEntries(HttpRequestProcessor *processor, int count, StringHttpRequest *reqs)
Definition: process.cc:581
Local< Value > Exception() const
Definition: api.cc:1712
virtual const string & Referrer()
Definition: process.cc:509
virtual ~HttpRequestProcessor()
Definition: process.cc:62
Local< Object > NewInstance()
Definition: api.cc:4536
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
virtual const string & Path()=0
virtual ~JsHttpRequestProcessor()
Definition: process.cc:272
string ObjectToString(Local< Value > value)
Definition: process.cc:332
Local< Value > GetInternalField(int index)
Definition: v8.h:4180
void Set(Handle< String > name, Handle< Data > value, PropertyAttribute attributes=None)
Definition: api.cc:894
virtual const string & UserAgent()=0
virtual const string & Path()
Definition: process.cc:508
V8EXPORT void SetInternalField(int index, Handle< Value > value)
Definition: api.cc:4150
Local< Object > Holder() const
Definition: v8.h:4433
virtual ~HttpRequest()
Definition: process.cc:50
V8EXPORT void * Value() const
Definition: api.cc:4638
int main(int argc, char *argv[])
Definition: process.cc:599
virtual bool Process(HttpRequest *req)=0
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
void SetAccessor(Handle< String > name, AccessorGetter getter, AccessorSetter setter=0, Handle< Value > data=Handle< Value >(), AccessControl settings=DEFAULT, PropertyAttribute attribute=None, Handle< AccessorSignature > signature=Handle< AccessorSignature >())
Definition: api.cc:1284
void SetInternalFieldCount(int value)
Definition: api.cc:1431
void PrintMap(map< string, string > *m)
Definition: process.cc:591
int Length() const
Definition: v8.h:4143
virtual bool Initialize(map< string, string > *opts, map< string, string > *output)
Definition: process.cc:147
void ParseOptions(int argc, char *argv[], map< string, string > &options, string *file)
Definition: process.cc:530
static void Log(const char *event)
Definition: process.cc:494
V8EXPORT bool IsFunction() const
Definition: api.cc:2147
virtual const string & Referrer()=0
void SetNamedPropertyHandler(NamedPropertyGetter getter, NamedPropertySetter setter=0, NamedPropertyQuery query=0, NamedPropertyDeleter deleter=0, NamedPropertyEnumerator enumerator=0, Handle< Value > data=Handle< Value >())
Definition: api.cc:1309
virtual const string & Host()
Definition: process.cc:510
StringHttpRequest(const string &path, const string &referrer, const string &host, const string &user_agent)
Definition: process.cc:520
virtual const string & Host()=0
StringHttpRequest kSampleRequests[kSampleSize]
Definition: process.cc:571
Local< T > Close(Handle< T > value)
Definition: v8.h:4149
Handle< Primitive > V8EXPORT Undefined()
Definition: api.cc:546
bool IsEmpty() const
Definition: v8.h:208
Local< Value > Run()
Definition: api.cc:1590
virtual const string & UserAgent()
Definition: process.cc:511
const int kSampleSize
Definition: process.cc:570
JsHttpRequestProcessor(Handle< String > script)
Definition: process.cc:82