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

Side by Side Diff: test/cctest/test-cpu-profiler.cc

Issue 83343002: Remove usage of deprecated APIs from cctests (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 1 month 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 | « test/cctest/test-compiler.cc ('k') | test/cctest/test-debug.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 return NULL; 348 return NULL;
349 } 349 }
350 350
351 351
352 TEST(DeleteCpuProfile) { 352 TEST(DeleteCpuProfile) {
353 LocalContext env; 353 LocalContext env;
354 v8::HandleScope scope(env->GetIsolate()); 354 v8::HandleScope scope(env->GetIsolate());
355 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 355 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
356 356
357 CHECK_EQ(0, cpu_profiler->GetProfileCount()); 357 CHECK_EQ(0, cpu_profiler->GetProfileCount());
358 v8::Local<v8::String> name1 = v8::String::New("1"); 358 v8::Local<v8::String> name1 = v8::String::NewFromUtf8(env->GetIsolate(), "1");
359 cpu_profiler->StartCpuProfiling(name1); 359 cpu_profiler->StartCpuProfiling(name1);
360 const v8::CpuProfile* p1 = cpu_profiler->StopCpuProfiling(name1); 360 const v8::CpuProfile* p1 = cpu_profiler->StopCpuProfiling(name1);
361 CHECK_NE(NULL, p1); 361 CHECK_NE(NULL, p1);
362 CHECK_EQ(1, cpu_profiler->GetProfileCount()); 362 CHECK_EQ(1, cpu_profiler->GetProfileCount());
363 unsigned uid1 = p1->GetUid(); 363 unsigned uid1 = p1->GetUid();
364 CHECK_EQ(p1, FindCpuProfile(cpu_profiler, uid1)); 364 CHECK_EQ(p1, FindCpuProfile(cpu_profiler, uid1));
365 const_cast<v8::CpuProfile*>(p1)->Delete(); 365 const_cast<v8::CpuProfile*>(p1)->Delete();
366 CHECK_EQ(0, cpu_profiler->GetProfileCount()); 366 CHECK_EQ(0, cpu_profiler->GetProfileCount());
367 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1)); 367 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1));
368 368
369 v8::Local<v8::String> name2 = v8::String::New("2"); 369 v8::Local<v8::String> name2 = v8::String::NewFromUtf8(env->GetIsolate(), "2");
370 cpu_profiler->StartCpuProfiling(name2); 370 cpu_profiler->StartCpuProfiling(name2);
371 const v8::CpuProfile* p2 = cpu_profiler->StopCpuProfiling(name2); 371 const v8::CpuProfile* p2 = cpu_profiler->StopCpuProfiling(name2);
372 CHECK_NE(NULL, p2); 372 CHECK_NE(NULL, p2);
373 CHECK_EQ(1, cpu_profiler->GetProfileCount()); 373 CHECK_EQ(1, cpu_profiler->GetProfileCount());
374 unsigned uid2 = p2->GetUid(); 374 unsigned uid2 = p2->GetUid();
375 CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2)); 375 CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid2));
376 CHECK_EQ(p2, FindCpuProfile(cpu_profiler, uid2)); 376 CHECK_EQ(p2, FindCpuProfile(cpu_profiler, uid2));
377 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1)); 377 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1));
378 v8::Local<v8::String> name3 = v8::String::New("3"); 378 v8::Local<v8::String> name3 = v8::String::NewFromUtf8(env->GetIsolate(), "3");
379 cpu_profiler->StartCpuProfiling(name3); 379 cpu_profiler->StartCpuProfiling(name3);
380 const v8::CpuProfile* p3 = cpu_profiler->StopCpuProfiling(name3); 380 const v8::CpuProfile* p3 = cpu_profiler->StopCpuProfiling(name3);
381 CHECK_NE(NULL, p3); 381 CHECK_NE(NULL, p3);
382 CHECK_EQ(2, cpu_profiler->GetProfileCount()); 382 CHECK_EQ(2, cpu_profiler->GetProfileCount());
383 unsigned uid3 = p3->GetUid(); 383 unsigned uid3 = p3->GetUid();
384 CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3)); 384 CHECK_NE(static_cast<int>(uid1), static_cast<int>(uid3));
385 CHECK_EQ(p3, FindCpuProfile(cpu_profiler, uid3)); 385 CHECK_EQ(p3, FindCpuProfile(cpu_profiler, uid3));
386 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1)); 386 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1));
387 const_cast<v8::CpuProfile*>(p2)->Delete(); 387 const_cast<v8::CpuProfile*>(p2)->Delete();
388 CHECK_EQ(1, cpu_profiler->GetProfileCount()); 388 CHECK_EQ(1, cpu_profiler->GetProfileCount());
389 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid2)); 389 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid2));
390 CHECK_EQ(p3, FindCpuProfile(cpu_profiler, uid3)); 390 CHECK_EQ(p3, FindCpuProfile(cpu_profiler, uid3));
391 const_cast<v8::CpuProfile*>(p3)->Delete(); 391 const_cast<v8::CpuProfile*>(p3)->Delete();
392 CHECK_EQ(0, cpu_profiler->GetProfileCount()); 392 CHECK_EQ(0, cpu_profiler->GetProfileCount());
393 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid3)); 393 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid3));
394 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid2)); 394 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid2));
395 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1)); 395 CHECK_EQ(NULL, FindCpuProfile(cpu_profiler, uid1));
396 } 396 }
397 397
398 398
399 TEST(ProfileStartEndTime) { 399 TEST(ProfileStartEndTime) {
400 LocalContext env; 400 LocalContext env;
401 v8::HandleScope scope(env->GetIsolate()); 401 v8::HandleScope scope(env->GetIsolate());
402 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 402 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
403 403
404 v8::Local<v8::String> profile_name = v8::String::New("test"); 404 v8::Local<v8::String> profile_name =
405 v8::String::NewFromUtf8(env->GetIsolate(), "test");
405 cpu_profiler->StartCpuProfiling(profile_name); 406 cpu_profiler->StartCpuProfiling(profile_name);
406 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name); 407 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
407 CHECK(profile->GetStartTime() <= profile->GetEndTime()); 408 CHECK(profile->GetStartTime() <= profile->GetEndTime());
408 } 409 }
409 410
410 411
411 static const v8::CpuProfile* RunProfiler( 412 static const v8::CpuProfile* RunProfiler(
412 LocalContext& env, v8::Handle<v8::Function> function, 413 LocalContext& env, v8::Handle<v8::Function> function,
413 v8::Handle<v8::Value> argv[], int argc, 414 v8::Handle<v8::Value> argv[], int argc,
414 unsigned min_js_samples) { 415 unsigned min_js_samples) {
415 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 416 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
416 v8::Local<v8::String> profile_name = v8::String::New("my_profile"); 417 v8::Local<v8::String> profile_name =
418 v8::String::NewFromUtf8(env->GetIsolate(), "my_profile");
417 419
418 cpu_profiler->StartCpuProfiling(profile_name); 420 cpu_profiler->StartCpuProfiling(profile_name);
419 421
420 i::Sampler* sampler = 422 i::Sampler* sampler =
421 reinterpret_cast<i::Isolate*>(env->GetIsolate())->logger()->sampler(); 423 reinterpret_cast<i::Isolate*>(env->GetIsolate())->logger()->sampler();
422 sampler->StartCountingSamples(); 424 sampler->StartCountingSamples();
423 do { 425 do {
424 function->Call(env->Global(), argc, argv); 426 function->Call(env->Global(), argc, argv);
425 } while (sampler->js_and_external_sample_count() < min_js_samples); 427 } while (sampler->js_and_external_sample_count() < min_js_samples);
426 428
(...skipping 26 matching lines...) Expand all
453 CHECK(ContainsString(name, names)); 455 CHECK(ContainsString(name, names));
454 // Check that there are no duplicates. 456 // Check that there are no duplicates.
455 for (int j = 0; j < count; j++) { 457 for (int j = 0; j < count; j++) {
456 if (j == i) continue; 458 if (j == i) continue;
457 CHECK_NE(name, node->GetChild(j)->GetFunctionName()); 459 CHECK_NE(name, node->GetChild(j)->GetFunctionName());
458 } 460 }
459 } 461 }
460 } 462 }
461 463
462 464
463 static const v8::CpuProfileNode* FindChild(const v8::CpuProfileNode* node, 465 static const v8::CpuProfileNode* FindChild(v8::Isolate* isolate,
466 const v8::CpuProfileNode* node,
464 const char* name) { 467 const char* name) {
465 int count = node->GetChildrenCount(); 468 int count = node->GetChildrenCount();
466 v8::Handle<v8::String> nameHandle = v8::String::New(name); 469 v8::Handle<v8::String> nameHandle = v8::String::NewFromUtf8(isolate, name);
467 for (int i = 0; i < count; i++) { 470 for (int i = 0; i < count; i++) {
468 const v8::CpuProfileNode* child = node->GetChild(i); 471 const v8::CpuProfileNode* child = node->GetChild(i);
469 if (nameHandle->Equals(child->GetFunctionName())) return child; 472 if (nameHandle->Equals(child->GetFunctionName())) return child;
470 } 473 }
471 return NULL; 474 return NULL;
472 } 475 }
473 476
474 477
475 static const v8::CpuProfileNode* GetChild(const v8::CpuProfileNode* node, 478 static const v8::CpuProfileNode* GetChild(v8::Isolate* isolate,
479 const v8::CpuProfileNode* node,
476 const char* name) { 480 const char* name) {
477 const v8::CpuProfileNode* result = FindChild(node, name); 481 const v8::CpuProfileNode* result = FindChild(isolate, node, name);
478 if (!result) { 482 if (!result) {
479 char buffer[100]; 483 char buffer[100];
480 i::OS::SNPrintF(Vector<char>(buffer, ARRAY_SIZE(buffer)), 484 i::OS::SNPrintF(Vector<char>(buffer, ARRAY_SIZE(buffer)),
481 "Failed to GetChild: %s", name); 485 "Failed to GetChild: %s", name);
482 FATAL(buffer); 486 FATAL(buffer);
483 } 487 }
484 return result; 488 return result;
485 } 489 }
486 490
487 491
488 static void CheckSimpleBranch(const v8::CpuProfileNode* node, 492 static void CheckSimpleBranch(v8::Isolate* isolate,
493 const v8::CpuProfileNode* node,
489 const char* names[], int length) { 494 const char* names[], int length) {
490 for (int i = 0; i < length; i++) { 495 for (int i = 0; i < length; i++) {
491 const char* name = names[i]; 496 const char* name = names[i];
492 node = GetChild(node, name); 497 node = GetChild(isolate, node, name);
493 int expectedChildrenCount = (i == length - 1) ? 0 : 1; 498 int expectedChildrenCount = (i == length - 1) ? 0 : 1;
494 CHECK_EQ(expectedChildrenCount, node->GetChildrenCount()); 499 CHECK_EQ(expectedChildrenCount, node->GetChildrenCount());
495 } 500 }
496 } 501 }
497 502
498 503
499 static const char* cpu_profiler_test_source = "function loop(timeout) {\n" 504 static const char* cpu_profiler_test_source = "function loop(timeout) {\n"
500 " this.mmm = 0;\n" 505 " this.mmm = 0;\n"
501 " var start = Date.now();\n" 506 " var start = Date.now();\n"
502 " while (Date.now() - start < timeout) {\n" 507 " while (Date.now() - start < timeout) {\n"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 // 522 522 loop [-1] 547 // 522 522 loop [-1]
543 // 263 0 bar [-1] 548 // 263 0 bar [-1]
544 // 263 1 delay [-1] 549 // 263 1 delay [-1]
545 // 262 262 loop [-1] 550 // 262 262 loop [-1]
546 // 2 2 (program) [-1] 551 // 2 2 (program) [-1]
547 // 6 6 (garbage collector) [-1] 552 // 6 6 (garbage collector) [-1]
548 TEST(CollectCpuProfile) { 553 TEST(CollectCpuProfile) {
549 LocalContext env; 554 LocalContext env;
550 v8::HandleScope scope(env->GetIsolate()); 555 v8::HandleScope scope(env->GetIsolate());
551 556
552 v8::Script::Compile(v8::String::New(cpu_profiler_test_source))->Run(); 557 v8::Script::Compile(v8::String::NewFromUtf8(env->GetIsolate(),
558 cpu_profiler_test_source))->Run();
553 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 559 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
554 env->Global()->Get(v8::String::New("start"))); 560 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
555 561
556 int32_t profiling_interval_ms = 200; 562 int32_t profiling_interval_ms = 200;
557 v8::Handle<v8::Value> args[] = { v8::Integer::New(profiling_interval_ms) }; 563 v8::Handle<v8::Value> args[] = { v8::Integer::New(profiling_interval_ms) };
558 const v8::CpuProfile* profile = 564 const v8::CpuProfile* profile =
559 RunProfiler(env, function, args, ARRAY_SIZE(args), 200); 565 RunProfiler(env, function, args, ARRAY_SIZE(args), 200);
560 function->Call(env->Global(), ARRAY_SIZE(args), args); 566 function->Call(env->Global(), ARRAY_SIZE(args), args);
561 567
562 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 568 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
563 569
564 ScopedVector<v8::Handle<v8::String> > names(3); 570 ScopedVector<v8::Handle<v8::String> > names(3);
565 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 571 names[0] = v8::String::NewFromUtf8(
566 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 572 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
567 names[2] = v8::String::New("start"); 573 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
574 ProfileGenerator::kProgramEntryName);
575 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
568 CheckChildrenNames(root, names); 576 CheckChildrenNames(root, names);
569 577
570 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 578 const v8::CpuProfileNode* startNode =
579 GetChild(env->GetIsolate(), root, "start");
571 CHECK_EQ(1, startNode->GetChildrenCount()); 580 CHECK_EQ(1, startNode->GetChildrenCount());
572 581
573 const v8::CpuProfileNode* fooNode = GetChild(startNode, "foo"); 582 const v8::CpuProfileNode* fooNode =
583 GetChild(env->GetIsolate(), startNode, "foo");
574 CHECK_EQ(3, fooNode->GetChildrenCount()); 584 CHECK_EQ(3, fooNode->GetChildrenCount());
575 585
576 const char* barBranch[] = { "bar", "delay", "loop" }; 586 const char* barBranch[] = { "bar", "delay", "loop" };
577 CheckSimpleBranch(fooNode, barBranch, ARRAY_SIZE(barBranch)); 587 CheckSimpleBranch(env->GetIsolate(), fooNode, barBranch,
588 ARRAY_SIZE(barBranch));
578 const char* bazBranch[] = { "baz", "delay", "loop" }; 589 const char* bazBranch[] = { "baz", "delay", "loop" };
579 CheckSimpleBranch(fooNode, bazBranch, ARRAY_SIZE(bazBranch)); 590 CheckSimpleBranch(env->GetIsolate(), fooNode, bazBranch,
591 ARRAY_SIZE(bazBranch));
580 const char* delayBranch[] = { "delay", "loop" }; 592 const char* delayBranch[] = { "delay", "loop" };
581 CheckSimpleBranch(fooNode, delayBranch, ARRAY_SIZE(delayBranch)); 593 CheckSimpleBranch(env->GetIsolate(), fooNode, delayBranch,
594 ARRAY_SIZE(delayBranch));
582 595
583 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 596 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
584 cpu_profiler->DeleteAllCpuProfiles(); 597 cpu_profiler->DeleteAllCpuProfiles();
585 } 598 }
586 599
587 600
588 601
589 static const char* cpu_profiler_test_source2 = "function loop() {}\n" 602 static const char* cpu_profiler_test_source2 = "function loop() {}\n"
590 "function delay() { loop(); }\n" 603 "function delay() { loop(); }\n"
591 "function start(count) {\n" 604 "function start(count) {\n"
(...skipping 11 matching lines...) Expand all
603 // [Top down]: 616 // [Top down]:
604 // 135 0 (root) [-1] #1 617 // 135 0 (root) [-1] #1
605 // 121 72 start [-1] #3 618 // 121 72 start [-1] #3
606 // 49 33 delay [-1] #4 619 // 49 33 delay [-1] #4
607 // 16 16 loop [-1] #5 620 // 16 16 loop [-1] #5
608 // 14 14 (program) [-1] #2 621 // 14 14 (program) [-1] #2
609 TEST(SampleWhenFrameIsNotSetup) { 622 TEST(SampleWhenFrameIsNotSetup) {
610 LocalContext env; 623 LocalContext env;
611 v8::HandleScope scope(env->GetIsolate()); 624 v8::HandleScope scope(env->GetIsolate());
612 625
613 v8::Script::Compile(v8::String::New(cpu_profiler_test_source2))->Run(); 626 v8::Script::Compile(v8::String::NewFromUtf8(
627 env->GetIsolate(), cpu_profiler_test_source2))->Run();
614 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 628 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
615 env->Global()->Get(v8::String::New("start"))); 629 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
616 630
617 int32_t repeat_count = 100; 631 int32_t repeat_count = 100;
618 #if defined(USE_SIMULATOR) 632 #if defined(USE_SIMULATOR)
619 // Simulators are much slower. 633 // Simulators are much slower.
620 repeat_count = 1; 634 repeat_count = 1;
621 #endif 635 #endif
622 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) }; 636 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
623 const v8::CpuProfile* profile = 637 const v8::CpuProfile* profile =
624 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 638 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
625 639
626 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 640 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
627 641
628 ScopedVector<v8::Handle<v8::String> > names(3); 642 ScopedVector<v8::Handle<v8::String> > names(3);
629 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 643 names[0] = v8::String::NewFromUtf8(
630 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 644 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
631 names[2] = v8::String::New("start"); 645 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
646 ProfileGenerator::kProgramEntryName);
647 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
632 CheckChildrenNames(root, names); 648 CheckChildrenNames(root, names);
633 649
634 const v8::CpuProfileNode* startNode = FindChild(root, "start"); 650 const v8::CpuProfileNode* startNode =
651 FindChild(env->GetIsolate(), root, "start");
635 // On slow machines there may be no meaningfull samples at all, skip the 652 // On slow machines there may be no meaningfull samples at all, skip the
636 // check there. 653 // check there.
637 if (startNode && startNode->GetChildrenCount() > 0) { 654 if (startNode && startNode->GetChildrenCount() > 0) {
638 CHECK_EQ(1, startNode->GetChildrenCount()); 655 CHECK_EQ(1, startNode->GetChildrenCount());
639 const v8::CpuProfileNode* delayNode = GetChild(startNode, "delay"); 656 const v8::CpuProfileNode* delayNode =
657 GetChild(env->GetIsolate(), startNode, "delay");
640 if (delayNode->GetChildrenCount() > 0) { 658 if (delayNode->GetChildrenCount() > 0) {
641 CHECK_EQ(1, delayNode->GetChildrenCount()); 659 CHECK_EQ(1, delayNode->GetChildrenCount());
642 GetChild(delayNode, "loop"); 660 GetChild(env->GetIsolate(), delayNode, "loop");
643 } 661 }
644 } 662 }
645 663
646 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 664 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
647 cpu_profiler->DeleteAllCpuProfiles(); 665 cpu_profiler->DeleteAllCpuProfiles();
648 } 666 }
649 667
650 668
651 static const char* native_accessor_test_source = "function start(count) {\n" 669 static const char* native_accessor_test_source = "function start(count) {\n"
652 " for (var i = 0; i < count; i++) {\n" 670 " for (var i = 0; i < count; i++) {\n"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 732
715 733
716 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(); 734 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New();
717 v8::Local<v8::ObjectTemplate> instance_template = 735 v8::Local<v8::ObjectTemplate> instance_template =
718 func_template->InstanceTemplate(); 736 func_template->InstanceTemplate();
719 737
720 TestApiCallbacks accessors(100); 738 TestApiCallbacks accessors(100);
721 v8::Local<v8::External> data = 739 v8::Local<v8::External> data =
722 v8::External::New(env->GetIsolate(), &accessors); 740 v8::External::New(env->GetIsolate(), &accessors);
723 instance_template->SetAccessor( 741 instance_template->SetAccessor(
724 v8::String::New("foo"), &TestApiCallbacks::Getter, 742 v8::String::NewFromUtf8(env->GetIsolate(), "foo"),
725 &TestApiCallbacks::Setter, data); 743 &TestApiCallbacks::Getter, &TestApiCallbacks::Setter, data);
726 v8::Local<v8::Function> func = func_template->GetFunction(); 744 v8::Local<v8::Function> func = func_template->GetFunction();
727 v8::Local<v8::Object> instance = func->NewInstance(); 745 v8::Local<v8::Object> instance = func->NewInstance();
728 env->Global()->Set(v8::String::New("instance"), instance); 746 env->Global()->Set(v8::String::NewFromUtf8(env->GetIsolate(), "instance"),
747 instance);
729 748
730 v8::Script::Compile(v8::String::New(native_accessor_test_source))->Run(); 749 v8::Script::Compile(
750 v8::String::NewFromUtf8(env->GetIsolate(), native_accessor_test_source))
751 ->Run();
731 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 752 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
732 env->Global()->Get(v8::String::New("start"))); 753 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
733 754
734 int32_t repeat_count = 1; 755 int32_t repeat_count = 1;
735 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) }; 756 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
736 const v8::CpuProfile* profile = 757 const v8::CpuProfile* profile =
737 RunProfiler(env, function, args, ARRAY_SIZE(args), 180); 758 RunProfiler(env, function, args, ARRAY_SIZE(args), 180);
738 759
739 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 760 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
740 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 761 const v8::CpuProfileNode* startNode =
741 GetChild(startNode, "get foo"); 762 GetChild(env->GetIsolate(), root, "start");
742 GetChild(startNode, "set foo"); 763 GetChild(env->GetIsolate(), startNode, "get foo");
764 GetChild(env->GetIsolate(), startNode, "set foo");
743 765
744 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 766 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
745 cpu_profiler->DeleteAllCpuProfiles(); 767 cpu_profiler->DeleteAllCpuProfiles();
746 } 768 }
747 769
748 770
749 // Test that native accessors are properly reported in the CPU profile. 771 // Test that native accessors are properly reported in the CPU profile.
750 // This test makes sure that the accessors are called enough times to become 772 // This test makes sure that the accessors are called enough times to become
751 // hot and to trigger optimizations. 773 // hot and to trigger optimizations.
752 TEST(NativeAccessorMonomorphicIC) { 774 TEST(NativeAccessorMonomorphicIC) {
753 LocalContext env; 775 LocalContext env;
754 v8::HandleScope scope(env->GetIsolate()); 776 v8::HandleScope scope(env->GetIsolate());
755 777
756 778
757 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(); 779 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New();
758 v8::Local<v8::ObjectTemplate> instance_template = 780 v8::Local<v8::ObjectTemplate> instance_template =
759 func_template->InstanceTemplate(); 781 func_template->InstanceTemplate();
760 782
761 TestApiCallbacks accessors(1); 783 TestApiCallbacks accessors(1);
762 v8::Local<v8::External> data = 784 v8::Local<v8::External> data =
763 v8::External::New(env->GetIsolate(), &accessors); 785 v8::External::New(env->GetIsolate(), &accessors);
764 instance_template->SetAccessor( 786 instance_template->SetAccessor(
765 v8::String::New("foo"), &TestApiCallbacks::Getter, 787 v8::String::NewFromUtf8(env->GetIsolate(), "foo"),
766 &TestApiCallbacks::Setter, data); 788 &TestApiCallbacks::Getter, &TestApiCallbacks::Setter, data);
767 v8::Local<v8::Function> func = func_template->GetFunction(); 789 v8::Local<v8::Function> func = func_template->GetFunction();
768 v8::Local<v8::Object> instance = func->NewInstance(); 790 v8::Local<v8::Object> instance = func->NewInstance();
769 env->Global()->Set(v8::String::New("instance"), instance); 791 env->Global()->Set(v8::String::NewFromUtf8(env->GetIsolate(), "instance"),
792 instance);
770 793
771 v8::Script::Compile(v8::String::New(native_accessor_test_source))->Run(); 794 v8::Script::Compile(
795 v8::String::NewFromUtf8(env->GetIsolate(), native_accessor_test_source))
796 ->Run();
772 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 797 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
773 env->Global()->Get(v8::String::New("start"))); 798 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
774 799
775 { 800 {
776 // Make sure accessors ICs are in monomorphic state before starting 801 // Make sure accessors ICs are in monomorphic state before starting
777 // profiling. 802 // profiling.
778 accessors.set_warming_up(true); 803 accessors.set_warming_up(true);
779 int32_t warm_up_iterations = 3; 804 int32_t warm_up_iterations = 3;
780 v8::Handle<v8::Value> args[] = { v8::Integer::New(warm_up_iterations) }; 805 v8::Handle<v8::Value> args[] = { v8::Integer::New(warm_up_iterations) };
781 function->Call(env->Global(), ARRAY_SIZE(args), args); 806 function->Call(env->Global(), ARRAY_SIZE(args), args);
782 accessors.set_warming_up(false); 807 accessors.set_warming_up(false);
783 } 808 }
784 809
785 int32_t repeat_count = 100; 810 int32_t repeat_count = 100;
786 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) }; 811 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
787 const v8::CpuProfile* profile = 812 const v8::CpuProfile* profile =
788 RunProfiler(env, function, args, ARRAY_SIZE(args), 200); 813 RunProfiler(env, function, args, ARRAY_SIZE(args), 200);
789 814
790 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 815 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
791 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 816 const v8::CpuProfileNode* startNode =
792 GetChild(startNode, "get foo"); 817 GetChild(env->GetIsolate(), root, "start");
793 GetChild(startNode, "set foo"); 818 GetChild(env->GetIsolate(), startNode, "get foo");
819 GetChild(env->GetIsolate(), startNode, "set foo");
794 820
795 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 821 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
796 cpu_profiler->DeleteAllCpuProfiles(); 822 cpu_profiler->DeleteAllCpuProfiles();
797 } 823 }
798 824
799 825
800 static const char* native_method_test_source = "function start(count) {\n" 826 static const char* native_method_test_source = "function start(count) {\n"
801 " for (var i = 0; i < count; i++) {\n" 827 " for (var i = 0; i < count; i++) {\n"
802 " instance.fooMethod();\n" 828 " instance.fooMethod();\n"
803 " }\n" 829 " }\n"
804 "}\n"; 830 "}\n";
805 831
806 832
807 TEST(NativeMethodUninitializedIC) { 833 TEST(NativeMethodUninitializedIC) {
808 LocalContext env; 834 LocalContext env;
809 v8::HandleScope scope(env->GetIsolate()); 835 v8::HandleScope scope(env->GetIsolate());
810 836
811 TestApiCallbacks callbacks(100); 837 TestApiCallbacks callbacks(100);
812 v8::Local<v8::External> data = 838 v8::Local<v8::External> data =
813 v8::External::New(env->GetIsolate(), &callbacks); 839 v8::External::New(env->GetIsolate(), &callbacks);
814 840
815 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(); 841 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New();
816 func_template->SetClassName(v8::String::New("Test_InstanceCostructor")); 842 func_template->SetClassName(
843 v8::String::NewFromUtf8(env->GetIsolate(), "Test_InstanceCostructor"));
817 v8::Local<v8::ObjectTemplate> proto_template = 844 v8::Local<v8::ObjectTemplate> proto_template =
818 func_template->PrototypeTemplate(); 845 func_template->PrototypeTemplate();
819 v8::Local<v8::Signature> signature = v8::Signature::New(func_template); 846 v8::Local<v8::Signature> signature = v8::Signature::New(func_template);
820 proto_template->Set(v8::String::New("fooMethod"), v8::FunctionTemplate::New( 847 proto_template->Set(v8::String::NewFromUtf8(env->GetIsolate(), "fooMethod"),
821 &TestApiCallbacks::Callback, data, signature, 0)); 848 v8::FunctionTemplate::New(&TestApiCallbacks::Callback,
849 data, signature, 0));
822 850
823 v8::Local<v8::Function> func = func_template->GetFunction(); 851 v8::Local<v8::Function> func = func_template->GetFunction();
824 v8::Local<v8::Object> instance = func->NewInstance(); 852 v8::Local<v8::Object> instance = func->NewInstance();
825 env->Global()->Set(v8::String::New("instance"), instance); 853 env->Global()->Set(v8::String::NewFromUtf8(env->GetIsolate(), "instance"),
854 instance);
826 855
827 v8::Script::Compile(v8::String::New(native_method_test_source))->Run(); 856 v8::Script::Compile(v8::String::NewFromUtf8(
857 env->GetIsolate(), native_method_test_source))->Run();
828 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 858 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
829 env->Global()->Get(v8::String::New("start"))); 859 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
830 860
831 int32_t repeat_count = 1; 861 int32_t repeat_count = 1;
832 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) }; 862 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
833 const v8::CpuProfile* profile = 863 const v8::CpuProfile* profile =
834 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 864 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
835 865
836 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 866 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
837 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 867 const v8::CpuProfileNode* startNode =
838 GetChild(startNode, "fooMethod"); 868 GetChild(env->GetIsolate(), root, "start");
869 GetChild(env->GetIsolate(), startNode, "fooMethod");
839 870
840 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 871 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
841 cpu_profiler->DeleteAllCpuProfiles(); 872 cpu_profiler->DeleteAllCpuProfiles();
842 } 873 }
843 874
844 875
845 TEST(NativeMethodMonomorphicIC) { 876 TEST(NativeMethodMonomorphicIC) {
846 LocalContext env; 877 LocalContext env;
847 v8::HandleScope scope(env->GetIsolate()); 878 v8::HandleScope scope(env->GetIsolate());
848 879
849 TestApiCallbacks callbacks(1); 880 TestApiCallbacks callbacks(1);
850 v8::Local<v8::External> data = 881 v8::Local<v8::External> data =
851 v8::External::New(env->GetIsolate(), &callbacks); 882 v8::External::New(env->GetIsolate(), &callbacks);
852 883
853 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(); 884 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New();
854 func_template->SetClassName(v8::String::New("Test_InstanceCostructor")); 885 func_template->SetClassName(
886 v8::String::NewFromUtf8(env->GetIsolate(), "Test_InstanceCostructor"));
855 v8::Local<v8::ObjectTemplate> proto_template = 887 v8::Local<v8::ObjectTemplate> proto_template =
856 func_template->PrototypeTemplate(); 888 func_template->PrototypeTemplate();
857 v8::Local<v8::Signature> signature = v8::Signature::New(func_template); 889 v8::Local<v8::Signature> signature = v8::Signature::New(func_template);
858 proto_template->Set(v8::String::New("fooMethod"), v8::FunctionTemplate::New( 890 proto_template->Set(v8::String::NewFromUtf8(env->GetIsolate(), "fooMethod"),
859 &TestApiCallbacks::Callback, data, signature, 0)); 891 v8::FunctionTemplate::New(&TestApiCallbacks::Callback,
892 data, signature, 0));
860 893
861 v8::Local<v8::Function> func = func_template->GetFunction(); 894 v8::Local<v8::Function> func = func_template->GetFunction();
862 v8::Local<v8::Object> instance = func->NewInstance(); 895 v8::Local<v8::Object> instance = func->NewInstance();
863 env->Global()->Set(v8::String::New("instance"), instance); 896 env->Global()->Set(v8::String::NewFromUtf8(env->GetIsolate(), "instance"),
897 instance);
864 898
865 v8::Script::Compile(v8::String::New(native_method_test_source))->Run(); 899 v8::Script::Compile(v8::String::NewFromUtf8(
900 env->GetIsolate(), native_method_test_source))->Run();
866 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 901 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
867 env->Global()->Get(v8::String::New("start"))); 902 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
868 { 903 {
869 // Make sure method ICs are in monomorphic state before starting 904 // Make sure method ICs are in monomorphic state before starting
870 // profiling. 905 // profiling.
871 callbacks.set_warming_up(true); 906 callbacks.set_warming_up(true);
872 int32_t warm_up_iterations = 3; 907 int32_t warm_up_iterations = 3;
873 v8::Handle<v8::Value> args[] = { v8::Integer::New(warm_up_iterations) }; 908 v8::Handle<v8::Value> args[] = { v8::Integer::New(warm_up_iterations) };
874 function->Call(env->Global(), ARRAY_SIZE(args), args); 909 function->Call(env->Global(), ARRAY_SIZE(args), args);
875 callbacks.set_warming_up(false); 910 callbacks.set_warming_up(false);
876 } 911 }
877 912
878 int32_t repeat_count = 100; 913 int32_t repeat_count = 100;
879 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) }; 914 v8::Handle<v8::Value> args[] = { v8::Integer::New(repeat_count) };
880 const v8::CpuProfile* profile = 915 const v8::CpuProfile* profile =
881 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 916 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
882 917
883 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 918 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
884 GetChild(root, "start"); 919 GetChild(env->GetIsolate(), root, "start");
885 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 920 const v8::CpuProfileNode* startNode =
886 GetChild(startNode, "fooMethod"); 921 GetChild(env->GetIsolate(), root, "start");
922 GetChild(env->GetIsolate(), startNode, "fooMethod");
887 923
888 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 924 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
889 cpu_profiler->DeleteAllCpuProfiles(); 925 cpu_profiler->DeleteAllCpuProfiles();
890 } 926 }
891 927
892 928
893 static const char* bound_function_test_source = "function foo(iterations) {\n" 929 static const char* bound_function_test_source = "function foo(iterations) {\n"
894 " var r = 0;\n" 930 " var r = 0;\n"
895 " for (var i = 0; i < iterations; i++) { r += i; }\n" 931 " for (var i = 0; i < iterations; i++) { r += i; }\n"
896 " return r;\n" 932 " return r;\n"
897 "}\n" 933 "}\n"
898 "function start(duration) {\n" 934 "function start(duration) {\n"
899 " var callback = foo.bind(this);\n" 935 " var callback = foo.bind(this);\n"
900 " var start = Date.now();\n" 936 " var start = Date.now();\n"
901 " while (Date.now() - start < duration) {\n" 937 " while (Date.now() - start < duration) {\n"
902 " callback(10 * 1000);\n" 938 " callback(10 * 1000);\n"
903 " }\n" 939 " }\n"
904 "}"; 940 "}";
905 941
906 942
907 TEST(BoundFunctionCall) { 943 TEST(BoundFunctionCall) {
908 LocalContext env; 944 LocalContext env;
909 v8::HandleScope scope(env->GetIsolate()); 945 v8::HandleScope scope(env->GetIsolate());
910 946
911 v8::Script::Compile(v8::String::New(bound_function_test_source))->Run(); 947 v8::Script::Compile(
948 v8::String::NewFromUtf8(env->GetIsolate(), bound_function_test_source))
949 ->Run();
912 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 950 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
913 env->Global()->Get(v8::String::New("start"))); 951 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
914 952
915 int32_t duration_ms = 100; 953 int32_t duration_ms = 100;
916 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 954 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
917 const v8::CpuProfile* profile = 955 const v8::CpuProfile* profile =
918 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 956 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
919 957
920 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 958 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
921 ScopedVector<v8::Handle<v8::String> > names(3); 959 ScopedVector<v8::Handle<v8::String> > names(3);
922 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 960 names[0] = v8::String::NewFromUtf8(
923 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 961 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
924 names[2] = v8::String::New("start"); 962 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
963 ProfileGenerator::kProgramEntryName);
964 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
925 // Don't allow |foo| node to be at the top level. 965 // Don't allow |foo| node to be at the top level.
926 CheckChildrenNames(root, names); 966 CheckChildrenNames(root, names);
927 967
928 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 968 const v8::CpuProfileNode* startNode =
929 GetChild(startNode, "foo"); 969 GetChild(env->GetIsolate(), root, "start");
970 GetChild(env->GetIsolate(), startNode, "foo");
930 971
931 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 972 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
932 cpu_profiler->DeleteAllCpuProfiles(); 973 cpu_profiler->DeleteAllCpuProfiles();
933 } 974 }
934 975
935 976
936 static const char* call_function_test_source = "function bar(iterations) {\n" 977 static const char* call_function_test_source = "function bar(iterations) {\n"
937 "}\n" 978 "}\n"
938 "function start(duration) {\n" 979 "function start(duration) {\n"
939 " var start = Date.now();\n" 980 " var start = Date.now();\n"
(...skipping 17 matching lines...) Expand all
957 // 71 70 start [-1] #3 998 // 71 70 start [-1] #3
958 // 1 1 bar [-1] #7 999 // 1 1 bar [-1] #7
959 // 19 19 (program) [-1] #2 1000 // 19 19 (program) [-1] #2
960 TEST(FunctionCallSample) { 1001 TEST(FunctionCallSample) {
961 LocalContext env; 1002 LocalContext env;
962 v8::HandleScope scope(env->GetIsolate()); 1003 v8::HandleScope scope(env->GetIsolate());
963 1004
964 // Collect garbage that might have be generated while installing extensions. 1005 // Collect garbage that might have be generated while installing extensions.
965 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); 1006 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags);
966 1007
967 v8::Script::Compile(v8::String::New(call_function_test_source))->Run(); 1008 v8::Script::Compile(v8::String::NewFromUtf8(
1009 env->GetIsolate(), call_function_test_source))->Run();
968 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 1010 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
969 env->Global()->Get(v8::String::New("start"))); 1011 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
970 1012
971 int32_t duration_ms = 100; 1013 int32_t duration_ms = 100;
972 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 1014 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
973 const v8::CpuProfile* profile = 1015 const v8::CpuProfile* profile =
974 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 1016 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
975 1017
976 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1018 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
977 { 1019 {
978 ScopedVector<v8::Handle<v8::String> > names(4); 1020 ScopedVector<v8::Handle<v8::String> > names(4);
979 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1021 names[0] = v8::String::NewFromUtf8(
980 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1022 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
981 names[2] = v8::String::New("start"); 1023 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
982 names[3] = v8::String::New(i::ProfileGenerator::kUnresolvedFunctionName); 1024 ProfileGenerator::kProgramEntryName);
1025 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
1026 names[3] = v8::String::NewFromUtf8(
1027 env->GetIsolate(), i::ProfileGenerator::kUnresolvedFunctionName);
983 // Don't allow |bar| and |call| nodes to be at the top level. 1028 // Don't allow |bar| and |call| nodes to be at the top level.
984 CheckChildrenNames(root, names); 1029 CheckChildrenNames(root, names);
985 } 1030 }
986 1031
987 // In case of GC stress tests all samples may be in GC phase and there 1032 // In case of GC stress tests all samples may be in GC phase and there
988 // won't be |start| node in the profiles. 1033 // won't be |start| node in the profiles.
989 bool is_gc_stress_testing = 1034 bool is_gc_stress_testing =
990 (i::FLAG_gc_interval != -1) || i::FLAG_stress_compaction; 1035 (i::FLAG_gc_interval != -1) || i::FLAG_stress_compaction;
991 const v8::CpuProfileNode* startNode = FindChild(root, "start"); 1036 const v8::CpuProfileNode* startNode =
1037 FindChild(env->GetIsolate(), root, "start");
992 CHECK(is_gc_stress_testing || startNode); 1038 CHECK(is_gc_stress_testing || startNode);
993 if (startNode) { 1039 if (startNode) {
994 ScopedVector<v8::Handle<v8::String> > names(2); 1040 ScopedVector<v8::Handle<v8::String> > names(2);
995 names[0] = v8::String::New("bar"); 1041 names[0] = v8::String::NewFromUtf8(env->GetIsolate(), "bar");
996 names[1] = v8::String::New("call"); 1042 names[1] = v8::String::NewFromUtf8(env->GetIsolate(), "call");
997 CheckChildrenNames(startNode, names); 1043 CheckChildrenNames(startNode, names);
998 } 1044 }
999 1045
1000 const v8::CpuProfileNode* unresolvedNode = 1046 const v8::CpuProfileNode* unresolvedNode = FindChild(
1001 FindChild(root, i::ProfileGenerator::kUnresolvedFunctionName); 1047 env->GetIsolate(), root, i::ProfileGenerator::kUnresolvedFunctionName);
1002 if (unresolvedNode) { 1048 if (unresolvedNode) {
1003 ScopedVector<v8::Handle<v8::String> > names(1); 1049 ScopedVector<v8::Handle<v8::String> > names(1);
1004 names[0] = v8::String::New("call"); 1050 names[0] = v8::String::NewFromUtf8(env->GetIsolate(), "call");
1005 CheckChildrenNames(unresolvedNode, names); 1051 CheckChildrenNames(unresolvedNode, names);
1006 } 1052 }
1007 1053
1008 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1054 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1009 cpu_profiler->DeleteAllCpuProfiles(); 1055 cpu_profiler->DeleteAllCpuProfiles();
1010 } 1056 }
1011 1057
1012 1058
1013 static const char* function_apply_test_source = "function bar(iterations) {\n" 1059 static const char* function_apply_test_source = "function bar(iterations) {\n"
1014 "}\n" 1060 "}\n"
(...skipping 17 matching lines...) Expand all
1032 // 1 0 (unresolved function) [-1] #0 8 1078 // 1 0 (unresolved function) [-1] #0 8
1033 // 1 1 apply [-1] #0 9 1079 // 1 1 apply [-1] #0 9
1034 // 32 21 test [-1] #16 4 1080 // 32 21 test [-1] #16 4
1035 // 2 2 bar [-1] #16 6 1081 // 2 2 bar [-1] #16 6
1036 // 9 9 apply [-1] #0 5 1082 // 9 9 apply [-1] #0 5
1037 // 10 10 (program) [-1] #0 2 1083 // 10 10 (program) [-1] #0 2
1038 TEST(FunctionApplySample) { 1084 TEST(FunctionApplySample) {
1039 LocalContext env; 1085 LocalContext env;
1040 v8::HandleScope scope(env->GetIsolate()); 1086 v8::HandleScope scope(env->GetIsolate());
1041 1087
1042 v8::Script::Compile(v8::String::New(function_apply_test_source))->Run(); 1088 v8::Script::Compile(
1089 v8::String::NewFromUtf8(env->GetIsolate(), function_apply_test_source))
1090 ->Run();
1043 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 1091 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
1044 env->Global()->Get(v8::String::New("start"))); 1092 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
1045 1093
1046 int32_t duration_ms = 100; 1094 int32_t duration_ms = 100;
1047 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 1095 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
1048 1096
1049 const v8::CpuProfile* profile = 1097 const v8::CpuProfile* profile =
1050 RunProfiler(env, function, args, ARRAY_SIZE(args), 100); 1098 RunProfiler(env, function, args, ARRAY_SIZE(args), 100);
1051 1099
1052 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1100 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1053 { 1101 {
1054 ScopedVector<v8::Handle<v8::String> > names(3); 1102 ScopedVector<v8::Handle<v8::String> > names(3);
1055 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1103 names[0] = v8::String::NewFromUtf8(
1056 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1104 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
1057 names[2] = v8::String::New("start"); 1105 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
1106 ProfileGenerator::kProgramEntryName);
1107 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
1058 // Don't allow |test|, |bar| and |apply| nodes to be at the top level. 1108 // Don't allow |test|, |bar| and |apply| nodes to be at the top level.
1059 CheckChildrenNames(root, names); 1109 CheckChildrenNames(root, names);
1060 } 1110 }
1061 1111
1062 const v8::CpuProfileNode* startNode = FindChild(root, "start"); 1112 const v8::CpuProfileNode* startNode =
1113 FindChild(env->GetIsolate(), root, "start");
1063 if (startNode) { 1114 if (startNode) {
1064 { 1115 {
1065 ScopedVector<v8::Handle<v8::String> > names(2); 1116 ScopedVector<v8::Handle<v8::String> > names(2);
1066 names[0] = v8::String::New("test"); 1117 names[0] = v8::String::NewFromUtf8(env->GetIsolate(), "test");
1067 names[1] = v8::String::New(ProfileGenerator::kUnresolvedFunctionName); 1118 names[1] = v8::String::NewFromUtf8(
1119 env->GetIsolate(), ProfileGenerator::kUnresolvedFunctionName);
1068 CheckChildrenNames(startNode, names); 1120 CheckChildrenNames(startNode, names);
1069 } 1121 }
1070 1122
1071 const v8::CpuProfileNode* testNode = FindChild(startNode, "test"); 1123 const v8::CpuProfileNode* testNode =
1124 FindChild(env->GetIsolate(), startNode, "test");
1072 if (testNode) { 1125 if (testNode) {
1073 ScopedVector<v8::Handle<v8::String> > names(2); 1126 ScopedVector<v8::Handle<v8::String> > names(2);
1074 names[0] = v8::String::New("bar"); 1127 names[0] = v8::String::NewFromUtf8(env->GetIsolate(), "bar");
1075 names[1] = v8::String::New("apply"); 1128 names[1] = v8::String::NewFromUtf8(env->GetIsolate(), "apply");
1076 CheckChildrenNames(testNode, names); 1129 CheckChildrenNames(testNode, names);
1077 } 1130 }
1078 1131
1079 if (const v8::CpuProfileNode* unresolvedNode = 1132 if (const v8::CpuProfileNode* unresolvedNode =
1080 FindChild(startNode, ProfileGenerator::kUnresolvedFunctionName)) { 1133 FindChild(env->GetIsolate(), startNode,
1134 ProfileGenerator::kUnresolvedFunctionName)) {
1081 ScopedVector<v8::Handle<v8::String> > names(1); 1135 ScopedVector<v8::Handle<v8::String> > names(1);
1082 names[0] = v8::String::New("apply"); 1136 names[0] = v8::String::NewFromUtf8(env->GetIsolate(), "apply");
1083 CheckChildrenNames(unresolvedNode, names); 1137 CheckChildrenNames(unresolvedNode, names);
1084 GetChild(unresolvedNode, "apply"); 1138 GetChild(env->GetIsolate(), unresolvedNode, "apply");
1085 } 1139 }
1086 } 1140 }
1087 1141
1088 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1142 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1089 cpu_profiler->DeleteAllCpuProfiles(); 1143 cpu_profiler->DeleteAllCpuProfiles();
1090 } 1144 }
1091 1145
1092 1146
1093 static const char* js_native_js_test_source = 1147 static const char* js_native_js_test_source =
1094 "var is_profiling = false;\n" 1148 "var is_profiling = false;\n"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 // 54 54 foo #16 6 1183 // 54 54 foo #16 6
1130 TEST(JsNativeJsSample) { 1184 TEST(JsNativeJsSample) {
1131 const char* extensions[] = { "v8/profiler" }; 1185 const char* extensions[] = { "v8/profiler" };
1132 v8::ExtensionConfiguration config(1, extensions); 1186 v8::ExtensionConfiguration config(1, extensions);
1133 LocalContext env(&config); 1187 LocalContext env(&config);
1134 v8::HandleScope scope(env->GetIsolate()); 1188 v8::HandleScope scope(env->GetIsolate());
1135 1189
1136 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New( 1190 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(
1137 CallJsFunction); 1191 CallJsFunction);
1138 v8::Local<v8::Function> func = func_template->GetFunction(); 1192 v8::Local<v8::Function> func = func_template->GetFunction();
1139 func->SetName(v8::String::New("CallJsFunction")); 1193 func->SetName(v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction"));
1140 env->Global()->Set(v8::String::New("CallJsFunction"), func); 1194 env->Global()->Set(
1195 v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction"), func);
1141 1196
1142 v8::Script::Compile(v8::String::New(js_native_js_test_source))->Run(); 1197 v8::Script::Compile(v8::String::NewFromUtf8(env->GetIsolate(),
1198 js_native_js_test_source))->Run();
1143 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 1199 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
1144 env->Global()->Get(v8::String::New("start"))); 1200 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
1145 1201
1146 int32_t duration_ms = 20; 1202 int32_t duration_ms = 20;
1147 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 1203 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
1148 const v8::CpuProfile* profile = 1204 const v8::CpuProfile* profile =
1149 RunProfiler(env, function, args, ARRAY_SIZE(args), 10); 1205 RunProfiler(env, function, args, ARRAY_SIZE(args), 10);
1150 1206
1151 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1207 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1152 { 1208 {
1153 ScopedVector<v8::Handle<v8::String> > names(3); 1209 ScopedVector<v8::Handle<v8::String> > names(3);
1154 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1210 names[0] = v8::String::NewFromUtf8(
1155 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1211 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
1156 names[2] = v8::String::New("start"); 1212 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
1213 ProfileGenerator::kProgramEntryName);
1214 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
1157 CheckChildrenNames(root, names); 1215 CheckChildrenNames(root, names);
1158 } 1216 }
1159 1217
1160 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 1218 const v8::CpuProfileNode* startNode =
1219 GetChild(env->GetIsolate(), root, "start");
1161 CHECK_EQ(1, startNode->GetChildrenCount()); 1220 CHECK_EQ(1, startNode->GetChildrenCount());
1162 const v8::CpuProfileNode* nativeFunctionNode = 1221 const v8::CpuProfileNode* nativeFunctionNode =
1163 GetChild(startNode, "CallJsFunction"); 1222 GetChild(env->GetIsolate(), startNode, "CallJsFunction");
1164 1223
1165 CHECK_EQ(1, nativeFunctionNode->GetChildrenCount()); 1224 CHECK_EQ(1, nativeFunctionNode->GetChildrenCount());
1166 const v8::CpuProfileNode* barNode = GetChild(nativeFunctionNode, "bar"); 1225 const v8::CpuProfileNode* barNode =
1226 GetChild(env->GetIsolate(), nativeFunctionNode, "bar");
1167 1227
1168 CHECK_EQ(1, barNode->GetChildrenCount()); 1228 CHECK_EQ(1, barNode->GetChildrenCount());
1169 GetChild(barNode, "foo"); 1229 GetChild(env->GetIsolate(), barNode, "foo");
1170 1230
1171 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1231 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1172 cpu_profiler->DeleteAllCpuProfiles(); 1232 cpu_profiler->DeleteAllCpuProfiles();
1173 } 1233 }
1174 1234
1175 1235
1176 static const char* js_native_js_runtime_js_test_source = 1236 static const char* js_native_js_runtime_js_test_source =
1177 "var is_profiling = false;\n" 1237 "var is_profiling = false;\n"
1178 "function foo(iterations) {\n" 1238 "function foo(iterations) {\n"
1179 " if (!is_profiling) {\n" 1239 " if (!is_profiling) {\n"
(...skipping 27 matching lines...) Expand all
1207 // 2 2 (program) #0 2 1267 // 2 2 (program) #0 2
1208 TEST(JsNativeJsRuntimeJsSample) { 1268 TEST(JsNativeJsRuntimeJsSample) {
1209 const char* extensions[] = { "v8/profiler" }; 1269 const char* extensions[] = { "v8/profiler" };
1210 v8::ExtensionConfiguration config(1, extensions); 1270 v8::ExtensionConfiguration config(1, extensions);
1211 LocalContext env(&config); 1271 LocalContext env(&config);
1212 v8::HandleScope scope(env->GetIsolate()); 1272 v8::HandleScope scope(env->GetIsolate());
1213 1273
1214 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New( 1274 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(
1215 CallJsFunction); 1275 CallJsFunction);
1216 v8::Local<v8::Function> func = func_template->GetFunction(); 1276 v8::Local<v8::Function> func = func_template->GetFunction();
1217 func->SetName(v8::String::New("CallJsFunction")); 1277 func->SetName(v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction"));
1218 env->Global()->Set(v8::String::New("CallJsFunction"), func); 1278 env->Global()->Set(
1279 v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction"), func);
1219 1280
1220 v8::Script::Compile(v8::String::New(js_native_js_runtime_js_test_source))-> 1281 v8::Script::Compile(
1221 Run(); 1282 v8::String::NewFromUtf8(env->GetIsolate(),
1283 js_native_js_runtime_js_test_source))->Run();
1222 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 1284 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
1223 env->Global()->Get(v8::String::New("start"))); 1285 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
1224 1286
1225 int32_t duration_ms = 20; 1287 int32_t duration_ms = 20;
1226 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 1288 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
1227 const v8::CpuProfile* profile = 1289 const v8::CpuProfile* profile =
1228 RunProfiler(env, function, args, ARRAY_SIZE(args), 10); 1290 RunProfiler(env, function, args, ARRAY_SIZE(args), 10);
1229 1291
1230 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1292 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1231 ScopedVector<v8::Handle<v8::String> > names(3); 1293 ScopedVector<v8::Handle<v8::String> > names(3);
1232 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1294 names[0] = v8::String::NewFromUtf8(
1233 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1295 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
1234 names[2] = v8::String::New("start"); 1296 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
1297 ProfileGenerator::kProgramEntryName);
1298 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
1235 CheckChildrenNames(root, names); 1299 CheckChildrenNames(root, names);
1236 1300
1237 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 1301 const v8::CpuProfileNode* startNode =
1302 GetChild(env->GetIsolate(), root, "start");
1238 CHECK_EQ(1, startNode->GetChildrenCount()); 1303 CHECK_EQ(1, startNode->GetChildrenCount());
1239 const v8::CpuProfileNode* nativeFunctionNode = 1304 const v8::CpuProfileNode* nativeFunctionNode =
1240 GetChild(startNode, "CallJsFunction"); 1305 GetChild(env->GetIsolate(), startNode, "CallJsFunction");
1241 1306
1242 CHECK_EQ(1, nativeFunctionNode->GetChildrenCount()); 1307 CHECK_EQ(1, nativeFunctionNode->GetChildrenCount());
1243 const v8::CpuProfileNode* barNode = GetChild(nativeFunctionNode, "bar"); 1308 const v8::CpuProfileNode* barNode =
1309 GetChild(env->GetIsolate(), nativeFunctionNode, "bar");
1244 1310
1245 CHECK_EQ(1, barNode->GetChildrenCount()); 1311 CHECK_EQ(1, barNode->GetChildrenCount());
1246 GetChild(barNode, "foo"); 1312 GetChild(env->GetIsolate(), barNode, "foo");
1247 1313
1248 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1314 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1249 cpu_profiler->DeleteAllCpuProfiles(); 1315 cpu_profiler->DeleteAllCpuProfiles();
1250 } 1316 }
1251 1317
1252 1318
1253 static void CallJsFunction2(const v8::FunctionCallbackInfo<v8::Value>& info) { 1319 static void CallJsFunction2(const v8::FunctionCallbackInfo<v8::Value>& info) {
1254 CallJsFunction(info); 1320 CallJsFunction(info);
1255 } 1321 }
1256 1322
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 // 2 2 (program) #0 2 1355 // 2 2 (program) #0 2
1290 TEST(JsNative1JsNative2JsSample) { 1356 TEST(JsNative1JsNative2JsSample) {
1291 const char* extensions[] = { "v8/profiler" }; 1357 const char* extensions[] = { "v8/profiler" };
1292 v8::ExtensionConfiguration config(1, extensions); 1358 v8::ExtensionConfiguration config(1, extensions);
1293 LocalContext env(&config); 1359 LocalContext env(&config);
1294 v8::HandleScope scope(env->GetIsolate()); 1360 v8::HandleScope scope(env->GetIsolate());
1295 1361
1296 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New( 1362 v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New(
1297 CallJsFunction); 1363 CallJsFunction);
1298 v8::Local<v8::Function> func1 = func_template->GetFunction(); 1364 v8::Local<v8::Function> func1 = func_template->GetFunction();
1299 func1->SetName(v8::String::New("CallJsFunction1")); 1365 func1->SetName(v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction1"));
1300 env->Global()->Set(v8::String::New("CallJsFunction1"), func1); 1366 env->Global()->Set(
1367 v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction1"), func1);
1301 1368
1302 v8::Local<v8::Function> func2 = v8::FunctionTemplate::New( 1369 v8::Local<v8::Function> func2 = v8::FunctionTemplate::New(
1303 CallJsFunction2)->GetFunction(); 1370 CallJsFunction2)->GetFunction();
1304 func2->SetName(v8::String::New("CallJsFunction2")); 1371 func2->SetName(v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction2"));
1305 env->Global()->Set(v8::String::New("CallJsFunction2"), func2); 1372 env->Global()->Set(
1373 v8::String::NewFromUtf8(env->GetIsolate(), "CallJsFunction2"), func2);
1306 1374
1307 v8::Script::Compile(v8::String::New(js_native1_js_native2_js_test_source))-> 1375 v8::Script::Compile(
1308 Run(); 1376 v8::String::NewFromUtf8(env->GetIsolate(),
1377 js_native1_js_native2_js_test_source))->Run();
1309 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast( 1378 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
1310 env->Global()->Get(v8::String::New("start"))); 1379 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "start")));
1311 1380
1312 int32_t duration_ms = 20; 1381 int32_t duration_ms = 20;
1313 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) }; 1382 v8::Handle<v8::Value> args[] = { v8::Integer::New(duration_ms) };
1314 const v8::CpuProfile* profile = 1383 const v8::CpuProfile* profile =
1315 RunProfiler(env, function, args, ARRAY_SIZE(args), 10); 1384 RunProfiler(env, function, args, ARRAY_SIZE(args), 10);
1316 1385
1317 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1386 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1318 ScopedVector<v8::Handle<v8::String> > names(3); 1387 ScopedVector<v8::Handle<v8::String> > names(3);
1319 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1388 names[0] = v8::String::NewFromUtf8(
1320 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1389 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
1321 names[2] = v8::String::New("start"); 1390 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
1391 ProfileGenerator::kProgramEntryName);
1392 names[2] = v8::String::NewFromUtf8(env->GetIsolate(), "start");
1322 CheckChildrenNames(root, names); 1393 CheckChildrenNames(root, names);
1323 1394
1324 const v8::CpuProfileNode* startNode = GetChild(root, "start"); 1395 const v8::CpuProfileNode* startNode =
1396 GetChild(env->GetIsolate(), root, "start");
1325 CHECK_EQ(1, startNode->GetChildrenCount()); 1397 CHECK_EQ(1, startNode->GetChildrenCount());
1326 const v8::CpuProfileNode* nativeNode1 = 1398 const v8::CpuProfileNode* nativeNode1 =
1327 GetChild(startNode, "CallJsFunction1"); 1399 GetChild(env->GetIsolate(), startNode, "CallJsFunction1");
1328 1400
1329 CHECK_EQ(1, nativeNode1->GetChildrenCount()); 1401 CHECK_EQ(1, nativeNode1->GetChildrenCount());
1330 const v8::CpuProfileNode* barNode = GetChild(nativeNode1, "bar"); 1402 const v8::CpuProfileNode* barNode =
1403 GetChild(env->GetIsolate(), nativeNode1, "bar");
1331 1404
1332 CHECK_EQ(1, barNode->GetChildrenCount()); 1405 CHECK_EQ(1, barNode->GetChildrenCount());
1333 const v8::CpuProfileNode* nativeNode2 = GetChild(barNode, "CallJsFunction2"); 1406 const v8::CpuProfileNode* nativeNode2 =
1407 GetChild(env->GetIsolate(), barNode, "CallJsFunction2");
1334 1408
1335 CHECK_EQ(1, nativeNode2->GetChildrenCount()); 1409 CHECK_EQ(1, nativeNode2->GetChildrenCount());
1336 GetChild(nativeNode2, "foo"); 1410 GetChild(env->GetIsolate(), nativeNode2, "foo");
1337 1411
1338 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1412 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1339 cpu_profiler->DeleteAllCpuProfiles(); 1413 cpu_profiler->DeleteAllCpuProfiles();
1340 } 1414 }
1341 1415
1342 1416
1343 // [Top down]: 1417 // [Top down]:
1344 // 6 0 (root) #0 1 1418 // 6 0 (root) #0 1
1345 // 3 3 (program) #0 2 1419 // 3 3 (program) #0 2
1346 // 3 3 (idle) #0 3 1420 // 3 3 (idle) #0 3
1347 TEST(IdleTime) { 1421 TEST(IdleTime) {
1348 LocalContext env; 1422 LocalContext env;
1349 v8::HandleScope scope(env->GetIsolate()); 1423 v8::HandleScope scope(env->GetIsolate());
1350 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1424 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
1351 1425
1352 v8::Local<v8::String> profile_name = v8::String::New("my_profile"); 1426 v8::Local<v8::String> profile_name =
1427 v8::String::NewFromUtf8(env->GetIsolate(), "my_profile");
1353 cpu_profiler->StartCpuProfiling(profile_name); 1428 cpu_profiler->StartCpuProfiling(profile_name);
1354 1429
1355 i::Isolate* isolate = CcTest::i_isolate(); 1430 i::Isolate* isolate = CcTest::i_isolate();
1356 i::ProfilerEventsProcessor* processor = isolate->cpu_profiler()->processor(); 1431 i::ProfilerEventsProcessor* processor = isolate->cpu_profiler()->processor();
1357 processor->AddCurrentStack(isolate); 1432 processor->AddCurrentStack(isolate);
1358 1433
1359 cpu_profiler->SetIdle(true); 1434 cpu_profiler->SetIdle(true);
1360 1435
1361 for (int i = 0; i < 3; i++) { 1436 for (int i = 0; i < 3; i++) {
1362 processor->AddCurrentStack(isolate); 1437 processor->AddCurrentStack(isolate);
1363 } 1438 }
1364 1439
1365 cpu_profiler->SetIdle(false); 1440 cpu_profiler->SetIdle(false);
1366 processor->AddCurrentStack(isolate); 1441 processor->AddCurrentStack(isolate);
1367 1442
1368 1443
1369 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name); 1444 const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
1370 CHECK_NE(NULL, profile); 1445 CHECK_NE(NULL, profile);
1371 // Dump collected profile to have a better diagnostic in case of failure. 1446 // Dump collected profile to have a better diagnostic in case of failure.
1372 reinterpret_cast<i::CpuProfile*>( 1447 reinterpret_cast<i::CpuProfile*>(
1373 const_cast<v8::CpuProfile*>(profile))->Print(); 1448 const_cast<v8::CpuProfile*>(profile))->Print();
1374 1449
1375 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1450 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1376 ScopedVector<v8::Handle<v8::String> > names(3); 1451 ScopedVector<v8::Handle<v8::String> > names(3);
1377 names[0] = v8::String::New(ProfileGenerator::kGarbageCollectorEntryName); 1452 names[0] = v8::String::NewFromUtf8(
1378 names[1] = v8::String::New(ProfileGenerator::kProgramEntryName); 1453 env->GetIsolate(), ProfileGenerator::kGarbageCollectorEntryName);
1379 names[2] = v8::String::New(ProfileGenerator::kIdleEntryName); 1454 names[1] = v8::String::NewFromUtf8(env->GetIsolate(),
1455 ProfileGenerator::kProgramEntryName);
1456 names[2] = v8::String::NewFromUtf8(env->GetIsolate(),
1457 ProfileGenerator::kIdleEntryName);
1380 CheckChildrenNames(root, names); 1458 CheckChildrenNames(root, names);
1381 1459
1382 const v8::CpuProfileNode* programNode = 1460 const v8::CpuProfileNode* programNode =
1383 GetChild(root, ProfileGenerator::kProgramEntryName); 1461 GetChild(env->GetIsolate(), root, ProfileGenerator::kProgramEntryName);
1384 CHECK_EQ(0, programNode->GetChildrenCount()); 1462 CHECK_EQ(0, programNode->GetChildrenCount());
1385 CHECK_GE(programNode->GetHitCount(), 3); 1463 CHECK_GE(programNode->GetHitCount(), 3);
1386 1464
1387 const v8::CpuProfileNode* idleNode = 1465 const v8::CpuProfileNode* idleNode =
1388 GetChild(root, ProfileGenerator::kIdleEntryName); 1466 GetChild(env->GetIsolate(), root, ProfileGenerator::kIdleEntryName);
1389 CHECK_EQ(0, idleNode->GetChildrenCount()); 1467 CHECK_EQ(0, idleNode->GetChildrenCount());
1390 CHECK_GE(idleNode->GetHitCount(), 3); 1468 CHECK_GE(idleNode->GetHitCount(), 3);
1391 1469
1392 cpu_profiler->DeleteAllCpuProfiles(); 1470 cpu_profiler->DeleteAllCpuProfiles();
1393 } 1471 }
1394 1472
1395 1473
1396 static void CheckFunctionDetails(const v8::CpuProfileNode* node, 1474 static void CheckFunctionDetails(v8::Isolate* isolate,
1397 const char* name, const char* script_name, int script_id, 1475 const v8::CpuProfileNode* node,
1398 int line, int column) { 1476 const char* name, const char* script_name,
1399 CHECK_EQ(v8::String::New(name), node->GetFunctionName()); 1477 int script_id, int line, int column) {
1400 CHECK_EQ(v8::String::New(script_name), node->GetScriptResourceName()); 1478 CHECK_EQ(v8::String::NewFromUtf8(isolate, name),
1479 node->GetFunctionName());
1480 CHECK_EQ(v8::String::NewFromUtf8(isolate, script_name),
1481 node->GetScriptResourceName());
1401 CHECK_EQ(script_id, node->GetScriptId()); 1482 CHECK_EQ(script_id, node->GetScriptId());
1402 CHECK_EQ(line, node->GetLineNumber()); 1483 CHECK_EQ(line, node->GetLineNumber());
1403 CHECK_EQ(column, node->GetColumnNumber()); 1484 CHECK_EQ(column, node->GetColumnNumber());
1404 } 1485 }
1405 1486
1406 1487
1407 TEST(FunctionDetails) { 1488 TEST(FunctionDetails) {
1408 const char* extensions[] = { "v8/profiler" }; 1489 const char* extensions[] = { "v8/profiler" };
1409 v8::ExtensionConfiguration config(1, extensions); 1490 v8::ExtensionConfiguration config(1, extensions);
1410 LocalContext env(&config); 1491 LocalContext env(&config);
1411 v8::HandleScope handleScope(env->GetIsolate()); 1492 v8::HandleScope handleScope(env->GetIsolate());
1412 1493
1413 v8::CpuProfiler* profiler = env->GetIsolate()->GetCpuProfiler(); 1494 v8::CpuProfiler* profiler = env->GetIsolate()->GetCpuProfiler();
1414 CHECK_EQ(0, profiler->GetProfileCount()); 1495 CHECK_EQ(0, profiler->GetProfileCount());
1415 v8::Handle<v8::Script> script_a = v8::Script::Compile(v8::String::New( 1496 v8::Handle<v8::Script> script_a = v8::Script::Compile(
1416 " function foo\n() { try { bar(); } catch(e) {} }\n" 1497 v8::String::NewFromUtf8(
1417 " function bar() { startProfiling(); }\n"), v8::String::New("script_a")); 1498 env->GetIsolate(),
1499 " function foo\n() { try { bar(); } catch(e) {} }\n"
1500 " function bar() { startProfiling(); }\n"),
1501 v8::String::NewFromUtf8(env->GetIsolate(), "script_a"));
1418 script_a->Run(); 1502 script_a->Run();
1419 v8::Handle<v8::Script> script_b = v8::Script::Compile(v8::String::New( 1503 v8::Handle<v8::Script> script_b = v8::Script::Compile(
1420 "\n\n function baz() { try { foo(); } catch(e) {} }\n" 1504 v8::String::NewFromUtf8(
1421 "\n\nbaz();\n" 1505 env->GetIsolate(),
1422 "stopProfiling();\n"), v8::String::New("script_b")); 1506 "\n\n function baz() { try { foo(); } catch(e) {} }\n"
1507 "\n\nbaz();\n"
1508 "stopProfiling();\n"),
1509 v8::String::NewFromUtf8(env->GetIsolate(), "script_b"));
1423 script_b->Run(); 1510 script_b->Run();
1424 CHECK_EQ(1, profiler->GetProfileCount()); 1511 CHECK_EQ(1, profiler->GetProfileCount());
1425 const v8::CpuProfile* profile = profiler->GetCpuProfile(0); 1512 const v8::CpuProfile* profile = profiler->GetCpuProfile(0);
1426 const v8::CpuProfileNode* current = profile->GetTopDownRoot(); 1513 const v8::CpuProfileNode* current = profile->GetTopDownRoot();
1427 reinterpret_cast<ProfileNode*>( 1514 reinterpret_cast<ProfileNode*>(
1428 const_cast<v8::CpuProfileNode*>(current))->Print(0); 1515 const_cast<v8::CpuProfileNode*>(current))->Print(0);
1429 // The tree should look like this: 1516 // The tree should look like this:
1430 // 0 (root) 0 #1 1517 // 0 (root) 0 #1
1431 // 0 (anonymous function) 19 #2 no reason script_b:1 1518 // 0 (anonymous function) 19 #2 no reason script_b:1
1432 // 0 baz 19 #3 TryCatchStatement script_b:3 1519 // 0 baz 19 #3 TryCatchStatement script_b:3
1433 // 0 foo 18 #4 TryCatchStatement script_a:2 1520 // 0 foo 18 #4 TryCatchStatement script_a:2
1434 // 1 bar 18 #5 no reason script_a:3 1521 // 1 bar 18 #5 no reason script_a:3
1435 const v8::CpuProfileNode* root = profile->GetTopDownRoot(); 1522 const v8::CpuProfileNode* root = profile->GetTopDownRoot();
1436 const v8::CpuProfileNode* script = GetChild(root, 1523 const v8::CpuProfileNode* script = GetChild(env->GetIsolate(), root,
1437 ProfileGenerator::kAnonymousFunctionName); 1524 ProfileGenerator::kAnonymousFunctionName);
1438 CheckFunctionDetails(script, ProfileGenerator::kAnonymousFunctionName, 1525 CheckFunctionDetails(env->GetIsolate(), script,
1439 "script_b", script_b->GetId(), 1, 1); 1526 ProfileGenerator::kAnonymousFunctionName, "script_b",
1440 const v8::CpuProfileNode* baz = GetChild(script, "baz"); 1527 script_b->GetId(), 1, 1);
1441 CheckFunctionDetails(baz, "baz", "script_b", script_b->GetId(), 3, 16); 1528 const v8::CpuProfileNode* baz = GetChild(env->GetIsolate(), script, "baz");
1442 const v8::CpuProfileNode* foo = GetChild(baz, "foo"); 1529 CheckFunctionDetails(env->GetIsolate(), baz, "baz", "script_b",
1443 CheckFunctionDetails(foo, "foo", "script_a", script_a->GetId(), 2, 1); 1530 script_b->GetId(), 3, 16);
1444 const v8::CpuProfileNode* bar = GetChild(foo, "bar"); 1531 const v8::CpuProfileNode* foo = GetChild(env->GetIsolate(), baz, "foo");
1445 CheckFunctionDetails(bar, "bar", "script_a", script_a->GetId(), 3, 14); 1532 CheckFunctionDetails(env->GetIsolate(), foo, "foo", "script_a",
1533 script_a->GetId(), 2, 1);
1534 const v8::CpuProfileNode* bar = GetChild(env->GetIsolate(), foo, "bar");
1535 CheckFunctionDetails(env->GetIsolate(), bar, "bar", "script_a",
1536 script_a->GetId(), 3, 14);
1446 } 1537 }
OLDNEW
« no previous file with comments | « test/cctest/test-compiler.cc ('k') | test/cctest/test-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698