| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 5af21e18c0df762e7efb97e2778e6e708ad8f066..6d78b03a96e3379981ad6f57246dfafa3b8cd790 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -618,6 +618,7 @@ void Heap::GarbageCollectionEpilogue() {
|
| if (FLAG_gc_verbose) Print();
|
| if (FLAG_code_stats) ReportCodeStatistics("After GC");
|
| #endif
|
| + if (FLAG_check_handle_count) CheckHandleCount();
|
| if (FLAG_deopt_every_n_garbage_collections > 0) {
|
| // TODO(jkummerow/ulan/jarin): This is not safe! We can't assume that
|
| // the topmost optimized frame can be deoptimized safely, because it
|
| @@ -5649,6 +5650,24 @@ void Heap::PrintHandles() {
|
|
|
| #endif
|
|
|
| +class CheckHandleCountVisitor : public ObjectVisitor {
|
| + public:
|
| + CheckHandleCountVisitor() : handle_count_(0) {}
|
| + ~CheckHandleCountVisitor() { CHECK(handle_count_ < 1000); }
|
| + void VisitPointers(Object** start, Object** end) {
|
| + handle_count_ += end - start;
|
| + }
|
| +
|
| + private:
|
| + ptrdiff_t handle_count_;
|
| +};
|
| +
|
| +
|
| +void Heap::CheckHandleCount() {
|
| + CheckHandleCountVisitor v;
|
| + isolate_->handle_scope_implementer()->Iterate(&v);
|
| +}
|
| +
|
|
|
| Space* AllSpaces::next() {
|
| switch (counter_++) {
|
|
|