OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 872 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 virtual const char* data() const { return data_; } | 883 virtual const char* data() const { return data_; } |
884 virtual size_t length() const { return length_; } | 884 virtual size_t length() const { return length_; } |
885 private: | 885 private: |
886 const char* data_; | 886 const char* data_; |
887 size_t length_; | 887 size_t length_; |
888 }; | 888 }; |
889 | 889 |
890 } // namespace | 890 } // namespace |
891 | 891 |
892 TEST(HeapSnapshotJSONSerialization) { | 892 TEST(HeapSnapshotJSONSerialization) { |
| 893 v8::Isolate* isolate = CcTest::isolate(); |
893 LocalContext env; | 894 LocalContext env; |
894 v8::HandleScope scope(env->GetIsolate()); | 895 v8::HandleScope scope(isolate); |
895 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 896 v8::HeapProfiler* heap_profiler = isolate->GetHeapProfiler(); |
896 | 897 |
897 #define STRING_LITERAL_FOR_TEST \ | 898 #define STRING_LITERAL_FOR_TEST \ |
898 "\"String \\n\\r\\u0008\\u0081\\u0101\\u0801\\u8001\"" | 899 "\"String \\n\\r\\u0008\\u0081\\u0101\\u0801\\u8001\"" |
899 CompileRun( | 900 CompileRun( |
900 "function A(s) { this.s = s; }\n" | 901 "function A(s) { this.s = s; }\n" |
901 "function B(x) { this.x = x; }\n" | 902 "function B(x) { this.x = x; }\n" |
902 "var a = new A(" STRING_LITERAL_FOR_TEST ");\n" | 903 "var a = new A(" STRING_LITERAL_FOR_TEST ");\n" |
903 "var b = new B(a);"); | 904 "var b = new B(a);"); |
904 const v8::HeapSnapshot* snapshot = | 905 const v8::HeapSnapshot* snapshot = |
905 heap_profiler->TakeHeapSnapshot(v8_str("json")); | 906 heap_profiler->TakeHeapSnapshot(v8_str("json")); |
(...skipping 10 matching lines...) Expand all Loading... |
916 OneByteResource* json_res = new OneByteResource(json); | 917 OneByteResource* json_res = new OneByteResource(json); |
917 v8::Local<v8::String> json_string = | 918 v8::Local<v8::String> json_string = |
918 v8::String::NewExternal(env->GetIsolate(), json_res); | 919 v8::String::NewExternal(env->GetIsolate(), json_res); |
919 env->Global()->Set(v8_str("json_snapshot"), json_string); | 920 env->Global()->Set(v8_str("json_snapshot"), json_string); |
920 v8::Local<v8::Value> snapshot_parse_result = CompileRun( | 921 v8::Local<v8::Value> snapshot_parse_result = CompileRun( |
921 "var parsed = JSON.parse(json_snapshot); true;"); | 922 "var parsed = JSON.parse(json_snapshot); true;"); |
922 CHECK(!snapshot_parse_result.IsEmpty()); | 923 CHECK(!snapshot_parse_result.IsEmpty()); |
923 | 924 |
924 // Verify that snapshot object has required fields. | 925 // Verify that snapshot object has required fields. |
925 v8::Local<v8::Object> parsed_snapshot = | 926 v8::Local<v8::Object> parsed_snapshot = |
926 env->Global()->Get(v8_str("parsed"))->ToObject(); | 927 env->Global()->Get(v8_str("parsed"))->ToObject(isolate); |
927 CHECK(parsed_snapshot->Has(v8_str("snapshot"))); | 928 CHECK(parsed_snapshot->Has(v8_str("snapshot"))); |
928 CHECK(parsed_snapshot->Has(v8_str("nodes"))); | 929 CHECK(parsed_snapshot->Has(v8_str("nodes"))); |
929 CHECK(parsed_snapshot->Has(v8_str("edges"))); | 930 CHECK(parsed_snapshot->Has(v8_str("edges"))); |
930 CHECK(parsed_snapshot->Has(v8_str("strings"))); | 931 CHECK(parsed_snapshot->Has(v8_str("strings"))); |
931 | 932 |
932 // Get node and edge "member" offsets. | 933 // Get node and edge "member" offsets. |
933 v8::Local<v8::Value> meta_analysis_result = CompileRun( | 934 v8::Local<v8::Value> meta_analysis_result = CompileRun( |
934 "var meta = parsed.snapshot.meta;\n" | 935 "var meta = parsed.snapshot.meta;\n" |
935 "var edge_count_offset = meta.node_fields.indexOf('edge_count');\n" | 936 "var edge_count_offset = meta.node_fields.indexOf('edge_count');\n" |
936 "var node_fields_count = meta.node_fields.length;\n" | 937 "var node_fields_count = meta.node_fields.length;\n" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 v8::Local<v8::Value> string_obj_pos_val = CompileRun( | 973 v8::Local<v8::Value> string_obj_pos_val = CompileRun( |
973 "GetChildPosByProperty(\n" | 974 "GetChildPosByProperty(\n" |
974 " GetChildPosByProperty(\n" | 975 " GetChildPosByProperty(\n" |
975 " GetChildPosByProperty(" | 976 " GetChildPosByProperty(" |
976 " parsed.edges[edge_fields_count + edge_to_node_offset]," | 977 " parsed.edges[edge_fields_count + edge_to_node_offset]," |
977 " \"b\", property_type),\n" | 978 " \"b\", property_type),\n" |
978 " \"x\", property_type)," | 979 " \"x\", property_type)," |
979 " \"s\", property_type)"); | 980 " \"s\", property_type)"); |
980 CHECK(!string_obj_pos_val.IsEmpty()); | 981 CHECK(!string_obj_pos_val.IsEmpty()); |
981 int string_obj_pos = | 982 int string_obj_pos = |
982 static_cast<int>(string_obj_pos_val->ToNumber()->Value()); | 983 static_cast<int>(string_obj_pos_val->ToNumber(isolate)->Value()); |
983 v8::Local<v8::Object> nodes_array = | 984 v8::Local<v8::Object> nodes_array = |
984 parsed_snapshot->Get(v8_str("nodes"))->ToObject(); | 985 parsed_snapshot->Get(v8_str("nodes"))->ToObject(isolate); |
985 int string_index = static_cast<int>( | 986 int string_index = static_cast<int>( |
986 nodes_array->Get(string_obj_pos + 1)->ToNumber()->Value()); | 987 nodes_array->Get(string_obj_pos + 1)->ToNumber(isolate)->Value()); |
987 CHECK_GT(string_index, 0); | 988 CHECK_GT(string_index, 0); |
988 v8::Local<v8::Object> strings_array = | 989 v8::Local<v8::Object> strings_array = |
989 parsed_snapshot->Get(v8_str("strings"))->ToObject(); | 990 parsed_snapshot->Get(v8_str("strings"))->ToObject(isolate); |
990 v8::Local<v8::String> string = strings_array->Get(string_index)->ToString(); | 991 v8::Local<v8::String> string = |
| 992 strings_array->Get(string_index)->ToString(isolate); |
991 v8::Local<v8::String> ref_string = | 993 v8::Local<v8::String> ref_string = |
992 CompileRun(STRING_LITERAL_FOR_TEST)->ToString(); | 994 CompileRun(STRING_LITERAL_FOR_TEST)->ToString(isolate); |
993 #undef STRING_LITERAL_FOR_TEST | 995 #undef STRING_LITERAL_FOR_TEST |
994 CHECK_EQ(*v8::String::Utf8Value(ref_string), | 996 CHECK_EQ(*v8::String::Utf8Value(ref_string), |
995 *v8::String::Utf8Value(string)); | 997 *v8::String::Utf8Value(string)); |
996 } | 998 } |
997 | 999 |
998 | 1000 |
999 TEST(HeapSnapshotJSONSerializationAborting) { | 1001 TEST(HeapSnapshotJSONSerializationAborting) { |
1000 LocalContext env; | 1002 LocalContext env; |
1001 v8::HandleScope scope(env->GetIsolate()); | 1003 v8::HandleScope scope(env->GetIsolate()); |
1002 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 1004 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); |
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithGetter"); | 1944 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithGetter"); |
1943 CHECK_EQ(NULL, func); | 1945 CHECK_EQ(NULL, func); |
1944 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithSetter"); | 1946 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "set propWithSetter"); |
1945 CHECK_NE(NULL, func); | 1947 CHECK_NE(NULL, func); |
1946 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithSetter"); | 1948 func = GetProperty(obj1, v8::HeapGraphEdge::kProperty, "get propWithSetter"); |
1947 CHECK_EQ(NULL, func); | 1949 CHECK_EQ(NULL, func); |
1948 } | 1950 } |
1949 | 1951 |
1950 | 1952 |
1951 TEST(HiddenPropertiesFastCase) { | 1953 TEST(HiddenPropertiesFastCase) { |
| 1954 v8::Isolate* isolate = CcTest::isolate(); |
1952 LocalContext env; | 1955 LocalContext env; |
1953 v8::HandleScope scope(env->GetIsolate()); | 1956 v8::HandleScope scope(isolate); |
1954 v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); | 1957 v8::HeapProfiler* heap_profiler = isolate->GetHeapProfiler(); |
1955 | 1958 |
1956 CompileRun( | 1959 CompileRun( |
1957 "function C(x) { this.a = this; this.b = x; }\n" | 1960 "function C(x) { this.a = this; this.b = x; }\n" |
1958 "c = new C(2012);\n"); | 1961 "c = new C(2012);\n"); |
1959 const v8::HeapSnapshot* snapshot = | 1962 const v8::HeapSnapshot* snapshot = |
1960 heap_profiler->TakeHeapSnapshot(v8_str("HiddenPropertiesFastCase1")); | 1963 heap_profiler->TakeHeapSnapshot(v8_str("HiddenPropertiesFastCase1")); |
1961 CHECK(ValidateSnapshot(snapshot)); | 1964 CHECK(ValidateSnapshot(snapshot)); |
1962 const v8::HeapGraphNode* global = GetGlobalObject(snapshot); | 1965 const v8::HeapGraphNode* global = GetGlobalObject(snapshot); |
1963 const v8::HeapGraphNode* c = | 1966 const v8::HeapGraphNode* c = |
1964 GetProperty(global, v8::HeapGraphEdge::kProperty, "c"); | 1967 GetProperty(global, v8::HeapGraphEdge::kProperty, "c"); |
1965 CHECK_NE(NULL, c); | 1968 CHECK_NE(NULL, c); |
1966 const v8::HeapGraphNode* hidden_props = | 1969 const v8::HeapGraphNode* hidden_props = |
1967 GetProperty(c, v8::HeapGraphEdge::kInternal, "hidden_properties"); | 1970 GetProperty(c, v8::HeapGraphEdge::kInternal, "hidden_properties"); |
1968 CHECK_EQ(NULL, hidden_props); | 1971 CHECK_EQ(NULL, hidden_props); |
1969 | 1972 |
1970 v8::Handle<v8::Value> cHandle = | 1973 v8::Handle<v8::Value> cHandle = |
1971 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "c")); | 1974 env->Global()->Get(v8::String::NewFromUtf8(env->GetIsolate(), "c")); |
1972 CHECK(!cHandle.IsEmpty() && cHandle->IsObject()); | 1975 CHECK(!cHandle.IsEmpty() && cHandle->IsObject()); |
1973 cHandle->ToObject()->SetHiddenValue(v8_str("key"), v8_str("val")); | 1976 cHandle->ToObject(isolate)->SetHiddenValue(v8_str("key"), v8_str("val")); |
1974 | 1977 |
1975 snapshot = heap_profiler->TakeHeapSnapshot( | 1978 snapshot = heap_profiler->TakeHeapSnapshot( |
1976 v8_str("HiddenPropertiesFastCase2")); | 1979 v8_str("HiddenPropertiesFastCase2")); |
1977 CHECK(ValidateSnapshot(snapshot)); | 1980 CHECK(ValidateSnapshot(snapshot)); |
1978 global = GetGlobalObject(snapshot); | 1981 global = GetGlobalObject(snapshot); |
1979 c = GetProperty(global, v8::HeapGraphEdge::kProperty, "c"); | 1982 c = GetProperty(global, v8::HeapGraphEdge::kProperty, "c"); |
1980 CHECK_NE(NULL, c); | 1983 CHECK_NE(NULL, c); |
1981 hidden_props = GetProperty(c, v8::HeapGraphEdge::kInternal, | 1984 hidden_props = GetProperty(c, v8::HeapGraphEdge::kInternal, |
1982 "hidden_properties"); | 1985 "hidden_properties"); |
1983 CHECK_NE(NULL, hidden_props); | 1986 CHECK_NE(NULL, hidden_props); |
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2794 map.AddRange(ToAddress(0x180), 0x80, 6U); | 2797 map.AddRange(ToAddress(0x180), 0x80, 6U); |
2795 map.AddRange(ToAddress(0x180), 0x80, 7U); | 2798 map.AddRange(ToAddress(0x180), 0x80, 7U); |
2796 CHECK_EQ(7, map.GetTraceNodeId(ToAddress(0x180))); | 2799 CHECK_EQ(7, map.GetTraceNodeId(ToAddress(0x180))); |
2797 CHECK_EQ(5, map.GetTraceNodeId(ToAddress(0x200))); | 2800 CHECK_EQ(5, map.GetTraceNodeId(ToAddress(0x200))); |
2798 CHECK_EQ(3, static_cast<int>(map.size())); | 2801 CHECK_EQ(3, static_cast<int>(map.size())); |
2799 | 2802 |
2800 map.Clear(); | 2803 map.Clear(); |
2801 CHECK_EQ(0, static_cast<int>(map.size())); | 2804 CHECK_EQ(0, static_cast<int>(map.size())); |
2802 CHECK_EQ(0, map.GetTraceNodeId(ToAddress(0x400))); | 2805 CHECK_EQ(0, map.GetTraceNodeId(ToAddress(0x400))); |
2803 } | 2806 } |
OLD | NEW |