diff options
author | isaacs <i@izs.me> | 2012-02-06 15:21:49 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-02-06 15:21:49 -0800 |
commit | 8be699494ec67c3ba895bd8e1c9e3e73b02311d3 (patch) | |
tree | 22ee6f2ba22a26594ae0062c827c67710fc166db /deps/v8/test/cctest | |
parent | 23514fc94648185c092355bf3e5bbce76844bd42 (diff) | |
download | node-new-8be699494ec67c3ba895bd8e1c9e3e73b02311d3.tar.gz |
Upgrade V8 to 3.9.2
Diffstat (limited to 'deps/v8/test/cctest')
-rw-r--r-- | deps/v8/test/cctest/test-api.cc | 4 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-debug.cc | 61 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-heap-profiler.cc | 96 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-heap.cc | 10 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-mark-compact.cc | 2 |
5 files changed, 157 insertions, 16 deletions
diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc index 59d6d19462..e4e8462c5d 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -15558,10 +15558,12 @@ THREADED_TEST(AllowCodeGenFromStrings) { LocalContext context; // eval and the Function constructor allowed by default. + CHECK(context->IsCodeGenerationFromStringsAllowed()); CheckCodeGenerationAllowed(); // Disallow eval and the Function constructor. context->AllowCodeGenerationFromStrings(false); + CHECK(!context->IsCodeGenerationFromStringsAllowed()); CheckCodeGenerationDisallowed(); // Allow again. @@ -15571,10 +15573,12 @@ THREADED_TEST(AllowCodeGenFromStrings) { // Disallow but setting a global callback that will allow the calls. context->AllowCodeGenerationFromStrings(false); V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationAllowed); + CHECK(!context->IsCodeGenerationFromStringsAllowed()); CheckCodeGenerationAllowed(); // Set a callback that disallows the code generation. V8::SetAllowCodeGenerationFromStringsCallback(&CodeGenerationDisallowed); + CHECK(!context->IsCodeGenerationFromStringsAllowed()); CheckCodeGenerationDisallowed(); } diff --git a/deps/v8/test/cctest/test-debug.cc b/deps/v8/test/cctest/test-debug.cc index c0ea7072fe..d66f094df7 100644 --- a/deps/v8/test/cctest/test-debug.cc +++ b/deps/v8/test/cctest/test-debug.cc @@ -7286,4 +7286,65 @@ TEST(DebugBreakLoop) { } +v8::Local<v8::Script> inline_script; + +static void DebugBreakInlineListener(v8::DebugEvent event, + v8::Handle<v8::Object> exec_state, + v8::Handle<v8::Object> event_data, + v8::Handle<v8::Value> data) { + if (event != v8::Break) return; + + int expected_frame_count = 4; + int expected_line_number[] = {1, 4, 7, 12}; + + i::Handle<i::Object> compiled_script = v8::Utils::OpenHandle(*inline_script); + i::Handle<i::Script> source_script = i::Handle<i::Script>(i::Script::cast( + i::JSFunction::cast(*compiled_script)->shared()->script())); + + int break_id = v8::internal::Isolate::Current()->debug()->break_id(); + char script[128]; + i::Vector<char> script_vector(script, sizeof(script)); + OS::SNPrintF(script_vector, "%%GetFrameCount(%d)", break_id); + v8::Local<v8::Value> result = CompileRun(script); + + int frame_count = result->Int32Value(); + CHECK_EQ(expected_frame_count, frame_count); + + for (int i = 0; i < frame_count; i++) { + // The 5. element in the returned array of GetFrameDetails contains the + // source position of that frame. + OS::SNPrintF(script_vector, "%%GetFrameDetails(%d, %d)[5]", break_id, i); + v8::Local<v8::Value> result = CompileRun(script); + CHECK_EQ(expected_line_number[i], + i::GetScriptLineNumber(source_script, result->Int32Value())); + } + v8::Debug::SetDebugEventListener(NULL); + v8::V8::TerminateExecution(); +} + + +TEST(DebugBreakInline) { + i::FLAG_allow_natives_syntax = true; + v8::HandleScope scope; + DebugLocalContext env; + const char* source = + "function debug(b) { \n" + " if (b) debugger; \n" + "} \n" + "function f(b) { \n" + " debug(b) \n" + "}; \n" + "function g(b) { \n" + " f(b); \n" + "}; \n" + "g(false); \n" + "g(false); \n" + "%OptimizeFunctionOnNextCall(g); \n" + "g(true);"; + v8::Debug::SetDebugEventListener(DebugBreakInlineListener); + inline_script = v8::Script::Compile(v8::String::New(source)); + inline_script->Run(); +} + + #endif // ENABLE_DEBUGGER_SUPPORT diff --git a/deps/v8/test/cctest/test-heap-profiler.cc b/deps/v8/test/cctest/test-heap-profiler.cc index 4b211b4b58..a319c4d0e6 100644 --- a/deps/v8/test/cctest/test-heap-profiler.cc +++ b/deps/v8/test/cctest/test-heap-profiler.cc @@ -666,11 +666,13 @@ namespace { class TestRetainedObjectInfo : public v8::RetainedObjectInfo { public: TestRetainedObjectInfo(int hash, + const char* group_label, const char* label, intptr_t element_count = -1, intptr_t size = -1) : disposed_(false), hash_(hash), + group_label_(group_label), label_(label), element_count_(element_count), size_(size) { @@ -685,6 +687,7 @@ class TestRetainedObjectInfo : public v8::RetainedObjectInfo { return GetHash() == other->GetHash(); } virtual intptr_t GetHash() { return hash_; } + virtual const char* GetGroupLabel() { return group_label_; } virtual const char* GetLabel() { return label_; } virtual intptr_t GetElementCount() { return element_count_; } virtual intptr_t GetSizeInBytes() { return size_; } @@ -696,15 +699,15 @@ class TestRetainedObjectInfo : public v8::RetainedObjectInfo { if (wrapper->IsString()) { v8::String::AsciiValue ascii(wrapper); if (strcmp(*ascii, "AAA") == 0) - return new TestRetainedObjectInfo(1, "aaa", 100); + return new TestRetainedObjectInfo(1, "aaa-group", "aaa", 100); else if (strcmp(*ascii, "BBB") == 0) - return new TestRetainedObjectInfo(1, "aaa", 100); + return new TestRetainedObjectInfo(1, "aaa-group", "aaa", 100); } } else if (class_id == 2) { if (wrapper->IsString()) { v8::String::AsciiValue ascii(wrapper); if (strcmp(*ascii, "CCC") == 0) - return new TestRetainedObjectInfo(2, "ccc"); + return new TestRetainedObjectInfo(2, "ccc-group", "ccc"); } } CHECK(false); @@ -717,6 +720,7 @@ class TestRetainedObjectInfo : public v8::RetainedObjectInfo { bool disposed_; int category_; int hash_; + const char* group_label_; const char* label_; intptr_t element_count_; intptr_t size_; @@ -769,18 +773,21 @@ TEST(HeapSnapshotRetainedObjectInfo) { delete TestRetainedObjectInfo::instances[i]; } - const v8::HeapGraphNode* natives = GetNode( - snapshot->GetRoot(), v8::HeapGraphNode::kObject, "(Native objects)"); - CHECK_NE(NULL, natives); - CHECK_EQ(2, natives->GetChildrenCount()); + const v8::HeapGraphNode* native_group_aaa = GetNode( + snapshot->GetRoot(), v8::HeapGraphNode::kNative, "aaa-group"); + CHECK_NE(NULL, native_group_aaa); + CHECK_EQ(1, native_group_aaa->GetChildrenCount()); const v8::HeapGraphNode* aaa = GetNode( - natives, v8::HeapGraphNode::kNative, "aaa / 100 entries"); + native_group_aaa, v8::HeapGraphNode::kNative, "aaa / 100 entries"); CHECK_NE(NULL, aaa); + CHECK_EQ(2, aaa->GetChildrenCount()); + + const v8::HeapGraphNode* native_group_ccc = GetNode( + snapshot->GetRoot(), v8::HeapGraphNode::kNative, "ccc-group"); const v8::HeapGraphNode* ccc = GetNode( - natives, v8::HeapGraphNode::kNative, "ccc"); + native_group_ccc, v8::HeapGraphNode::kNative, "ccc"); CHECK_NE(NULL, ccc); - CHECK_EQ(2, aaa->GetChildrenCount()); const v8::HeapGraphNode* n_AAA = GetNode( aaa, v8::HeapGraphNode::kString, "AAA"); CHECK_NE(NULL, n_AAA); @@ -798,6 +805,75 @@ TEST(HeapSnapshotRetainedObjectInfo) { } +class GraphWithImplicitRefs { + public: + static const int kObjectsCount = 4; + explicit GraphWithImplicitRefs(LocalContext* env) { + CHECK_EQ(NULL, instance_); + instance_ = this; + for (int i = 0; i < kObjectsCount; i++) { + objects_[i] = v8::Persistent<v8::Object>::New(v8::Object::New()); + } + (*env)->Global()->Set(v8_str("root_object"), objects_[0]); + } + ~GraphWithImplicitRefs() { + instance_ = NULL; + } + + static void gcPrologue() { + instance_->AddImplicitReferences(); + } + + private: + void AddImplicitReferences() { + // 0 -> 1 + v8::V8::AddImplicitReferences( + v8::Persistent<v8::Object>::Cast(objects_[0]), &objects_[1], 1); + // Adding two more references(note length=2 in params): 1 -> 2, 1 -> 3 + v8::V8::AddImplicitReferences( + v8::Persistent<v8::Object>::Cast(objects_[1]), &objects_[2], 2); + } + + v8::Persistent<v8::Value> objects_[kObjectsCount]; + static GraphWithImplicitRefs* instance_; +}; + +GraphWithImplicitRefs* GraphWithImplicitRefs::instance_ = NULL; + + +TEST(HeapSnapshotImplicitReferences) { + v8::HandleScope scope; + LocalContext env; + + GraphWithImplicitRefs graph(&env); + v8::V8::SetGlobalGCPrologueCallback(&GraphWithImplicitRefs::gcPrologue); + + const v8::HeapSnapshot* snapshot = + v8::HeapProfiler::TakeSnapshot(v8_str("implicit_refs")); + + const v8::HeapGraphNode* global_object = GetGlobalObject(snapshot); + // Use kShortcut type to skip intermediate JSGlobalPropertyCell + const v8::HeapGraphNode* obj0 = GetProperty( + global_object, v8::HeapGraphEdge::kShortcut, "root_object"); + CHECK(obj0); + CHECK_EQ(v8::HeapGraphNode::kObject, obj0->GetType()); + const v8::HeapGraphNode* obj1 = GetProperty( + obj0, v8::HeapGraphEdge::kInternal, "native"); + CHECK(obj1); + int implicit_targets_count = 0; + for (int i = 0, count = obj1->GetChildrenCount(); i < count; ++i) { + const v8::HeapGraphEdge* prop = obj1->GetChild(i); + v8::String::AsciiValue prop_name(prop->GetName()); + if (prop->GetType() == v8::HeapGraphEdge::kInternal && + strcmp("native", *prop_name) == 0) { + ++implicit_targets_count; + } + } + CHECK_EQ(2, implicit_targets_count); + v8::V8::SetGlobalGCPrologueCallback(NULL); +} + + TEST(DeleteAllHeapSnapshots) { v8::HandleScope scope; LocalContext env; diff --git a/deps/v8/test/cctest/test-heap.cc b/deps/v8/test/cctest/test-heap.cc index eb5f3c605e..a4d4be4816 100644 --- a/deps/v8/test/cctest/test-heap.cc +++ b/deps/v8/test/cctest/test-heap.cc @@ -1,4 +1,4 @@ -// Copyright 2011 the V8 project authors. All rights reserved. +// Copyright 2012 the V8 project authors. All rights reserved. #include <stdlib.h> @@ -612,7 +612,7 @@ TEST(ObjectProperties) { CHECK(!obj->HasLocalProperty(*second)); // check string and symbol match - static const char* string1 = "fisk"; + const char* string1 = "fisk"; Handle<String> s1 = FACTORY->NewStringFromAscii(CStrVector(string1)); obj->SetProperty( *s1, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked(); @@ -620,7 +620,7 @@ TEST(ObjectProperties) { CHECK(obj->HasLocalProperty(*s1_symbol)); // check symbol and string match - static const char* string2 = "fugl"; + const char* string2 = "fugl"; Handle<String> s2_symbol = FACTORY->LookupAsciiSymbol(string2); obj->SetProperty( *s2_symbol, Smi::FromInt(1), NONE, kNonStrictMode)->ToObjectChecked(); @@ -811,7 +811,7 @@ TEST(Iteration) { // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE objs[next_objs_index++] = FACTORY->NewJSArray(10); - objs[next_objs_index++] = FACTORY->NewJSArray(10, TENURED); + objs[next_objs_index++] = FACTORY->NewJSArray(10, FAST_ELEMENTS, TENURED); // Allocate a small string to OLD_DATA_SPACE and NEW_SPACE objs[next_objs_index++] = @@ -1611,7 +1611,7 @@ TEST(PrototypeTransitionClearing) { Handle<JSObject> prototype; PagedSpace* space = HEAP->old_pointer_space(); do { - prototype = FACTORY->NewJSArray(32 * KB, TENURED); + prototype = FACTORY->NewJSArray(32 * KB, FAST_ELEMENTS, TENURED); } while (space->FirstPage() == space->LastPage() || !space->LastPage()->Contains(prototype->address())); diff --git a/deps/v8/test/cctest/test-mark-compact.cc b/deps/v8/test/cctest/test-mark-compact.cc index 614b1fd472..9de069d87f 100644 --- a/deps/v8/test/cctest/test-mark-compact.cc +++ b/deps/v8/test/cctest/test-mark-compact.cc @@ -540,7 +540,7 @@ TEST(BootUpMemoryUse) { } } else { if (v8::internal::Snapshot::IsEnabled()) { - CHECK_LE(booted_memory - initial_memory, 6500 * 1024); // 6365. + CHECK_LE(booted_memory - initial_memory, 6500 * 1024); // 6356. } else { CHECK_LE(booted_memory - initial_memory, 6654 * 1024); // 6424 } |