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

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

Issue 24065005: new gc callbacks with isolate parameters (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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/heap.cc ('k') | test/cctest/test-mark-compact.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 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 17678 matching lines...) Expand 10 before | Expand all | Expand 10 after
17689 CompileRun(source); 17689 CompileRun(source);
17690 17690
17691 script = v8::Script::Compile(v8_str("new C1();")); 17691 script = v8::Script::Compile(v8_str("new C1();"));
17692 for (int i = 0; i < 10; i++) { 17692 for (int i = 0; i < 10; i++) {
17693 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); 17693 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run());
17694 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); 17694 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value());
17695 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); 17695 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value());
17696 } 17696 }
17697 } 17697 }
17698 17698
17699 v8::Isolate* gc_callbacks_isolate = NULL;
17699 int prologue_call_count = 0; 17700 int prologue_call_count = 0;
17700 int epilogue_call_count = 0; 17701 int epilogue_call_count = 0;
17701 int prologue_call_count_second = 0; 17702 int prologue_call_count_second = 0;
17702 int epilogue_call_count_second = 0; 17703 int epilogue_call_count_second = 0;
17703 17704
17704 void PrologueCallback(v8::GCType, v8::GCCallbackFlags) { 17705 void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) {
17706 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17705 ++prologue_call_count; 17707 ++prologue_call_count;
17706 } 17708 }
17707 17709
17708 17710
17709 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags) { 17711 void PrologueCallback(v8::Isolate* isolate,
17712 v8::GCType,
17713 v8::GCCallbackFlags flags) {
17714 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17715 CHECK_EQ(gc_callbacks_isolate, isolate);
17716 ++prologue_call_count;
17717 }
17718
17719
17720 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags flags) {
17721 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17710 ++epilogue_call_count; 17722 ++epilogue_call_count;
17711 } 17723 }
17712 17724
17713 17725
17714 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags) { 17726 void EpilogueCallback(v8::Isolate* isolate,
17727 v8::GCType,
17728 v8::GCCallbackFlags flags) {
17729 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17730 CHECK_EQ(gc_callbacks_isolate, isolate);
17731 ++epilogue_call_count;
17732 }
17733
17734
17735 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) {
17736 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17715 ++prologue_call_count_second; 17737 ++prologue_call_count_second;
17716 } 17738 }
17717 17739
17718 17740
17719 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags) { 17741 void PrologueCallbackSecond(v8::Isolate* isolate,
17742 v8::GCType,
17743 v8::GCCallbackFlags flags) {
17744 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17745 CHECK_EQ(gc_callbacks_isolate, isolate);
17746 ++prologue_call_count_second;
17747 }
17748
17749
17750 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) {
17751 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17720 ++epilogue_call_count_second; 17752 ++epilogue_call_count_second;
17721 } 17753 }
17722 17754
17723 17755
17724 TEST(GCCallbacks) { 17756 void EpilogueCallbackSecond(v8::Isolate* isolate,
17757 v8::GCType,
17758 v8::GCCallbackFlags flags) {
17759 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17760 CHECK_EQ(gc_callbacks_isolate, isolate);
17761 ++epilogue_call_count_second;
17762 }
17763
17764
17765 TEST(GCCallbacksOld) {
17725 LocalContext context; 17766 LocalContext context;
17726 17767
17727 v8::V8::AddGCPrologueCallback(PrologueCallback); 17768 v8::V8::AddGCPrologueCallback(PrologueCallback);
17728 v8::V8::AddGCEpilogueCallback(EpilogueCallback); 17769 v8::V8::AddGCEpilogueCallback(EpilogueCallback);
17729 CHECK_EQ(0, prologue_call_count); 17770 CHECK_EQ(0, prologue_call_count);
17730 CHECK_EQ(0, epilogue_call_count); 17771 CHECK_EQ(0, epilogue_call_count);
17731 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 17772 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17732 CHECK_EQ(1, prologue_call_count); 17773 CHECK_EQ(1, prologue_call_count);
17733 CHECK_EQ(1, epilogue_call_count); 17774 CHECK_EQ(1, epilogue_call_count);
17734 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond); 17775 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond);
(...skipping 13 matching lines...) Expand all
17748 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond); 17789 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond);
17749 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond); 17790 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond);
17750 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 17791 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17751 CHECK_EQ(2, prologue_call_count); 17792 CHECK_EQ(2, prologue_call_count);
17752 CHECK_EQ(2, epilogue_call_count); 17793 CHECK_EQ(2, epilogue_call_count);
17753 CHECK_EQ(2, prologue_call_count_second); 17794 CHECK_EQ(2, prologue_call_count_second);
17754 CHECK_EQ(2, epilogue_call_count_second); 17795 CHECK_EQ(2, epilogue_call_count_second);
17755 } 17796 }
17756 17797
17757 17798
17799 TEST(GCCallbacks) {
17800 LocalContext context;
17801 v8::Isolate* isolate = context->GetIsolate();
17802 gc_callbacks_isolate = isolate;
17803 isolate->AddGCPrologueCallback(PrologueCallback);
17804 isolate->AddGCEpilogueCallback(EpilogueCallback);
17805 CHECK_EQ(0, prologue_call_count);
17806 CHECK_EQ(0, epilogue_call_count);
17807 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17808 CHECK_EQ(1, prologue_call_count);
17809 CHECK_EQ(1, epilogue_call_count);
17810 isolate->AddGCPrologueCallback(PrologueCallbackSecond);
17811 isolate->AddGCEpilogueCallback(EpilogueCallbackSecond);
17812 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17813 CHECK_EQ(2, prologue_call_count);
17814 CHECK_EQ(2, epilogue_call_count);
17815 CHECK_EQ(1, prologue_call_count_second);
17816 CHECK_EQ(1, epilogue_call_count_second);
17817 isolate->RemoveGCPrologueCallback(PrologueCallback);
17818 isolate->RemoveGCEpilogueCallback(EpilogueCallback);
17819 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17820 CHECK_EQ(2, prologue_call_count);
17821 CHECK_EQ(2, epilogue_call_count);
17822 CHECK_EQ(2, prologue_call_count_second);
17823 CHECK_EQ(2, epilogue_call_count_second);
17824 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond);
17825 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond);
17826 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17827 CHECK_EQ(2, prologue_call_count);
17828 CHECK_EQ(2, epilogue_call_count);
17829 CHECK_EQ(2, prologue_call_count_second);
17830 CHECK_EQ(2, epilogue_call_count_second);
17831 }
17832
17833
17758 THREADED_TEST(AddToJSFunctionResultCache) { 17834 THREADED_TEST(AddToJSFunctionResultCache) {
17759 i::FLAG_stress_compaction = false; 17835 i::FLAG_stress_compaction = false;
17760 i::FLAG_allow_natives_syntax = true; 17836 i::FLAG_allow_natives_syntax = true;
17761 v8::HandleScope scope(v8::Isolate::GetCurrent()); 17837 v8::HandleScope scope(v8::Isolate::GetCurrent());
17762 17838
17763 LocalContext context; 17839 LocalContext context;
17764 17840
17765 const char* code = 17841 const char* code =
17766 "(function() {" 17842 "(function() {"
17767 " var key0 = 'a';" 17843 " var key0 = 'a';"
(...skipping 2821 matching lines...) Expand 10 before | Expand all | Expand 10 after
20589 Local<Object> data2 = v8::Object::New(); 20665 Local<Object> data2 = v8::Object::New();
20590 function_new_expected_env = data2; 20666 function_new_expected_env = data2;
20591 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2); 20667 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2);
20592 CHECK(!func2->IsNull()); 20668 CHECK(!func2->IsNull());
20593 CHECK_NE(func, func2); 20669 CHECK_NE(func, func2);
20594 env->Global()->Set(v8_str("func2"), func2); 20670 env->Global()->Set(v8_str("func2"), func2);
20595 Local<Value> result2 = CompileRun("func2();"); 20671 Local<Value> result2 = CompileRun("func2();");
20596 CHECK_EQ(v8::Integer::New(17, isolate), result2); 20672 CHECK_EQ(v8::Integer::New(17, isolate), result2);
20597 } 20673 }
20598 20674
OLDNEW
« no previous file with comments | « src/heap.cc ('k') | test/cctest/test-mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698