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

Unified Diff: src/mark-compact.cc

Issue 10802032: Simplify object stats tracker a bit. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased. Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/mark-compact.cc
diff --git a/src/mark-compact.cc b/src/mark-compact.cc
index a62196e3806df1a16cee82a702333f0ea8dcc5ae..18c0f4bf571461ac7d76428ac2f0eea71a9d5757 100644
--- a/src/mark-compact.cc
+++ b/src/mark-compact.cc
@@ -944,20 +944,6 @@ class StaticMarkingVisitor : public StaticVisitorBase {
table_.GetVisitor(map)(map, obj);
}
- static void ObjectStatsVisitBase(StaticVisitorBase::VisitorId id,
- Map* map, HeapObject* obj);
-
- static void ObjectStatsCountFixedArray(
- FixedArrayBase* fixed_array,
- FixedArraySubInstanceType fast_type,
- FixedArraySubInstanceType dictionary_type);
-
- template<StaticMarkingVisitor::VisitorId id>
- class ObjectStatsTracker {
- public:
- static inline void Visit(Map* map, HeapObject* obj);
- };
-
static void Initialize();
INLINE(static void VisitPointer(Heap* heap, Object** p)) {
@@ -1096,6 +1082,12 @@ class StaticMarkingVisitor : public StaticVisitorBase {
StructBodyDescriptor,
void> StructObjectVisitor;
+ template<StaticVisitorBase::VisitorId id>
+ static inline void TrackObjectStatsAndVisit(Map* map, HeapObject* obj);
+
+ static inline void TrackObjectStatsAndVisitBase(
+ StaticVisitorBase::VisitorId id, Map* map, HeapObject* obj);
+
static void VisitJSWeakMap(Map* map, HeapObject* object) {
MarkCompactCollector* collector = map->GetHeap()->mark_compact_collector();
JSWeakMap* weak_map = reinterpret_cast<JSWeakMap*>(object);
@@ -1507,7 +1499,7 @@ class StaticMarkingVisitor : public StaticVisitorBase {
};
-void StaticMarkingVisitor::ObjectStatsCountFixedArray(
+static void ObjectStatsCountFixedArray(
FixedArrayBase* fixed_array,
FixedArraySubInstanceType fast_type,
FixedArraySubInstanceType dictionary_type) {
@@ -1528,7 +1520,7 @@ void StaticMarkingVisitor::ObjectStatsCountFixedArray(
}
-void StaticMarkingVisitor::ObjectStatsVisitBase(
+void StaticMarkingVisitor::TrackObjectStatsAndVisitBase(
StaticVisitorBase::VisitorId id, Map* map, HeapObject* obj) {
Heap* heap = map->GetHeap();
int object_size = obj->Size();
@@ -1546,93 +1538,80 @@ void StaticMarkingVisitor::ObjectStatsVisitBase(
}
-template<StaticMarkingVisitor::VisitorId id>
-void StaticMarkingVisitor::ObjectStatsTracker<id>::Visit(
- Map* map, HeapObject* obj) {
- ObjectStatsVisitBase(id, map, obj);
+template<StaticVisitorBase::VisitorId id>
+void StaticMarkingVisitor::TrackObjectStatsAndVisit(Map* map, HeapObject* obj) {
+ TrackObjectStatsAndVisitBase(id, map, obj);
}
template<>
-class StaticMarkingVisitor::ObjectStatsTracker<
- StaticMarkingVisitor::kVisitMap> {
- public:
- static inline void Visit(Map* map, HeapObject* obj) {
- Heap* heap = map->GetHeap();
- Map* map_obj = Map::cast(obj);
- ASSERT(map->instance_type() == MAP_TYPE);
- DescriptorArray* array = map_obj->instance_descriptors();
- if (array != heap->empty_descriptor_array()) {
- int fixed_array_size = array->Size();
- heap->RecordObjectStats(FIXED_ARRAY_TYPE,
- DESCRIPTOR_ARRAY_SUB_TYPE,
- fixed_array_size);
- }
- if (map_obj->HasTransitionArray()) {
- int fixed_array_size = map_obj->transitions()->Size();
- heap->RecordObjectStats(FIXED_ARRAY_TYPE,
- TRANSITION_ARRAY_SUB_TYPE,
- fixed_array_size);
- }
- if (map_obj->code_cache() != heap->empty_fixed_array()) {
- heap->RecordObjectStats(
- FIXED_ARRAY_TYPE,
- MAP_CODE_CACHE_SUB_TYPE,
- FixedArray::cast(map_obj->code_cache())->Size());
- }
- ObjectStatsVisitBase(kVisitMap, map, obj);
- }
-};
+void StaticMarkingVisitor::TrackObjectStatsAndVisit<
+ StaticMarkingVisitor::kVisitMap>(Map* map, HeapObject* obj) {
+ Heap* heap = map->GetHeap();
+ Map* map_obj = Map::cast(obj);
+ ASSERT(map->instance_type() == MAP_TYPE);
+ DescriptorArray* array = map_obj->instance_descriptors();
+ if (array != heap->empty_descriptor_array()) {
+ int fixed_array_size = array->Size();
+ heap->RecordObjectStats(FIXED_ARRAY_TYPE,
+ DESCRIPTOR_ARRAY_SUB_TYPE,
+ fixed_array_size);
+ }
+ if (map_obj->HasTransitionArray()) {
+ int fixed_array_size = map_obj->transitions()->Size();
+ heap->RecordObjectStats(FIXED_ARRAY_TYPE,
+ TRANSITION_ARRAY_SUB_TYPE,
+ fixed_array_size);
+ }
+ if (map_obj->code_cache() != heap->empty_fixed_array()) {
+ heap->RecordObjectStats(
+ FIXED_ARRAY_TYPE,
+ MAP_CODE_CACHE_SUB_TYPE,
+ FixedArray::cast(map_obj->code_cache())->Size());
+ }
+ TrackObjectStatsAndVisitBase(kVisitMap, map, obj);
+}
template<>
-class StaticMarkingVisitor::ObjectStatsTracker<
- StaticMarkingVisitor::kVisitCode> {
- public:
- static inline void Visit(Map* map, HeapObject* obj) {
- Heap* heap = map->GetHeap();
- int object_size = obj->Size();
- ASSERT(map->instance_type() == CODE_TYPE);
- heap->RecordObjectStats(CODE_TYPE, Code::cast(obj)->kind(), object_size);
- ObjectStatsVisitBase(kVisitCode, map, obj);
- }
-};
+void StaticMarkingVisitor::TrackObjectStatsAndVisit<
+ StaticMarkingVisitor::kVisitCode>(Map* map, HeapObject* obj) {
+ Heap* heap = map->GetHeap();
+ int object_size = obj->Size();
+ ASSERT(map->instance_type() == CODE_TYPE);
+ heap->RecordObjectStats(CODE_TYPE, Code::cast(obj)->kind(), object_size);
+ TrackObjectStatsAndVisitBase(kVisitCode, map, obj);
+}
template<>
-class StaticMarkingVisitor::ObjectStatsTracker<
- StaticMarkingVisitor::kVisitSharedFunctionInfo> {
- public:
- static inline void Visit(Map* map, HeapObject* obj) {
- Heap* heap = map->GetHeap();
- SharedFunctionInfo* sfi = SharedFunctionInfo::cast(obj);
- if (sfi->scope_info() != heap->empty_fixed_array()) {
- heap->RecordObjectStats(
- FIXED_ARRAY_TYPE,
- SCOPE_INFO_SUB_TYPE,
- FixedArray::cast(sfi->scope_info())->Size());
- }
- ObjectStatsVisitBase(kVisitSharedFunctionInfo, map, obj);
- }
-};
+void StaticMarkingVisitor::TrackObjectStatsAndVisit<
+ StaticMarkingVisitor::kVisitSharedFunctionInfo>(Map* map, HeapObject* obj) {
+ Heap* heap = map->GetHeap();
+ SharedFunctionInfo* sfi = SharedFunctionInfo::cast(obj);
+ if (sfi->scope_info() != heap->empty_fixed_array()) {
+ heap->RecordObjectStats(
+ FIXED_ARRAY_TYPE,
+ SCOPE_INFO_SUB_TYPE,
+ FixedArray::cast(sfi->scope_info())->Size());
+ }
+ TrackObjectStatsAndVisitBase(kVisitSharedFunctionInfo, map, obj);
+}
template<>
-class StaticMarkingVisitor::ObjectStatsTracker<
- StaticMarkingVisitor::kVisitFixedArray> {
- public:
- static inline void Visit(Map* map, HeapObject* obj) {
- Heap* heap = map->GetHeap();
- FixedArray* fixed_array = FixedArray::cast(obj);
- if (fixed_array == heap->symbol_table()) {
- heap->RecordObjectStats(
- FIXED_ARRAY_TYPE,
- SYMBOL_TABLE_SUB_TYPE,
- fixed_array->Size());
- }
- ObjectStatsVisitBase(kVisitFixedArray, map, obj);
- }
-};
+void StaticMarkingVisitor::TrackObjectStatsAndVisit<
+ StaticMarkingVisitor::kVisitFixedArray>(Map* map, HeapObject* obj) {
+ Heap* heap = map->GetHeap();
+ FixedArray* fixed_array = FixedArray::cast(obj);
+ if (fixed_array == heap->symbol_table()) {
+ heap->RecordObjectStats(
+ FIXED_ARRAY_TYPE,
+ SYMBOL_TABLE_SUB_TYPE,
+ fixed_array->Size());
+ }
+ TrackObjectStatsAndVisitBase(kVisitFixedArray, map, obj);
+}
void StaticMarkingVisitor::Initialize() {
@@ -1708,7 +1687,7 @@ void StaticMarkingVisitor::Initialize() {
// Copy the visitor table to make call-through possible.
non_count_table_.CopyFrom(&table_);
#define VISITOR_ID_COUNT_FUNCTION(id) \
- table_.Register(kVisit##id, ObjectStatsTracker<kVisit##id>::Visit);
+ table_.Register(kVisit##id, TrackObjectStatsAndVisit<kVisit##id>);
VISITOR_ID_LIST(VISITOR_ID_COUNT_FUNCTION)
#undef VISITOR_ID_COUNT_FUNCTION
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698