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

Side by Side Diff: src/heap.cc

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 5 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/once.h" 9 #include "src/base/once.h"
10 #include "src/base/utils/random-number-generator.h"
10 #include "src/bootstrapper.h" 11 #include "src/bootstrapper.h"
11 #include "src/codegen.h" 12 #include "src/codegen.h"
12 #include "src/compilation-cache.h" 13 #include "src/compilation-cache.h"
13 #include "src/conversions.h" 14 #include "src/conversions.h"
14 #include "src/cpu-profiler.h" 15 #include "src/cpu-profiler.h"
15 #include "src/debug.h" 16 #include "src/debug.h"
16 #include "src/deoptimizer.h" 17 #include "src/deoptimizer.h"
17 #include "src/global-handles.h" 18 #include "src/global-handles.h"
18 #include "src/heap-profiler.h" 19 #include "src/heap-profiler.h"
19 #include "src/incremental-marking.h" 20 #include "src/incremental-marking.h"
20 #include "src/isolate-inl.h" 21 #include "src/isolate-inl.h"
21 #include "src/mark-compact.h" 22 #include "src/mark-compact.h"
22 #include "src/natives.h" 23 #include "src/natives.h"
23 #include "src/objects-visiting-inl.h" 24 #include "src/objects-visiting-inl.h"
24 #include "src/objects-visiting.h" 25 #include "src/objects-visiting.h"
25 #include "src/runtime-profiler.h" 26 #include "src/runtime-profiler.h"
26 #include "src/scopeinfo.h" 27 #include "src/scopeinfo.h"
27 #include "src/snapshot.h" 28 #include "src/snapshot.h"
28 #include "src/store-buffer.h" 29 #include "src/store-buffer.h"
29 #include "src/utils.h" 30 #include "src/utils.h"
30 #include "src/utils/random-number-generator.h"
31 #include "src/v8threads.h" 31 #include "src/v8threads.h"
32 #include "src/vm-state-inl.h" 32 #include "src/vm-state-inl.h"
33 33
34 #if V8_TARGET_ARCH_ARM && !V8_INTERPRETED_REGEXP 34 #if V8_TARGET_ARCH_ARM && !V8_INTERPRETED_REGEXP
35 #include "src/regexp-macro-assembler.h" // NOLINT 35 #include "src/regexp-macro-assembler.h" // NOLINT
36 #include "src/arm/regexp-macro-assembler-arm.h" // NOLINT 36 #include "src/arm/regexp-macro-assembler-arm.h" // NOLINT
37 #endif 37 #endif
38 #if V8_TARGET_ARCH_MIPS && !V8_INTERPRETED_REGEXP 38 #if V8_TARGET_ARCH_MIPS && !V8_INTERPRETED_REGEXP
39 #include "src/regexp-macro-assembler.h" // NOLINT 39 #include "src/regexp-macro-assembler.h" // NOLINT
40 #include "src/mips/regexp-macro-assembler-mips.h" // NOLINT 40 #include "src/mips/regexp-macro-assembler-mips.h" // NOLINT
(...skipping 2727 matching lines...) Expand 10 before | Expand all | Expand 10 after
2768 2768
2769 2769
2770 void Heap::CreateInitialObjects() { 2770 void Heap::CreateInitialObjects() {
2771 HandleScope scope(isolate()); 2771 HandleScope scope(isolate());
2772 Factory* factory = isolate()->factory(); 2772 Factory* factory = isolate()->factory();
2773 2773
2774 // The -0 value must be set before NumberFromDouble works. 2774 // The -0 value must be set before NumberFromDouble works.
2775 set_minus_zero_value(*factory->NewHeapNumber(-0.0, TENURED)); 2775 set_minus_zero_value(*factory->NewHeapNumber(-0.0, TENURED));
2776 ASSERT(std::signbit(minus_zero_value()->Number()) != 0); 2776 ASSERT(std::signbit(minus_zero_value()->Number()) != 0);
2777 2777
2778 set_nan_value(*factory->NewHeapNumber(OS::nan_value(), TENURED)); 2778 set_nan_value(*factory->NewHeapNumber(base::OS::nan_value(), TENURED));
2779 set_infinity_value(*factory->NewHeapNumber(V8_INFINITY, TENURED)); 2779 set_infinity_value(*factory->NewHeapNumber(V8_INFINITY, TENURED));
2780 2780
2781 // The hole has not been created yet, but we want to put something 2781 // The hole has not been created yet, but we want to put something
2782 // predictable in the gaps in the string table, so lets make that Smi zero. 2782 // predictable in the gaps in the string table, so lets make that Smi zero.
2783 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0))); 2783 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0)));
2784 2784
2785 // Allocate initial string table. 2785 // Allocate initial string table.
2786 set_string_table(*StringTable::New(isolate(), kInitialStringTableSize)); 2786 set_string_table(*StringTable::New(isolate(), kInitialStringTableSize));
2787 2787
2788 // Finish initializing oddballs after creating the string table. 2788 // Finish initializing oddballs after creating the string table.
(...skipping 2230 matching lines...) Expand 10 before | Expand all | Expand 10 after
5019 *stats->cell_space_size = cell_space_->SizeOfObjects(); 5019 *stats->cell_space_size = cell_space_->SizeOfObjects();
5020 *stats->cell_space_capacity = cell_space_->Capacity(); 5020 *stats->cell_space_capacity = cell_space_->Capacity();
5021 *stats->property_cell_space_size = property_cell_space_->SizeOfObjects(); 5021 *stats->property_cell_space_size = property_cell_space_->SizeOfObjects();
5022 *stats->property_cell_space_capacity = property_cell_space_->Capacity(); 5022 *stats->property_cell_space_capacity = property_cell_space_->Capacity();
5023 *stats->lo_space_size = lo_space_->Size(); 5023 *stats->lo_space_size = lo_space_->Size();
5024 isolate_->global_handles()->RecordStats(stats); 5024 isolate_->global_handles()->RecordStats(stats);
5025 *stats->memory_allocator_size = isolate()->memory_allocator()->Size(); 5025 *stats->memory_allocator_size = isolate()->memory_allocator()->Size();
5026 *stats->memory_allocator_capacity = 5026 *stats->memory_allocator_capacity =
5027 isolate()->memory_allocator()->Size() + 5027 isolate()->memory_allocator()->Size() +
5028 isolate()->memory_allocator()->Available(); 5028 isolate()->memory_allocator()->Available();
5029 *stats->os_error = OS::GetLastError(); 5029 *stats->os_error = base::OS::GetLastError();
5030 isolate()->memory_allocator()->Available(); 5030 isolate()->memory_allocator()->Available();
5031 if (take_snapshot) { 5031 if (take_snapshot) {
5032 HeapIterator iterator(this); 5032 HeapIterator iterator(this);
5033 for (HeapObject* obj = iterator.next(); 5033 for (HeapObject* obj = iterator.next();
5034 obj != NULL; 5034 obj != NULL;
5035 obj = iterator.next()) { 5035 obj = iterator.next()) {
5036 InstanceType type = obj->map()->instance_type(); 5036 InstanceType type = obj->map()->instance_type();
5037 ASSERT(0 <= type && type <= LAST_TYPE); 5037 ASSERT(0 <= type && type <= LAST_TYPE);
5038 stats->objects_per_type[type]++; 5038 stats->objects_per_type[type]++;
5039 stats->size_per_type[type] += obj->Size(); 5039 stats->size_per_type[type] += obj->Size();
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
5999 full_gc_count_(0), 5999 full_gc_count_(0),
6000 allocated_since_last_gc_(0), 6000 allocated_since_last_gc_(0),
6001 spent_in_mutator_(0), 6001 spent_in_mutator_(0),
6002 nodes_died_in_new_space_(0), 6002 nodes_died_in_new_space_(0),
6003 nodes_copied_in_new_space_(0), 6003 nodes_copied_in_new_space_(0),
6004 nodes_promoted_(0), 6004 nodes_promoted_(0),
6005 heap_(heap), 6005 heap_(heap),
6006 gc_reason_(gc_reason), 6006 gc_reason_(gc_reason),
6007 collector_reason_(collector_reason) { 6007 collector_reason_(collector_reason) {
6008 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return; 6008 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
6009 start_time_ = OS::TimeCurrentMillis(); 6009 start_time_ = base::OS::TimeCurrentMillis();
6010 start_object_size_ = heap_->SizeOfObjects(); 6010 start_object_size_ = heap_->SizeOfObjects();
6011 start_memory_size_ = heap_->isolate()->memory_allocator()->Size(); 6011 start_memory_size_ = heap_->isolate()->memory_allocator()->Size();
6012 6012
6013 for (int i = 0; i < Scope::kNumberOfScopes; i++) { 6013 for (int i = 0; i < Scope::kNumberOfScopes; i++) {
6014 scopes_[i] = 0; 6014 scopes_[i] = 0;
6015 } 6015 }
6016 6016
6017 in_free_list_or_wasted_before_gc_ = CountTotalHolesSize(heap); 6017 in_free_list_or_wasted_before_gc_ = CountTotalHolesSize(heap);
6018 6018
6019 allocated_since_last_gc_ = 6019 allocated_since_last_gc_ =
(...skipping 13 matching lines...) Expand all
6033 } 6033 }
6034 6034
6035 6035
6036 GCTracer::~GCTracer() { 6036 GCTracer::~GCTracer() {
6037 // Printf ONE line iff flag is set. 6037 // Printf ONE line iff flag is set.
6038 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return; 6038 if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
6039 6039
6040 bool first_gc = (heap_->last_gc_end_timestamp_ == 0); 6040 bool first_gc = (heap_->last_gc_end_timestamp_ == 0);
6041 6041
6042 heap_->alive_after_last_gc_ = heap_->SizeOfObjects(); 6042 heap_->alive_after_last_gc_ = heap_->SizeOfObjects();
6043 heap_->last_gc_end_timestamp_ = OS::TimeCurrentMillis(); 6043 heap_->last_gc_end_timestamp_ = base::OS::TimeCurrentMillis();
6044 6044
6045 double time = heap_->last_gc_end_timestamp_ - start_time_; 6045 double time = heap_->last_gc_end_timestamp_ - start_time_;
6046 6046
6047 // Update cumulative GC statistics if required. 6047 // Update cumulative GC statistics if required.
6048 if (FLAG_print_cumulative_gc_stat) { 6048 if (FLAG_print_cumulative_gc_stat) {
6049 heap_->total_gc_time_ms_ += time; 6049 heap_->total_gc_time_ms_ += time;
6050 heap_->max_gc_pause_ = Max(heap_->max_gc_pause_, time); 6050 heap_->max_gc_pause_ = Max(heap_->max_gc_pause_, time);
6051 heap_->max_alive_after_gc_ = Max(heap_->max_alive_after_gc_, 6051 heap_->max_alive_after_gc_ = Max(heap_->max_alive_after_gc_,
6052 heap_->alive_after_last_gc_); 6052 heap_->alive_after_last_gc_);
6053 if (!first_gc) { 6053 if (!first_gc) {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
6380 void Heap::ClearObjectStats(bool clear_last_time_stats) { 6380 void Heap::ClearObjectStats(bool clear_last_time_stats) {
6381 memset(object_counts_, 0, sizeof(object_counts_)); 6381 memset(object_counts_, 0, sizeof(object_counts_));
6382 memset(object_sizes_, 0, sizeof(object_sizes_)); 6382 memset(object_sizes_, 0, sizeof(object_sizes_));
6383 if (clear_last_time_stats) { 6383 if (clear_last_time_stats) {
6384 memset(object_counts_last_time_, 0, sizeof(object_counts_last_time_)); 6384 memset(object_counts_last_time_, 0, sizeof(object_counts_last_time_));
6385 memset(object_sizes_last_time_, 0, sizeof(object_sizes_last_time_)); 6385 memset(object_sizes_last_time_, 0, sizeof(object_sizes_last_time_));
6386 } 6386 }
6387 } 6387 }
6388 6388
6389 6389
6390 static LazyMutex checkpoint_object_stats_mutex = LAZY_MUTEX_INITIALIZER; 6390 static base::LazyMutex checkpoint_object_stats_mutex = LAZY_MUTEX_INITIALIZER;
6391 6391
6392 6392
6393 void Heap::CheckpointObjectStats() { 6393 void Heap::CheckpointObjectStats() {
6394 LockGuard<Mutex> lock_guard(checkpoint_object_stats_mutex.Pointer()); 6394 base::LockGuard<base::Mutex> lock_guard(
6395 checkpoint_object_stats_mutex.Pointer());
6395 Counters* counters = isolate()->counters(); 6396 Counters* counters = isolate()->counters();
6396 #define ADJUST_LAST_TIME_OBJECT_COUNT(name) \ 6397 #define ADJUST_LAST_TIME_OBJECT_COUNT(name) \
6397 counters->count_of_##name()->Increment( \ 6398 counters->count_of_##name()->Increment( \
6398 static_cast<int>(object_counts_[name])); \ 6399 static_cast<int>(object_counts_[name])); \
6399 counters->count_of_##name()->Decrement( \ 6400 counters->count_of_##name()->Decrement( \
6400 static_cast<int>(object_counts_last_time_[name])); \ 6401 static_cast<int>(object_counts_last_time_[name])); \
6401 counters->size_of_##name()->Increment( \ 6402 counters->size_of_##name()->Increment( \
6402 static_cast<int>(object_sizes_[name])); \ 6403 static_cast<int>(object_sizes_[name])); \
6403 counters->size_of_##name()->Decrement( \ 6404 counters->size_of_##name()->Decrement( \
6404 static_cast<int>(object_sizes_last_time_[name])); 6405 static_cast<int>(object_sizes_last_time_[name]));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
6442 static_cast<int>(object_sizes_last_time_[index])); 6443 static_cast<int>(object_sizes_last_time_[index]));
6443 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 6444 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
6444 #undef ADJUST_LAST_TIME_OBJECT_COUNT 6445 #undef ADJUST_LAST_TIME_OBJECT_COUNT
6445 6446
6446 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 6447 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
6447 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 6448 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
6448 ClearObjectStats(); 6449 ClearObjectStats();
6449 } 6450 }
6450 6451
6451 } } // namespace v8::internal 6452 } } // namespace v8::internal
OLDNEW
« src/base/macros.h ('K') | « src/heap.h ('k') | src/heap-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698