| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 #include "vm/scavenger.h" | 5 #include "vm/scavenger.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 : reserved_(reserved), region_(NULL, 0) { | 320 : reserved_(reserved), region_(NULL, 0) { |
| 321 if (reserved != NULL) { | 321 if (reserved != NULL) { |
| 322 region_ = MemoryRegion(reserved_->address(), reserved_->size()); | 322 region_ = MemoryRegion(reserved_->address(), reserved_->size()); |
| 323 } | 323 } |
| 324 } | 324 } |
| 325 | 325 |
| 326 | 326 |
| 327 SemiSpace::~SemiSpace() { | 327 SemiSpace::~SemiSpace() { |
| 328 if (reserved_ != NULL) { | 328 if (reserved_ != NULL) { |
| 329 #if defined(DEBUG) | 329 #if defined(DEBUG) |
| 330 memset(reserved_->address(), kZapValue, size_in_words() << kWordSizeLog2); | 330 memset(reserved_->address(), Heap::kZapByte, |
| 331 size_in_words() << kWordSizeLog2); |
| 331 #endif // defined(DEBUG) | 332 #endif // defined(DEBUG) |
| 332 delete reserved_; | 333 delete reserved_; |
| 333 } | 334 } |
| 334 } | 335 } |
| 335 | 336 |
| 336 | 337 |
| 337 Mutex* SemiSpace::mutex_ = NULL; | 338 Mutex* SemiSpace::mutex_ = NULL; |
| 338 SemiSpace* SemiSpace::cache_ = NULL; | 339 SemiSpace* SemiSpace::cache_ = NULL; |
| 339 | 340 |
| 340 | 341 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 359 return new SemiSpace(NULL); | 360 return new SemiSpace(NULL); |
| 360 } else { | 361 } else { |
| 361 intptr_t size_in_bytes = size_in_words << kWordSizeLog2; | 362 intptr_t size_in_bytes = size_in_words << kWordSizeLog2; |
| 362 VirtualMemory* reserved = VerifiedMemory::Reserve(size_in_bytes); | 363 VirtualMemory* reserved = VerifiedMemory::Reserve(size_in_bytes); |
| 363 if ((reserved == NULL) || !reserved->Commit(false)) { // Not executable. | 364 if ((reserved == NULL) || !reserved->Commit(false)) { // Not executable. |
| 364 // TODO(koda): If cache_ is not empty, we could try to delete it. | 365 // TODO(koda): If cache_ is not empty, we could try to delete it. |
| 365 delete reserved; | 366 delete reserved; |
| 366 return NULL; | 367 return NULL; |
| 367 } | 368 } |
| 368 #if defined(DEBUG) | 369 #if defined(DEBUG) |
| 369 memset(reserved->address(), kZapValue, size_in_bytes); | 370 memset(reserved->address(), Heap::kZapByte, size_in_bytes); |
| 370 VerifiedMemory::Accept(reserved->start(), size_in_bytes); | 371 VerifiedMemory::Accept(reserved->start(), size_in_bytes); |
| 371 #endif // defined(DEBUG) | 372 #endif // defined(DEBUG) |
| 372 return new SemiSpace(reserved); | 373 return new SemiSpace(reserved); |
| 373 } | 374 } |
| 374 } | 375 } |
| 375 | 376 |
| 376 | 377 |
| 377 void SemiSpace::Delete() { | 378 void SemiSpace::Delete() { |
| 378 #ifdef DEBUG | 379 #ifdef DEBUG |
| 379 if (reserved_ != NULL) { | 380 if (reserved_ != NULL) { |
| 380 const intptr_t size_in_bytes = size_in_words() << kWordSizeLog2; | 381 const intptr_t size_in_bytes = size_in_words() << kWordSizeLog2; |
| 381 memset(reserved_->address(), kZapValue, size_in_bytes); | 382 memset(reserved_->address(), Heap::kZapByte, size_in_bytes); |
| 382 VerifiedMemory::Accept(reserved_->start(), size_in_bytes); | 383 VerifiedMemory::Accept(reserved_->start(), size_in_bytes); |
| 383 } | 384 } |
| 384 #endif | 385 #endif |
| 385 SemiSpace* old_cache = NULL; | 386 SemiSpace* old_cache = NULL; |
| 386 { | 387 { |
| 387 MutexLocker locker(mutex_); | 388 MutexLocker locker(mutex_); |
| 388 old_cache = cache_; | 389 old_cache = cache_; |
| 389 cache_ = this; | 390 cache_ = this; |
| 390 } | 391 } |
| 391 delete old_cache; | 392 delete old_cache; |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 } | 899 } |
| 899 | 900 |
| 900 | 901 |
| 901 void Scavenger::FreeExternal(intptr_t size) { | 902 void Scavenger::FreeExternal(intptr_t size) { |
| 902 ASSERT(size >= 0); | 903 ASSERT(size >= 0); |
| 903 external_size_ -= size; | 904 external_size_ -= size; |
| 904 ASSERT(external_size_ >= 0); | 905 ASSERT(external_size_ >= 0); |
| 905 } | 906 } |
| 906 | 907 |
| 907 } // namespace dart | 908 } // namespace dart |
| OLD | NEW |