Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 848 } | 848 } |
| 849 #endif | 849 #endif |
| 850 if (length == 0) { | 850 if (length == 0) { |
| 851 if (info != NULL) info->Dispose(); | 851 if (info != NULL) info->Dispose(); |
| 852 return; | 852 return; |
| 853 } | 853 } |
| 854 for (size_t i = 0; i < length; ++i) { | 854 for (size_t i = 0; i < length; ++i) { |
| 855 object_groups_.Add(ObjectGroupConnection( | 855 object_groups_.Add(ObjectGroupConnection( |
| 856 UniqueId(reinterpret_cast<intptr_t>(handles[0])), handles[i])); | 856 UniqueId(reinterpret_cast<intptr_t>(handles[0])), handles[i])); |
| 857 } | 857 } |
| 858 retainer_infos_.Add(ObjectGroupRetainerInfo( | 858 for (size_t i = 0; i < length; ++i) { |
| 859 UniqueId(reinterpret_cast<intptr_t>(handles[0])), info)); | 859 if ((*handles[i])->IsHeapObject()) { |
| 860 representative_objects_.Add(ObjectGroupRepresentativeObject( | |
| 861 UniqueId(reinterpret_cast<intptr_t>(handles[0])), | |
| 862 reinterpret_cast<HeapObject**>(handles[i]))); | |
| 863 break; | |
| 864 } | |
| 865 } | |
| 866 if (info != NULL) { | |
| 867 retainer_infos_.Add(ObjectGroupRetainerInfo( | |
| 868 UniqueId(reinterpret_cast<intptr_t>(handles[0])), info)); | |
| 869 } | |
| 860 } | 870 } |
| 861 | 871 |
| 862 void GlobalHandles::SetObjectGroupId(Object** handle, | 872 void GlobalHandles::SetObjectGroupId(Object** handle, |
| 863 UniqueId id) { | 873 UniqueId id) { |
| 864 object_groups_.Add(ObjectGroupConnection(id, handle)); | 874 object_groups_.Add(ObjectGroupConnection(id, handle)); |
| 865 } | 875 } |
| 866 | 876 |
| 867 | 877 |
| 868 void GlobalHandles::SetRetainedObjectInfo(UniqueId id, | 878 void GlobalHandles::SetRetainedObjectInfo(UniqueId id, |
| 869 RetainedObjectInfo* info) { | 879 RetainedObjectInfo* info) { |
| 870 retainer_infos_.Add(ObjectGroupRetainerInfo(id, info)); | 880 retainer_infos_.Add(ObjectGroupRetainerInfo(id, info)); |
| 871 } | 881 } |
| 872 | 882 |
| 873 | 883 |
| 884 void GlobalHandles::SetRepresentativeObject( | |
| 885 UniqueId id, | |
| 886 HeapObject** representative_object) { | |
| 887 representative_objects_.Add( | |
| 888 ObjectGroupRepresentativeObject(id, representative_object)); | |
| 889 } | |
| 890 | |
| 891 | |
| 874 void GlobalHandles::AddImplicitReferences(HeapObject** parent, | 892 void GlobalHandles::AddImplicitReferences(HeapObject** parent, |
| 875 Object*** children, | 893 Object*** children, |
| 876 size_t length) { | 894 size_t length) { |
| 877 #ifdef DEBUG | 895 #ifdef DEBUG |
| 878 ASSERT(!Node::FromLocation(BitCast<Object**>(parent))->is_independent()); | 896 ASSERT(!Node::FromLocation(BitCast<Object**>(parent))->is_independent()); |
| 879 for (size_t i = 0; i < length; ++i) { | 897 for (size_t i = 0; i < length; ++i) { |
| 880 ASSERT(!Node::FromLocation(children[i])->is_independent()); | 898 ASSERT(!Node::FromLocation(children[i])->is_independent()); |
| 881 } | 899 } |
| 882 #endif | 900 #endif |
| 883 if (length == 0) return; | 901 for (size_t i = 0; i < length; ++i) { |
| 884 implicit_ref_groups_.Add(ImplicitRefGroup::New(parent, children, length)); | 902 implicit_ref_groups_.Add(ObjectGroupConnection( |
| 903 UniqueId(reinterpret_cast<intptr_t>(parent)), children[i])); | |
| 904 } | |
| 885 } | 905 } |
| 886 | 906 |
| 887 | 907 |
| 908 void GlobalHandles::AddImplicitReference(UniqueId id, Object** child) { | |
|
Michael Starzinger
2013/04/16 10:56:08
Can we add an assertion here to check that the chi
marja
2013/04/16 12:28:37
Done.
| |
| 909 implicit_ref_groups_.Add(ObjectGroupConnection(id, child)); | |
| 910 } | |
| 911 | |
| 912 | |
| 888 void GlobalHandles::RemoveObjectGroups() { | 913 void GlobalHandles::RemoveObjectGroups() { |
| 889 object_groups_.Clear(); | 914 object_groups_.Clear(); |
| 890 for (int i = 0; i < retainer_infos_.length(); ++i) { | 915 for (int i = 0; i < retainer_infos_.length(); ++i) { |
| 891 if (retainer_infos_[i].info != NULL) | 916 if (retainer_infos_[i].info != NULL) |
| 892 retainer_infos_[i].info->Dispose(); | 917 retainer_infos_[i].info->Dispose(); |
| 893 } | 918 } |
| 894 retainer_infos_.Clear(); | 919 retainer_infos_.Clear(); |
| 895 } | 920 } |
| 896 | 921 |
| 897 | 922 |
| 898 void GlobalHandles::RemoveImplicitRefGroups() { | 923 void GlobalHandles::RemoveImplicitRefGroups() { |
| 899 for (int i = 0; i < implicit_ref_groups_.length(); i++) { | 924 representative_objects_.Clear(); |
| 900 implicit_ref_groups_.at(i)->Dispose(); | |
| 901 } | |
| 902 implicit_ref_groups_.Clear(); | 925 implicit_ref_groups_.Clear(); |
| 903 } | 926 } |
| 904 | 927 |
| 905 | 928 |
| 906 void GlobalHandles::TearDown() { | 929 void GlobalHandles::TearDown() { |
| 907 // TODO(1428): invoke weak callbacks. | 930 // TODO(1428): invoke weak callbacks. |
| 908 } | 931 } |
| 909 | 932 |
| 910 | 933 |
| 911 } } // namespace v8::internal | 934 } } // namespace v8::internal |
| OLD | NEW |