| Index: src/heap/object-stats.h
|
| diff --git a/src/heap/object-stats.h b/src/heap/object-stats.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae8551671a21c480ba95eee0ec808e6408df060c
|
| --- /dev/null
|
| +++ b/src/heap/object-stats.h
|
| @@ -0,0 +1,86 @@
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef V8_HEAP_OBJECT_STATS_H_
|
| +#define V8_HEAP_OBJECT_STATS_H_
|
| +
|
| +#include "src/heap/heap.h"
|
| +#include "src/objects.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +
|
| +class ObjectStats {
|
| + public:
|
| + explicit ObjectStats(Heap* heap) : heap_(heap) {}
|
| +
|
| + // ObjectStats are kept in two arrays, counts and sizes. Related stats are
|
| + // stored in a contiguous linear buffer. Stats groups are stored one after
|
| + // another.
|
| + enum {
|
| + FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1,
|
| + FIRST_FIXED_ARRAY_SUB_TYPE =
|
| + FIRST_CODE_KIND_SUB_TYPE + Code::NUMBER_OF_KINDS,
|
| + FIRST_CODE_AGE_SUB_TYPE =
|
| + FIRST_FIXED_ARRAY_SUB_TYPE + LAST_FIXED_ARRAY_SUB_TYPE + 1,
|
| + OBJECT_STATS_COUNT = FIRST_CODE_AGE_SUB_TYPE + Code::kCodeAgeCount + 1
|
| + };
|
| +
|
| + void ClearObjectStats(bool clear_last_time_stats = false);
|
| +
|
| + void TraceObjectStats();
|
| + void TraceObjectStat(const char* name, int count, int size, double time);
|
| + void CheckpointObjectStats();
|
| +
|
| + void RecordObjectStats(InstanceType type, size_t size) {
|
| + DCHECK(type <= LAST_TYPE);
|
| + object_counts_[type]++;
|
| + object_sizes_[type] += size;
|
| + }
|
| +
|
| + void RecordCodeSubTypeStats(int code_sub_type, int code_age, size_t size) {
|
| + int code_sub_type_index = FIRST_CODE_KIND_SUB_TYPE + code_sub_type;
|
| + int code_age_index =
|
| + FIRST_CODE_AGE_SUB_TYPE + code_age - Code::kFirstCodeAge;
|
| + DCHECK(code_sub_type_index >= FIRST_CODE_KIND_SUB_TYPE &&
|
| + code_sub_type_index < FIRST_CODE_AGE_SUB_TYPE);
|
| + DCHECK(code_age_index >= FIRST_CODE_AGE_SUB_TYPE &&
|
| + code_age_index < OBJECT_STATS_COUNT);
|
| + object_counts_[code_sub_type_index]++;
|
| + object_sizes_[code_sub_type_index] += size;
|
| + object_counts_[code_age_index]++;
|
| + object_sizes_[code_age_index] += size;
|
| + }
|
| +
|
| + void RecordFixedArraySubTypeStats(int array_sub_type, size_t size) {
|
| + DCHECK(array_sub_type <= LAST_FIXED_ARRAY_SUB_TYPE);
|
| + object_counts_[FIRST_FIXED_ARRAY_SUB_TYPE + array_sub_type]++;
|
| + object_sizes_[FIRST_FIXED_ARRAY_SUB_TYPE + array_sub_type] += size;
|
| + }
|
| +
|
| + size_t object_count_last_gc(size_t index) {
|
| + return object_counts_last_time_[index];
|
| + }
|
| +
|
| + size_t object_size_last_gc(size_t index) {
|
| + return object_sizes_last_time_[index];
|
| + }
|
| +
|
| + Isolate* isolate();
|
| + Heap* heap() { return heap_; }
|
| +
|
| + private:
|
| + Heap* heap_;
|
| +
|
| + // Object counts and used memory by InstanceType
|
| + size_t object_counts_[OBJECT_STATS_COUNT];
|
| + size_t object_counts_last_time_[OBJECT_STATS_COUNT];
|
| + size_t object_sizes_[OBJECT_STATS_COUNT];
|
| + size_t object_sizes_last_time_[OBJECT_STATS_COUNT];
|
| +};
|
| +
|
| +} // namespace internal
|
| +} // namespace v8
|
| +
|
| +#endif // V8_HEAP_OBJECT_STATS_H_
|
|
|