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

Side by Side Diff: src/global-handles.h

Issue 22970004: Revert "Make GlobalHandle::NodeBlock deletable" (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 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 | « no previous file | src/global-handles.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 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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 150
151 // Returns the current number of weak handles to global objects. 151 // Returns the current number of weak handles to global objects.
152 // These handles are also included in NumberOfWeakHandles(). 152 // These handles are also included in NumberOfWeakHandles().
153 int NumberOfGlobalObjectWeakHandles(); 153 int NumberOfGlobalObjectWeakHandles();
154 154
155 // Returns the current number of handles to global objects. 155 // Returns the current number of handles to global objects.
156 int global_handles_count() const { 156 int global_handles_count() const {
157 return number_of_global_handles_; 157 return number_of_global_handles_;
158 } 158 }
159 159
160 // Returns the current number of allocated blocks
161 int block_count() const { return number_of_blocks_; }
162
163 // Clear the weakness of a global handle. 160 // Clear the weakness of a global handle.
164 static void ClearWeakness(Object** location); 161 static void ClearWeakness(Object** location);
165 162
166 // Clear the weakness of a global handle. 163 // Clear the weakness of a global handle.
167 static void MarkIndependent(Object** location); 164 static void MarkIndependent(Object** location);
168 165
169 // Mark the reference to this object externaly unreachable. 166 // Mark the reference to this object externaly unreachable.
170 static void MarkPartiallyDependent(Object** location); 167 static void MarkPartiallyDependent(Object** location);
171 168
172 static bool IsIndependent(Object** location); 169 static bool IsIndependent(Object** location);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 void RemoveImplicitRefGroups(); 269 void RemoveImplicitRefGroups();
273 270
274 // Tear down the global handle structure. 271 // Tear down the global handle structure.
275 void TearDown(); 272 void TearDown();
276 273
277 Isolate* isolate() { return isolate_; } 274 Isolate* isolate() { return isolate_; }
278 275
279 #ifdef DEBUG 276 #ifdef DEBUG
280 void PrintStats(); 277 void PrintStats();
281 void Print(); 278 void Print();
282 void VerifyBlockInvariants();
283 #endif 279 #endif
284 280
285 private: 281 private:
286 explicit GlobalHandles(Isolate* isolate); 282 explicit GlobalHandles(Isolate* isolate);
287 283
288 void SortBlocks(bool shouldPrune);
289
290 // Migrates data from the internal representation (object_group_connections_, 284 // Migrates data from the internal representation (object_group_connections_,
291 // retainer_infos_ and implicit_ref_connections_) to the public and more 285 // retainer_infos_ and implicit_ref_connections_) to the public and more
292 // efficient representation (object_groups_ and implicit_ref_groups_). 286 // efficient representation (object_groups_ and implicit_ref_groups_).
293 void ComputeObjectGroupsAndImplicitReferences(); 287 void ComputeObjectGroupsAndImplicitReferences();
294 288
295 // v8::internal::List is inefficient even for small number of elements, if we 289 // v8::internal::List is inefficient even for small number of elements, if we
296 // don't assign any initial capacity. 290 // don't assign any initial capacity.
297 static const int kObjectGroupConnectionsCapacity = 20; 291 static const int kObjectGroupConnectionsCapacity = 20;
298 292
299 // Internal node structures. 293 // Internal node structures.
300 class Node; 294 class Node;
301 class NodeBlock; 295 class NodeBlock;
302 class NodeIterator; 296 class NodeIterator;
303 class BlockListIterator;
304 // Base class for NodeBlock
305 class BlockList {
306 public:
307 BlockList();
308 ~BlockList() { ASSERT(IsDetached()); }
309 void Detach();
310 void InsertAsHead(BlockList* block) {
311 ASSERT(IsAnchor());
312 InsertAsNext(block);
313 }
314 void InsertAsTail(BlockList* block) {
315 ASSERT(IsAnchor());
316 prev_block_->InsertAsNext(block);
317 }
318 inline bool IsAnchor() { return first_free_ == NULL && used_nodes_ == 0; }
319 inline bool IsDetached() {
320 ASSERT_EQ(prev_block_ == this, next_block_ == this);
321 return prev_block_ == this;
322 }
323 bool HasAtLeastLength(int length);
324 bool IsUnused() { return used_nodes_ == 0; }
325 int used_nodes() const { return used_nodes_; }
326 BlockList* next() { return next_block_; }
327 BlockList* prev() { return prev_block_; }
328 #ifdef DEBUG
329 int LengthOfFreeList();
330 #endif
331 static void SortBlocks(GlobalHandles* global_handles, bool prune);
332
333 protected:
334 BlockList* prev_block_;
335 BlockList* next_block_;
336 Node* first_free_;
337 int used_nodes_;
338
339 private:
340 // Needed for quicksort
341 static int CompareBlocks(const void* a, const void* b);
342 void InsertAsNext(BlockList* block);
343 DISALLOW_COPY_AND_ASSIGN(BlockList);
344 };
345 297
346 Isolate* isolate_; 298 Isolate* isolate_;
347 299
348 // Field always containing the number of blocks allocated.
349 int number_of_blocks_;
350 // Field always containing the number of handles to global objects. 300 // Field always containing the number of handles to global objects.
351 int number_of_global_handles_; 301 int number_of_global_handles_;
352 302
353 // Anchors for doubly linked lists of blocks 303 // List of all allocated node blocks.
354 BlockList full_blocks_; 304 NodeBlock* first_block_;
355 BlockList non_full_blocks_;
356 305
357 // An array of all the anchors held by GlobalHandles. 306 // List of node blocks with used nodes.
358 // This simplifies iteration across all blocks. 307 NodeBlock* first_used_block_;
359 static const int kAllAnchorsSize = 2; 308
360 BlockList* all_anchors_[kAllAnchorsSize]; 309 // Free list of nodes.
310 Node* first_free_;
361 311
362 // Contains all nodes holding new space objects. Note: when the list 312 // Contains all nodes holding new space objects. Note: when the list
363 // is accessed, some of the objects may have been promoted already. 313 // is accessed, some of the objects may have been promoted already.
364 List<Node*> new_space_nodes_; 314 List<Node*> new_space_nodes_;
365 315
366 int post_gc_processing_count_; 316 int post_gc_processing_count_;
367 317
368 // Object groups and implicit references, public and more efficient 318 // Object groups and implicit references, public and more efficient
369 // representation. 319 // representation.
370 List<ObjectGroup*> object_groups_; 320 List<ObjectGroup*> object_groups_;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 List<int> new_space_indices_; 398 List<int> new_space_indices_;
449 int singleton_handles_[NUMBER_OF_SINGLETON_HANDLES]; 399 int singleton_handles_[NUMBER_OF_SINGLETON_HANDLES];
450 400
451 DISALLOW_COPY_AND_ASSIGN(EternalHandles); 401 DISALLOW_COPY_AND_ASSIGN(EternalHandles);
452 }; 402 };
453 403
454 404
455 } } // namespace v8::internal 405 } } // namespace v8::internal
456 406
457 #endif // V8_GLOBAL_HANDLES_H_ 407 #endif // V8_GLOBAL_HANDLES_H_
OLDNEW
« no previous file with comments | « no previous file | src/global-handles.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698