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

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

Issue 9325022: Decode the Dart message into a Dart_CMessage structure before calling the native port callback (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from asiva@ Created 8 years, 10 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
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | no next file » | 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 VM_ZONE_H_ 5 #ifndef VM_ZONE_H_
6 #define VM_ZONE_H_ 6 #define VM_ZONE_H_
7 7
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/handles.h" 10 #include "vm/handles.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 class Segment; 84 class Segment;
85 85
86 // The current head segment; may be NULL. 86 // The current head segment; may be NULL.
87 Segment* head_; 87 Segment* head_;
88 88
89 // List of large segments allocated in this zone; may be NULL. 89 // List of large segments allocated in this zone; may be NULL.
90 Segment* large_segments_; 90 Segment* large_segments_;
91 91
92 friend class Zone; 92 friend class Zone;
93 friend class ApiZone; 93 friend class ApiZone;
94 template<typename T, typename B> friend class BaseGrowableArray;
94 DISALLOW_COPY_AND_ASSIGN(BaseZone); 95 DISALLOW_COPY_AND_ASSIGN(BaseZone);
95 }; 96 };
96 97
97 98
98 class Zone : public StackResource { 99 class Zone : public StackResource {
99 public: 100 public:
100 // Create an empty zone and set is at the current zone for the Isolate. 101 // Create an empty zone and set is at the current zone for the Isolate.
101 explicit Zone(Isolate* isolate); 102 explicit Zone(Isolate* isolate);
102 103
103 // Delete all memory associated with the zone. 104 // Delete all memory associated with the zone.
(...skipping 16 matching lines...) Expand all
120 // Make a copy of the string in the zone allocated area. 121 // Make a copy of the string in the zone allocated area.
121 char* MakeCopyOfString(const char* str) { 122 char* MakeCopyOfString(const char* str) {
122 return zone_.MakeCopyOfString(str); 123 return zone_.MakeCopyOfString(str);
123 } 124 }
124 125
125 VMHandles* handles() { return &handles_; } 126 VMHandles* handles() { return &handles_; }
126 127
127 void VisitObjectPointers(ObjectPointerVisitor* visitor); 128 void VisitObjectPointers(ObjectPointerVisitor* visitor);
128 129
129 private: 130 private:
131 BaseZone* GetBaseZone() { return &zone_; }
132
130 BaseZone zone_; 133 BaseZone zone_;
131 134
132 // Structure for managing handles allocation. 135 // Structure for managing handles allocation.
133 VMHandles handles_; 136 VMHandles handles_;
134 137
135 // Used for chaining zones in order to allow unwinding of stacks. 138 // Used for chaining zones in order to allow unwinding of stacks.
136 Zone* previous_; 139 Zone* previous_;
140
141 template<typename T> friend class GrowableArray;
142 template<typename T> friend class ZoneGrowableArray;
143
137 DISALLOW_IMPLICIT_CONSTRUCTORS(Zone); 144 DISALLOW_IMPLICIT_CONSTRUCTORS(Zone);
138 }; 145 };
139 146
140 147
141 inline uword BaseZone::Allocate(intptr_t size) { 148 inline uword BaseZone::Allocate(intptr_t size) {
142 ASSERT(size >= 0); 149 ASSERT(size >= 0);
143 150
144 // Round up the requested size to fit the alignment. 151 // Round up the requested size to fit the alignment.
145 size = Utils::RoundUp(size, kAlignment); 152 size = Utils::RoundUp(size, kAlignment);
146 153
147 // Check if the requested size is available without expanding. 154 // Check if the requested size is available without expanding.
148 uword result; 155 uword result;
149 intptr_t free_size = (limit_ - position_); 156 intptr_t free_size = (limit_ - position_);
150 if (free_size >= size) { 157 if (free_size >= size) {
151 result = position_; 158 result = position_;
152 position_ += size; 159 position_ += size;
153 } else { 160 } else {
154 result = AllocateExpand(size); 161 result = AllocateExpand(size);
155 } 162 }
156 163
157 // Check that the result has the proper alignment and return it. 164 // Check that the result has the proper alignment and return it.
158 ASSERT(Utils::IsAligned(result, kAlignment)); 165 ASSERT(Utils::IsAligned(result, kAlignment));
159 return result; 166 return result;
160 } 167 }
161 168
162 } // namespace dart 169 } // namespace dart
163 170
164 #endif // VM_ZONE_H_ 171 #endif // VM_ZONE_H_
OLDNEW
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698