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

Side by Side Diff: src/objects-debug.cc

Issue 10170030: Implement tracking and optimizations of packed arrays (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: ia32 ready to go Created 8 years, 7 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
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 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 if (GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS) { 279 if (GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS) {
280 ASSERT(this->elements()->IsFixedArray()); 280 ASSERT(this->elements()->IsFixedArray());
281 ASSERT(this->elements()->length() >= 2); 281 ASSERT(this->elements()->length() >= 2);
282 } 282 }
283 283
284 if (HasFastProperties()) { 284 if (HasFastProperties()) {
285 CHECK_EQ(map()->unused_property_fields(), 285 CHECK_EQ(map()->unused_property_fields(),
286 (map()->inobject_properties() + properties()->length() - 286 (map()->inobject_properties() + properties()->length() -
287 map()->NextFreePropertyIndex())); 287 map()->NextFreePropertyIndex()));
288 } 288 }
289 ASSERT_EQ((map()->has_fast_elements() || 289 ASSERT_EQ((map()->has_fast_smi_or_object_elements() ||
290 map()->has_fast_smi_only_elements() ||
291 (elements() == GetHeap()->empty_fixed_array())), 290 (elements() == GetHeap()->empty_fixed_array())),
292 (elements()->map() == GetHeap()->fixed_array_map() || 291 (elements()->map() == GetHeap()->fixed_array_map() ||
293 elements()->map() == GetHeap()->fixed_cow_array_map())); 292 elements()->map() == GetHeap()->fixed_cow_array_map()));
294 ASSERT(map()->has_fast_elements() == HasFastElements()); 293 ASSERT(map()->has_fast_object_elements() == HasFastObjectElements());
295 } 294 }
296 295
297 296
298 void Map::MapVerify() { 297 void Map::MapVerify() {
299 ASSERT(!HEAP->InNewSpace(this)); 298 ASSERT(!HEAP->InNewSpace(this));
300 ASSERT(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE); 299 ASSERT(FIRST_TYPE <= instance_type() && instance_type() <= LAST_TYPE);
301 ASSERT(instance_size() == kVariableSizeSentinel || 300 ASSERT(instance_size() == kVariableSizeSentinel ||
302 (kPointerSize <= instance_size() && 301 (kPointerSize <= instance_size() &&
303 instance_size() < HEAP->Capacity())); 302 instance_size() < HEAP->Capacity()));
304 VerifyHeapPointer(prototype()); 303 VerifyHeapPointer(prototype());
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 VerifyObjectField(kDebugInfoOffset); 500 VerifyObjectField(kDebugInfoOffset);
502 } 501 }
503 502
504 503
505 void JSGlobalProxy::JSGlobalProxyVerify() { 504 void JSGlobalProxy::JSGlobalProxyVerify() {
506 CHECK(IsJSGlobalProxy()); 505 CHECK(IsJSGlobalProxy());
507 JSObjectVerify(); 506 JSObjectVerify();
508 VerifyObjectField(JSGlobalProxy::kContextOffset); 507 VerifyObjectField(JSGlobalProxy::kContextOffset);
509 // Make sure that this object has no properties, elements. 508 // Make sure that this object has no properties, elements.
510 CHECK_EQ(0, properties()->length()); 509 CHECK_EQ(0, properties()->length());
511 CHECK(HasFastElements()); 510 CHECK(HasFastObjectElements());
512 CHECK_EQ(0, FixedArray::cast(elements())->length()); 511 CHECK_EQ(0, FixedArray::cast(elements())->length());
513 } 512 }
514 513
515 514
516 void JSGlobalObject::JSGlobalObjectVerify() { 515 void JSGlobalObject::JSGlobalObjectVerify() {
517 CHECK(IsJSGlobalObject()); 516 CHECK(IsJSGlobalObject());
518 JSObjectVerify(); 517 JSObjectVerify();
519 for (int i = GlobalObject::kBuiltinsOffset; 518 for (int i = GlobalObject::kBuiltinsOffset;
520 i < JSGlobalObject::kSize; 519 i < JSGlobalObject::kSize;
521 i += kPointerSize) { 520 i += kPointerSize) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 info->number_of_fast_used_fields_ += map()->NextFreePropertyIndex(); 795 info->number_of_fast_used_fields_ += map()->NextFreePropertyIndex();
797 info->number_of_fast_unused_fields_ += map()->unused_property_fields(); 796 info->number_of_fast_unused_fields_ += map()->unused_property_fields();
798 } else { 797 } else {
799 StringDictionary* dict = property_dictionary(); 798 StringDictionary* dict = property_dictionary();
800 info->number_of_slow_used_properties_ += dict->NumberOfElements(); 799 info->number_of_slow_used_properties_ += dict->NumberOfElements();
801 info->number_of_slow_unused_properties_ += 800 info->number_of_slow_unused_properties_ +=
802 dict->Capacity() - dict->NumberOfElements(); 801 dict->Capacity() - dict->NumberOfElements();
803 } 802 }
804 // Indexed properties 803 // Indexed properties
805 switch (GetElementsKind()) { 804 switch (GetElementsKind()) {
805 case FAST_HOLEY_SMI_ELEMENTS:
806 case FAST_SMI_ELEMENTS:
807 case FAST_HOLEY_DOUBLE_ELEMENTS:
808 case FAST_DOUBLE_ELEMENTS:
809 case FAST_HOLEY_ELEMENTS:
806 case FAST_ELEMENTS: { 810 case FAST_ELEMENTS: {
807 info->number_of_objects_with_fast_elements_++; 811 info->number_of_objects_with_fast_elements_++;
808 int holes = 0; 812 int holes = 0;
809 FixedArray* e = FixedArray::cast(elements()); 813 FixedArray* e = FixedArray::cast(elements());
810 int len = e->length(); 814 int len = e->length();
811 Heap* heap = HEAP; 815 Heap* heap = HEAP;
812 for (int i = 0; i < len; i++) { 816 for (int i = 0; i < len; i++) {
813 if (e->get(i) == heap->the_hole_value()) holes++; 817 if (e->get(i) == heap->the_hole_value()) holes++;
814 } 818 }
815 info->number_of_fast_used_elements_ += len - holes; 819 info->number_of_fast_used_elements_ += len - holes;
816 info->number_of_fast_unused_elements_ += holes; 820 info->number_of_fast_unused_elements_ += holes;
817 break; 821 break;
818 } 822 }
823 case EXTERNAL_BYTE_ELEMENTS:
824 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
825 case EXTERNAL_SHORT_ELEMENTS:
826 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
827 case EXTERNAL_INT_ELEMENTS:
828 case EXTERNAL_UNSIGNED_INT_ELEMENTS:
829 case EXTERNAL_FLOAT_ELEMENTS:
830 case EXTERNAL_DOUBLE_ELEMENTS:
819 case EXTERNAL_PIXEL_ELEMENTS: { 831 case EXTERNAL_PIXEL_ELEMENTS: {
820 info->number_of_objects_with_fast_elements_++; 832 info->number_of_objects_with_fast_elements_++;
821 ExternalPixelArray* e = ExternalPixelArray::cast(elements()); 833 ExternalPixelArray* e = ExternalPixelArray::cast(elements());
822 info->number_of_fast_used_elements_ += e->length(); 834 info->number_of_fast_used_elements_ += e->length();
823 break; 835 break;
824 } 836 }
825 case DICTIONARY_ELEMENTS: { 837 case DICTIONARY_ELEMENTS: {
826 SeededNumberDictionary* dict = element_dictionary(); 838 SeededNumberDictionary* dict = element_dictionary();
827 info->number_of_slow_used_elements_ += dict->NumberOfElements(); 839 info->number_of_slow_used_elements_ += dict->NumberOfElements();
828 info->number_of_slow_unused_elements_ += 840 info->number_of_slow_unused_elements_ +=
829 dict->Capacity() - dict->NumberOfElements(); 841 dict->Capacity() - dict->NumberOfElements();
830 break; 842 break;
831 } 843 }
832 default: 844 case NON_STRICT_ARGUMENTS_ELEMENTS:
833 UNREACHABLE();
834 break; 845 break;
835 } 846 }
836 } 847 }
837 848
838 849
839 void JSObject::SpillInformation::Clear() { 850 void JSObject::SpillInformation::Clear() {
840 number_of_objects_ = 0; 851 number_of_objects_ = 0;
841 number_of_objects_with_fast_properties_ = 0; 852 number_of_objects_with_fast_properties_ = 0;
842 number_of_objects_with_fast_elements_ = 0; 853 number_of_objects_with_fast_elements_ = 0;
843 number_of_fast_used_fields_ = 0; 854 number_of_fast_used_fields_ = 0;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 ASSERT(e->IsUndefined()); 942 ASSERT(e->IsUndefined());
932 } 943 }
933 } 944 }
934 } 945 }
935 } 946 }
936 947
937 948
938 #endif // DEBUG 949 #endif // DEBUG
939 950
940 } } // namespace v8::internal 951 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698