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

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

Issue 570993002: Introduce Isolate::CreateParams (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/third_party/vtune/vtune-jit.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 14153 matching lines...) Expand 10 before | Expand all | Expand 10 after
14164 "bar();"); 14164 "bar();");
14165 CHECK(value->IsNumber()); 14165 CHECK(value->IsNumber());
14166 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value()); 14166 CHECK_EQ(9801.0, v8::Number::Cast(*value)->Value());
14167 14167
14168 env->Exit(); 14168 env->Exit();
14169 } 14169 }
14170 14170
14171 14171
14172 void SetFunctionEntryHookTest::RunTest() { 14172 void SetFunctionEntryHookTest::RunTest() {
14173 // Work in a new isolate throughout. 14173 // Work in a new isolate throughout.
14174 v8::Isolate* isolate = v8::Isolate::New(); 14174 v8::Isolate::CreateParams create_params;
14175 14175 create_params.entry_hook = EntryHook;
14176 // Test setting the entry hook on the new isolate. 14176 create_params.code_event_handler = JitEvent;
14177 CHECK(v8::V8::SetFunctionEntryHook(isolate, EntryHook)); 14177 v8::Isolate* isolate = v8::Isolate::New(create_params);
14178
14179 // Replacing the hook, once set should fail.
14180 CHECK_EQ(false, v8::V8::SetFunctionEntryHook(isolate, EntryHook));
14181 14178
14182 { 14179 {
14183 v8::Isolate::Scope scope(isolate); 14180 v8::Isolate::Scope scope(isolate);
14184 14181
14185 v8::V8::SetJitCodeEventHandler(v8::kJitCodeEventDefault, JitEvent);
14186
14187 RunLoopInNewEnv(isolate); 14182 RunLoopInNewEnv(isolate);
14188 14183
14189 // Check the exepected invocation counts. 14184 // Check the exepected invocation counts.
14190 CHECK_EQ(2, CountInvocations(NULL, "bar")); 14185 CHECK_EQ(2, CountInvocations(NULL, "bar"));
14191 CHECK_EQ(200, CountInvocations("bar", "foo")); 14186 CHECK_EQ(200, CountInvocations("bar", "foo"));
14192 CHECK_EQ(200, CountInvocations(NULL, "foo")); 14187 CHECK_EQ(200, CountInvocations(NULL, "foo"));
14193 14188
14194 // Verify that we have an entry hook on some specific stubs. 14189 // Verify that we have an entry hook on some specific stubs.
14195 CHECK_NE(0, CountInvocations(NULL, "CEntryStub")); 14190 CHECK_NE(0, CountInvocations(NULL, "CEntryStub"));
14196 CHECK_NE(0, CountInvocations(NULL, "JSEntryStub")); 14191 CHECK_NE(0, CountInvocations(NULL, "JSEntryStub"));
14197 CHECK_NE(0, CountInvocations(NULL, "JSEntryTrampoline")); 14192 CHECK_NE(0, CountInvocations(NULL, "JSEntryTrampoline"));
14198 } 14193 }
14199 isolate->Dispose(); 14194 isolate->Dispose();
14200 14195
14201 Reset(); 14196 Reset();
14202 14197
14203 // Make sure a second isolate is unaffected by the previous entry hook. 14198 // Make sure a second isolate is unaffected by the previous entry hook.
14204 isolate = v8::Isolate::New(); 14199 isolate = v8::Isolate::New();
14205 { 14200 {
14206 v8::Isolate::Scope scope(isolate); 14201 v8::Isolate::Scope scope(isolate);
14207 14202
14208 // Reset the entry count to zero and set the entry hook. 14203 // Reset the entry count to zero and set the entry hook.
14209 RunLoopInNewEnv(isolate); 14204 RunLoopInNewEnv(isolate);
14210 14205
14211 // We should record no invocations in this isolate. 14206 // We should record no invocations in this isolate.
14212 CHECK_EQ(0, static_cast<int>(invocations_.size())); 14207 CHECK_EQ(0, static_cast<int>(invocations_.size()));
14213 } 14208 }
14214 // Since the isolate has been used, we shouldn't be able to set an entry
14215 // hook anymore.
14216 CHECK_EQ(false, v8::V8::SetFunctionEntryHook(isolate, EntryHook));
14217 14209
14218 isolate->Dispose(); 14210 isolate->Dispose();
14219 } 14211 }
14220 14212
14221 14213
14222 TEST(SetFunctionEntryHook) { 14214 TEST(SetFunctionEntryHook) {
14223 // FunctionEntryHook does not work well with experimental natives. 14215 // FunctionEntryHook does not work well with experimental natives.
14224 // Experimental natives are compiled during snapshot deserialization. 14216 // Experimental natives are compiled during snapshot deserialization.
14225 // This test breaks because InstallGetter (function from snapshot that 14217 // This test breaks because InstallGetter (function from snapshot that
14226 // only gets called from experimental natives) is compiled with entry hooks. 14218 // only gets called from experimental natives) is compiled with entry hooks.
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
14400 v8::HandleScope scope(isolate); 14392 v8::HandleScope scope(isolate);
14401 i::HashMap code(MatchPointers); 14393 i::HashMap code(MatchPointers);
14402 code_map = &code; 14394 code_map = &code;
14403 14395
14404 i::HashMap lineinfo(MatchPointers); 14396 i::HashMap lineinfo(MatchPointers);
14405 jitcode_line_info = &lineinfo; 14397 jitcode_line_info = &lineinfo;
14406 14398
14407 saw_bar = 0; 14399 saw_bar = 0;
14408 move_events = 0; 14400 move_events = 0;
14409 14401
14410 V8::SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler); 14402 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler);
14411 14403
14412 // Generate new code objects sparsely distributed across several 14404 // Generate new code objects sparsely distributed across several
14413 // different fragmented code-space pages. 14405 // different fragmented code-space pages.
14414 const int kIterations = 10; 14406 const int kIterations = 10;
14415 for (int i = 0; i < kIterations; ++i) { 14407 for (int i = 0; i < kIterations; ++i) {
14416 LocalContext env(isolate); 14408 LocalContext env(isolate);
14417 i::AlwaysAllocateScope always_allocate(i_isolate); 14409 i::AlwaysAllocateScope always_allocate(i_isolate);
14418 SimulateFullSpace(heap->code_space()); 14410 SimulateFullSpace(heap->code_space());
14419 CompileRun(script); 14411 CompileRun(script);
14420 14412
14421 // Keep a strong reference to the code object in the handle scope. 14413 // Keep a strong reference to the code object in the handle scope.
14422 i::Handle<i::Code> bar_code(i::Handle<i::JSFunction>::cast( 14414 i::Handle<i::Code> bar_code(i::Handle<i::JSFunction>::cast(
14423 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("bar"))))->code()); 14415 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("bar"))))->code());
14424 i::Handle<i::Code> foo_code(i::Handle<i::JSFunction>::cast( 14416 i::Handle<i::Code> foo_code(i::Handle<i::JSFunction>::cast(
14425 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("foo"))))->code()); 14417 v8::Utils::OpenHandle(*env->Global()->Get(v8_str("foo"))))->code());
14426 14418
14427 // Clear the compilation cache to get more wastage. 14419 // Clear the compilation cache to get more wastage.
14428 reinterpret_cast<i::Isolate*>(isolate)->compilation_cache()->Clear(); 14420 reinterpret_cast<i::Isolate*>(isolate)->compilation_cache()->Clear();
14429 } 14421 }
14430 14422
14431 // Force code movement. 14423 // Force code movement.
14432 heap->CollectAllAvailableGarbage("TestSetJitCodeEventHandler"); 14424 heap->CollectAllAvailableGarbage("TestSetJitCodeEventHandler");
14433 14425
14434 V8::SetJitCodeEventHandler(v8::kJitCodeEventDefault, NULL); 14426 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, NULL);
14435 14427
14436 CHECK_LE(kIterations, saw_bar); 14428 CHECK_LE(kIterations, saw_bar);
14437 CHECK_LT(0, move_events); 14429 CHECK_LT(0, move_events);
14438 14430
14439 code_map = NULL; 14431 code_map = NULL;
14440 jitcode_line_info = NULL; 14432 jitcode_line_info = NULL;
14441 } 14433 }
14442 14434
14443 isolate->Exit(); 14435 isolate->Exit();
14444 isolate->Dispose(); 14436 isolate->Dispose();
14445 14437
14446 // Do this in a new isolate. 14438 // Do this in a new isolate.
14447 isolate = v8::Isolate::New(); 14439 isolate = v8::Isolate::New();
14448 isolate->Enter(); 14440 isolate->Enter();
14449 14441
14450 // Verify that we get callbacks for existing code objects when we 14442 // Verify that we get callbacks for existing code objects when we
14451 // request enumeration of existing code. 14443 // request enumeration of existing code.
14452 { 14444 {
14453 v8::HandleScope scope(isolate); 14445 v8::HandleScope scope(isolate);
14454 LocalContext env(isolate); 14446 LocalContext env(isolate);
14455 CompileRun(script); 14447 CompileRun(script);
14456 14448
14457 // Now get code through initial iteration. 14449 // Now get code through initial iteration.
14458 i::HashMap code(MatchPointers); 14450 i::HashMap code(MatchPointers);
14459 code_map = &code; 14451 code_map = &code;
14460 14452
14461 i::HashMap lineinfo(MatchPointers); 14453 i::HashMap lineinfo(MatchPointers);
14462 jitcode_line_info = &lineinfo; 14454 jitcode_line_info = &lineinfo;
14463 14455
14464 V8::SetJitCodeEventHandler(v8::kJitCodeEventEnumExisting, event_handler); 14456 isolate->SetJitCodeEventHandler(v8::kJitCodeEventEnumExisting,
14465 V8::SetJitCodeEventHandler(v8::kJitCodeEventDefault, NULL); 14457 event_handler);
14458 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, NULL);
14466 14459
14467 jitcode_line_info = NULL; 14460 jitcode_line_info = NULL;
14468 // We expect that we got some events. Note that if we could get code removal 14461 // We expect that we got some events. Note that if we could get code removal
14469 // notifications, we could compare two collections, one created by listening 14462 // notifications, we could compare two collections, one created by listening
14470 // from the time of creation of an isolate, and the other by subscribing 14463 // from the time of creation of an isolate, and the other by subscribing
14471 // with EnumExisting. 14464 // with EnumExisting.
14472 CHECK_LT(0, code.occupancy()); 14465 CHECK_LT(0, code.occupancy());
14473 14466
14474 code_map = NULL; 14467 code_map = NULL;
14475 } 14468 }
(...skipping 8875 matching lines...) Expand 10 before | Expand all | Expand 10 after
23351 // TestSourceStream::GetMoreData won't block, so it's OK to just run the 23344 // TestSourceStream::GetMoreData won't block, so it's OK to just run the
23352 // task here in the main thread. 23345 // task here in the main thread.
23353 task->Run(); 23346 task->Run();
23354 delete task; 23347 delete task;
23355 23348
23356 const v8::ScriptCompiler::CachedData* cached_data = source.GetCachedData(); 23349 const v8::ScriptCompiler::CachedData* cached_data = source.GetCachedData();
23357 CHECK(cached_data != NULL); 23350 CHECK(cached_data != NULL);
23358 CHECK(cached_data->data != NULL); 23351 CHECK(cached_data->data != NULL);
23359 CHECK_GT(cached_data->length, 0); 23352 CHECK_GT(cached_data->length, 0);
23360 } 23353 }
OLDNEW
« no previous file with comments | « src/third_party/vtune/vtune-jit.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698