Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: test/cctest/test-api.cc

Issue 1811553003: [Interpreter] Make ignition compiler eagerly. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 14498 matching lines...) Expand 10 before | Expand all | Expand 10 after
14509 14509
14510 static i::HashMap* code_map = NULL; 14510 static i::HashMap* code_map = NULL;
14511 static i::HashMap* jitcode_line_info = NULL; 14511 static i::HashMap* jitcode_line_info = NULL;
14512 static int saw_bar = 0; 14512 static int saw_bar = 0;
14513 static int move_events = 0; 14513 static int move_events = 0;
14514 14514
14515 14515
14516 static bool FunctionNameIs(const char* expected, 14516 static bool FunctionNameIs(const char* expected,
14517 const v8::JitCodeEvent* event) { 14517 const v8::JitCodeEvent* event) {
14518 // Log lines for functions are of the general form: 14518 // Log lines for functions are of the general form:
14519 // "LazyCompile:<type><function_name>", where the type is one of 14519 // "LazyCompile:<type><function_name>" or Function:<type><function_name>,
14520 // "*", "~" or "". 14520 // where the type is one of "*", "~" or "".
14521 static const char kPreamble[] = "LazyCompile:"; 14521 static const char* kPreamble;
14522 static size_t kPreambleLen = sizeof(kPreamble) - 1; 14522 if (!i::FLAG_lazy || i::FLAG_ignition) {
14523 kPreamble = "Function:";
14524 } else {
14525 kPreamble = "LazyCompile:";
14526 }
14527 static size_t kPreambleLen = strlen(kPreamble);
14523 14528
14524 if (event->name.len < sizeof(kPreamble) - 1 || 14529 if (event->name.len < kPreambleLen ||
14525 strncmp(kPreamble, event->name.str, kPreambleLen) != 0) { 14530 strncmp(kPreamble, event->name.str, kPreambleLen) != 0) {
14526 return false; 14531 return false;
14527 } 14532 }
14528 14533
14529 const char* tail = event->name.str + kPreambleLen; 14534 const char* tail = event->name.str + kPreambleLen;
14530 size_t tail_len = event->name.len - kPreambleLen; 14535 size_t tail_len = event->name.len - kPreambleLen;
14531 size_t expected_len = strlen(expected); 14536 size_t expected_len = strlen(expected);
14532 if (tail_len > 1 && (*tail == '*' || *tail == '~')) { 14537 if (tail_len > 1 && (*tail == '*' || *tail == '~')) {
14533 --tail_len; 14538 --tail_len;
14534 ++tail; 14539 ++tail;
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
14682 move_events = 0; 14687 move_events = 0;
14683 14688
14684 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler); 14689 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler);
14685 14690
14686 // Generate new code objects sparsely distributed across several 14691 // Generate new code objects sparsely distributed across several
14687 // different fragmented code-space pages. 14692 // different fragmented code-space pages.
14688 const int kIterations = 10; 14693 const int kIterations = 10;
14689 for (int i = 0; i < kIterations; ++i) { 14694 for (int i = 0; i < kIterations; ++i) {
14690 LocalContext env(isolate); 14695 LocalContext env(isolate);
14691 i::AlwaysAllocateScope always_allocate(i_isolate); 14696 i::AlwaysAllocateScope always_allocate(i_isolate);
14692 SimulateFullSpace(heap->code_space()); 14697 SimulateFullSpace(i::FLAG_ignition ? heap->old_space()
14698 : heap->code_space());
14693 CompileRun(script); 14699 CompileRun(script);
14694 14700
14695 // Keep a strong reference to the code object in the handle scope. 14701 // Keep a strong reference to the code object in the handle scope.
14696 i::Handle<i::Code> bar_code( 14702 i::Handle<i::Code> bar_code(
14697 i::Handle<i::JSFunction>::cast( 14703 i::Handle<i::JSFunction>::cast(
14698 v8::Utils::OpenHandle(*env->Global() 14704 v8::Utils::OpenHandle(*env->Global()
14699 ->Get(env.local(), v8_str("bar")) 14705 ->Get(env.local(), v8_str("bar"))
14700 .ToLocalChecked())) 14706 .ToLocalChecked()))
14701 ->code()); 14707 ->code());
14702 i::Handle<i::Code> foo_code( 14708 i::Handle<i::Code> foo_code(
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
15123 ->Set(context.local(), v8_str("obj_2"), instance_2) 15129 ->Set(context.local(), v8_str("obj_2"), instance_2)
15124 .FromJust()); 15130 .FromJust());
15125 15131
15126 Local<Value> value_2 = CompileRun("obj_2.a"); 15132 Local<Value> value_2 = CompileRun("obj_2.a");
15127 CHECK(value_2.IsEmpty()); 15133 CHECK(value_2.IsEmpty());
15128 } 15134 }
15129 15135
15130 15136
15131 // Tests that ScriptData can be serialized and deserialized. 15137 // Tests that ScriptData can be serialized and deserialized.
15132 TEST(PreCompileSerialization) { 15138 TEST(PreCompileSerialization) {
15139 // Producing cached parser data while parsing eagerly is not supported.
15140 if (!i::FLAG_lazy || i::FLAG_ignition) return;
15141
15133 v8::V8::Initialize(); 15142 v8::V8::Initialize();
15134 LocalContext env; 15143 LocalContext env;
15135 v8::Isolate* isolate = env->GetIsolate(); 15144 v8::Isolate* isolate = env->GetIsolate();
15136 HandleScope handle_scope(isolate); 15145 HandleScope handle_scope(isolate);
15137 15146
15138 i::FLAG_min_preparse_length = 0; 15147 i::FLAG_min_preparse_length = 0;
15139 const char* script = "function foo(a) { return a+1; }"; 15148 const char* script = "function foo(a) { return a+1; }";
15140 v8::ScriptCompiler::Source source(v8_str(script)); 15149 v8::ScriptCompiler::Source source(v8_str(script));
15141 v8::ScriptCompiler::Compile(env.local(), &source, 15150 v8::ScriptCompiler::Compile(env.local(), &source,
15142 v8::ScriptCompiler::kProduceParserCache) 15151 v8::ScriptCompiler::kProduceParserCache)
(...skipping 8911 matching lines...) Expand 10 before | Expand all | Expand 10 after
24054 CHECK_EQ( 24063 CHECK_EQ(
24055 42, 24064 42,
24056 script->Run(context).ToLocalChecked()->Int32Value(context).FromJust()); 24065 script->Run(context).ToLocalChecked()->Int32Value(context).FromJust());
24057 } 24066 }
24058 24067
24059 24068
24060 TEST(InvalidCacheData) { 24069 TEST(InvalidCacheData) {
24061 v8::V8::Initialize(); 24070 v8::V8::Initialize();
24062 v8::HandleScope scope(CcTest::isolate()); 24071 v8::HandleScope scope(CcTest::isolate());
24063 LocalContext context; 24072 LocalContext context;
24064 TestInvalidCacheData(v8::ScriptCompiler::kConsumeParserCache); 24073 if (i::FLAG_lazy && !i::FLAG_ignition) {
24074 // Cached parser data is not consumed while parsing eagerly.
24075 TestInvalidCacheData(v8::ScriptCompiler::kConsumeParserCache);
24076 }
24065 TestInvalidCacheData(v8::ScriptCompiler::kConsumeCodeCache); 24077 TestInvalidCacheData(v8::ScriptCompiler::kConsumeCodeCache);
24066 } 24078 }
24067 24079
24068 24080
24069 TEST(ParserCacheRejectedGracefully) { 24081 TEST(ParserCacheRejectedGracefully) {
24082 // Producing cached parser data while parsing eagerly is not supported.
24083 if (!i::FLAG_lazy || i::FLAG_ignition) return;
24084
24070 i::FLAG_min_preparse_length = 0; 24085 i::FLAG_min_preparse_length = 0;
24071 v8::V8::Initialize(); 24086 v8::V8::Initialize();
24072 v8::HandleScope scope(CcTest::isolate()); 24087 v8::HandleScope scope(CcTest::isolate());
24073 LocalContext context; 24088 LocalContext context;
24074 // Produce valid cached data. 24089 // Produce valid cached data.
24075 v8::ScriptOrigin origin(v8_str("origin")); 24090 v8::ScriptOrigin origin(v8_str("origin"));
24076 v8::Local<v8::String> source_str = v8_str("function foo() {}"); 24091 v8::Local<v8::String> source_str = v8_str("function foo() {}");
24077 v8::ScriptCompiler::Source source(source_str, origin); 24092 v8::ScriptCompiler::Source source(source_str, origin);
24078 v8::Local<v8::Script> script = 24093 v8::Local<v8::Script> script =
24079 v8::ScriptCompiler::Compile(context.local(), &source, 24094 v8::ScriptCompiler::Compile(context.local(), &source,
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
24849 CHECK(proxy->GetTarget()->SameValue(target)); 24864 CHECK(proxy->GetTarget()->SameValue(target));
24850 CHECK(proxy->GetHandler()->SameValue(handler)); 24865 CHECK(proxy->GetHandler()->SameValue(handler));
24851 24866
24852 proxy->Revoke(); 24867 proxy->Revoke();
24853 CHECK(proxy->IsProxy()); 24868 CHECK(proxy->IsProxy());
24854 CHECK(!target->IsProxy()); 24869 CHECK(!target->IsProxy());
24855 CHECK(proxy->IsRevoked()); 24870 CHECK(proxy->IsRevoked());
24856 CHECK(proxy->GetTarget()->SameValue(target)); 24871 CHECK(proxy->GetTarget()->SameValue(target));
24857 CHECK(proxy->GetHandler()->IsNull()); 24872 CHECK(proxy->GetHandler()->IsNull());
24858 } 24873 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698