OLD | NEW |
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/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
(...skipping 6273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6284 if (clear_last_time_stats) { | 6284 if (clear_last_time_stats) { |
6285 memset(object_counts_last_time_, 0, sizeof(object_counts_last_time_)); | 6285 memset(object_counts_last_time_, 0, sizeof(object_counts_last_time_)); |
6286 memset(object_sizes_last_time_, 0, sizeof(object_sizes_last_time_)); | 6286 memset(object_sizes_last_time_, 0, sizeof(object_sizes_last_time_)); |
6287 } | 6287 } |
6288 } | 6288 } |
6289 | 6289 |
6290 | 6290 |
6291 static base::LazyMutex object_stats_mutex = LAZY_MUTEX_INITIALIZER; | 6291 static base::LazyMutex object_stats_mutex = LAZY_MUTEX_INITIALIZER; |
6292 | 6292 |
6293 | 6293 |
6294 static void TraceObjectStat(const char* name, int count, int size) { | 6294 void Heap::TraceObjectStat(const char* name, int count, int size, double time) { |
6295 if (size > 0) { | 6295 PrintPID("heap:%p, time:%f, gc:%d, type:%s, count:%d, size:%d\n", |
6296 PrintF("%40s\tcount= %6d\t size= %6d kb\n", name, count, size); | 6296 static_cast<void*>(this), time, ms_count_, name, count, size); |
6297 } | |
6298 } | 6297 } |
6299 | 6298 |
6300 | 6299 |
6301 void Heap::TraceObjectStats() { | 6300 void Heap::TraceObjectStats() { |
6302 base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer()); | 6301 base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer()); |
6303 int index; | 6302 int index; |
6304 int count; | 6303 int count; |
6305 int size; | 6304 int size; |
6306 int total_size = 0; | 6305 int total_size = 0; |
| 6306 double time = isolate_->time_millis_since_init(); |
6307 #define TRACE_OBJECT_COUNT(name) \ | 6307 #define TRACE_OBJECT_COUNT(name) \ |
6308 count = static_cast<int>(object_counts_[name]); \ | 6308 count = static_cast<int>(object_counts_[name]); \ |
6309 size = static_cast<int>(object_sizes_[name]) / KB; \ | 6309 size = static_cast<int>(object_sizes_[name]) / KB; \ |
6310 total_size += size; \ | 6310 total_size += size; \ |
6311 TraceObjectStat(#name, count, size); | 6311 TraceObjectStat(#name, count, size, time); |
6312 INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT) | 6312 INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT) |
6313 #undef TRACE_OBJECT_COUNT | 6313 #undef TRACE_OBJECT_COUNT |
6314 #define TRACE_OBJECT_COUNT(name) \ | 6314 #define TRACE_OBJECT_COUNT(name) \ |
6315 index = FIRST_CODE_KIND_SUB_TYPE + Code::name; \ | 6315 index = FIRST_CODE_KIND_SUB_TYPE + Code::name; \ |
6316 count = static_cast<int>(object_counts_[index]); \ | 6316 count = static_cast<int>(object_counts_[index]); \ |
6317 size = static_cast<int>(object_sizes_[index]) / KB; \ | 6317 size = static_cast<int>(object_sizes_[index]) / KB; \ |
6318 TraceObjectStat("CODE_" #name, count, size); | 6318 TraceObjectStat("*CODE_" #name, count, size, time); |
6319 CODE_KIND_LIST(TRACE_OBJECT_COUNT) | 6319 CODE_KIND_LIST(TRACE_OBJECT_COUNT) |
6320 #undef TRACE_OBJECT_COUNT | 6320 #undef TRACE_OBJECT_COUNT |
6321 #define TRACE_OBJECT_COUNT(name) \ | 6321 #define TRACE_OBJECT_COUNT(name) \ |
6322 index = FIRST_FIXED_ARRAY_SUB_TYPE + name; \ | 6322 index = FIRST_FIXED_ARRAY_SUB_TYPE + name; \ |
6323 count = static_cast<int>(object_counts_[index]); \ | 6323 count = static_cast<int>(object_counts_[index]); \ |
6324 size = static_cast<int>(object_sizes_[index]) / KB; \ | 6324 size = static_cast<int>(object_sizes_[index]) / KB; \ |
6325 TraceObjectStat("FIXED_ARRAY_" #name, count, size); | 6325 TraceObjectStat("*FIXED_ARRAY_" #name, count, size, time); |
6326 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT) | 6326 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(TRACE_OBJECT_COUNT) |
6327 #undef TRACE_OBJECT_COUNT | 6327 #undef TRACE_OBJECT_COUNT |
6328 #define TRACE_OBJECT_COUNT(name) \ | 6328 #define TRACE_OBJECT_COUNT(name) \ |
6329 index = \ | 6329 index = \ |
6330 FIRST_CODE_AGE_SUB_TYPE + Code::k##name##CodeAge - Code::kFirstCodeAge; \ | 6330 FIRST_CODE_AGE_SUB_TYPE + Code::k##name##CodeAge - Code::kFirstCodeAge; \ |
6331 count = static_cast<int>(object_counts_[index]); \ | 6331 count = static_cast<int>(object_counts_[index]); \ |
6332 size = static_cast<int>(object_sizes_[index]) / KB; \ | 6332 size = static_cast<int>(object_sizes_[index]) / KB; \ |
6333 TraceObjectStat("CODE_AGE_" #name, count, size); | 6333 TraceObjectStat("*CODE_AGE_" #name, count, size, time); |
6334 CODE_AGE_LIST_COMPLETE(TRACE_OBJECT_COUNT) | 6334 CODE_AGE_LIST_COMPLETE(TRACE_OBJECT_COUNT) |
6335 #undef TRACE_OBJECT_COUNT | 6335 #undef TRACE_OBJECT_COUNT |
6336 PrintF("Total size= %d kb\n", total_size); | |
6337 } | 6336 } |
6338 | 6337 |
6339 | 6338 |
6340 void Heap::CheckpointObjectStats() { | 6339 void Heap::CheckpointObjectStats() { |
6341 base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer()); | 6340 base::LockGuard<base::Mutex> lock_guard(object_stats_mutex.Pointer()); |
6342 Counters* counters = isolate()->counters(); | 6341 Counters* counters = isolate()->counters(); |
6343 #define ADJUST_LAST_TIME_OBJECT_COUNT(name) \ | 6342 #define ADJUST_LAST_TIME_OBJECT_COUNT(name) \ |
6344 counters->count_of_##name()->Increment( \ | 6343 counters->count_of_##name()->Increment( \ |
6345 static_cast<int>(object_counts_[name])); \ | 6344 static_cast<int>(object_counts_[name])); \ |
6346 counters->count_of_##name()->Decrement( \ | 6345 counters->count_of_##name()->Decrement( \ |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6389 static_cast<int>(object_sizes_last_time_[index])); | 6388 static_cast<int>(object_sizes_last_time_[index])); |
6390 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) | 6389 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) |
6391 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 6390 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
6392 | 6391 |
6393 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 6392 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
6394 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 6393 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
6395 ClearObjectStats(); | 6394 ClearObjectStats(); |
6396 } | 6395 } |
6397 } | 6396 } |
6398 } // namespace v8::internal | 6397 } // namespace v8::internal |
OLD | NEW |