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

Side by Side Diff: runtime/vm/object.h

Issue 2949803002: New growth strategy for growable arrays (Closed)
Patch Set: Branch-free grow size computation. Renamed function names to be clearer. Created 3 years, 6 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
« no previous file with comments | « runtime/vm/mirrors_api_impl.cc ('k') | runtime/vm/object.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_OBJECT_H_ 5 #ifndef RUNTIME_VM_OBJECT_H_
6 #define RUNTIME_VM_OBJECT_H_ 6 #define RUNTIME_VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 7634 matching lines...) Expand 10 before | Expand all | Expand 10 after
7645 Heap::Space space = Heap::kNew); 7645 Heap::Space space = Heap::kNew);
7646 7646
7647 // Return an Array object that contains all the elements currently present 7647 // Return an Array object that contains all the elements currently present
7648 // in the specified Growable Object Array. This is done by first truncating 7648 // in the specified Growable Object Array. This is done by first truncating
7649 // the Growable Object Array's backing array to the currently used size and 7649 // the Growable Object Array's backing array to the currently used size and
7650 // returning the truncated backing array. 7650 // returning the truncated backing array.
7651 // The remaining unused part of the backing array is marked as an Array 7651 // The remaining unused part of the backing array is marked as an Array
7652 // object or a regular Object so that it can be traversed during garbage 7652 // object or a regular Object so that it can be traversed during garbage
7653 // collection. The backing array of the original Growable Object Array is 7653 // collection. The backing array of the original Growable Object Array is
7654 // set to an empty array. 7654 // set to an empty array.
7655 static RawArray* MakeArray(const GrowableObjectArray& growable_array); 7655 // If the unique parameter is false, the function is allowed to return
7656 // a shared Array instance.
7657 static RawArray* MakeFixedLength(const GrowableObjectArray& growable_array,
7658 bool unique = false);
7656 7659
7657 RawArray* Slice(intptr_t start, 7660 RawArray* Slice(intptr_t start,
7658 intptr_t count, 7661 intptr_t count,
7659 bool with_type_argument) const; 7662 bool with_type_argument) const;
7660 7663
7661 protected: 7664 protected:
7662 static RawArray* New(intptr_t class_id, 7665 static RawArray* New(intptr_t class_id,
7663 intptr_t len, 7666 intptr_t len,
7664 Heap::Space space = Heap::kNew); 7667 Heap::Space space = Heap::kNew);
7665 7668
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
7759 7762
7760 virtual RawTypeArguments* GetTypeArguments() const { 7763 virtual RawTypeArguments* GetTypeArguments() const {
7761 return raw_ptr()->type_arguments_; 7764 return raw_ptr()->type_arguments_;
7762 } 7765 }
7763 virtual void SetTypeArguments(const TypeArguments& value) const { 7766 virtual void SetTypeArguments(const TypeArguments& value) const {
7764 // A GrowableObjectArray is raw or takes one type argument. However, its 7767 // A GrowableObjectArray is raw or takes one type argument. However, its
7765 // type argument vector may be longer than 1 due to a type optimization 7768 // type argument vector may be longer than 1 due to a type optimization
7766 // reusing the type argument vector of the instantiator. 7769 // reusing the type argument vector of the instantiator.
7767 ASSERT(value.IsNull() || ((value.Length() >= 1) && value.IsInstantiated() && 7770 ASSERT(value.IsNull() || ((value.Length() >= 1) && value.IsInstantiated() &&
7768 value.IsCanonical())); 7771 value.IsCanonical()));
7769 const Array& contents = Array::Handle(data());
7770 contents.SetTypeArguments(value);
7771 StorePointer(&raw_ptr()->type_arguments_, value.raw()); 7772 StorePointer(&raw_ptr()->type_arguments_, value.raw());
7772 } 7773 }
7773 7774
7774 // We don't expect a growable object array to be canonicalized. 7775 // We don't expect a growable object array to be canonicalized.
7775 virtual bool CanonicalizeEquals(const Instance& other) const { 7776 virtual bool CanonicalizeEquals(const Instance& other) const {
7776 UNREACHABLE(); 7777 UNREACHABLE();
7777 return false; 7778 return false;
7778 } 7779 }
7779 virtual uword ComputeCanonicalTableHash() const { 7780 virtual uword ComputeCanonicalTableHash() const {
7780 UNREACHABLE(); 7781 UNREACHABLE();
(...skipping 30 matching lines...) Expand all
7811 static RawGrowableObjectArray* New(const Array& array, 7812 static RawGrowableObjectArray* New(const Array& array,
7812 Heap::Space space = Heap::kNew); 7813 Heap::Space space = Heap::kNew);
7813 7814
7814 private: 7815 private:
7815 RawArray* DataArray() const { return data()->ptr(); } 7816 RawArray* DataArray() const { return data()->ptr(); }
7816 RawObject** ObjectAddr(intptr_t index) const { 7817 RawObject** ObjectAddr(intptr_t index) const {
7817 ASSERT((index >= 0) && (index < Length())); 7818 ASSERT((index >= 0) && (index < Length()));
7818 return &(DataArray()->data()[index]); 7819 return &(DataArray()->data()[index]);
7819 } 7820 }
7820 7821
7821 static const int kDefaultInitialCapacity = 4; 7822 static const int kDefaultInitialCapacity = 0;
7822 7823
7823 FINAL_HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance); 7824 FINAL_HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance);
7824 friend class Array; 7825 friend class Array;
7825 friend class Class; 7826 friend class Class;
7826 }; 7827 };
7827 7828
7828 7829
7829 class Float32x4 : public Instance { 7830 class Float32x4 : public Instance {
7830 public: 7831 public:
7831 static RawFloat32x4* New(float value0, 7832 static RawFloat32x4* New(float value0,
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
9067 9068
9068 inline void TypeArguments::SetHash(intptr_t value) const { 9069 inline void TypeArguments::SetHash(intptr_t value) const {
9069 // This is only safe because we create a new Smi, which does not cause 9070 // This is only safe because we create a new Smi, which does not cause
9070 // heap allocation. 9071 // heap allocation.
9071 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); 9072 StoreSmi(&raw_ptr()->hash_, Smi::New(value));
9072 } 9073 }
9073 9074
9074 } // namespace dart 9075 } // namespace dart
9075 9076
9076 #endif // RUNTIME_VM_OBJECT_H_ 9077 #endif // RUNTIME_VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/mirrors_api_impl.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698