| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 LOG(HeapSampleEndEvent("Heap", "allocated")); | 660 LOG(HeapSampleEndEvent("Heap", "allocated")); |
| 661 } | 661 } |
| 662 | 662 |
| 663 | 663 |
| 664 bool ProducerHeapProfile::can_log_ = false; | 664 bool ProducerHeapProfile::can_log_ = false; |
| 665 | 665 |
| 666 void ProducerHeapProfile::Setup() { | 666 void ProducerHeapProfile::Setup() { |
| 667 can_log_ = true; | 667 can_log_ = true; |
| 668 } | 668 } |
| 669 | 669 |
| 670 void ProducerHeapProfile::RecordJSObjectAllocation(Object* obj) { | 670 void ProducerHeapProfile::DoRecordJSObjectAllocation(Object* obj) { |
| 671 if (!can_log_ || !FLAG_log_producers) return; | 671 ASSERT(FLAG_log_producers); |
| 672 if (!can_log_) return; |
| 672 int framesCount = 0; | 673 int framesCount = 0; |
| 673 for (JavaScriptFrameIterator it; !it.done(); it.Advance()) { | 674 for (JavaScriptFrameIterator it; !it.done(); it.Advance()) { |
| 674 ++framesCount; | 675 ++framesCount; |
| 675 } | 676 } |
| 676 if (framesCount == 0) return; | 677 if (framesCount == 0) return; |
| 677 ++framesCount; // Reserve place for the terminator item. | 678 ++framesCount; // Reserve place for the terminator item. |
| 678 Vector<Address> stack(NewArray<Address>(framesCount), framesCount); | 679 Vector<Address> stack(NewArray<Address>(framesCount), framesCount); |
| 679 int i = 0; | 680 int i = 0; |
| 680 for (JavaScriptFrameIterator it; !it.done(); it.Advance()) { | 681 for (JavaScriptFrameIterator it; !it.done(); it.Advance()) { |
| 681 stack[i++] = it.frame()->pc(); | 682 stack[i++] = it.frame()->pc(); |
| 682 } | 683 } |
| 683 stack[i] = NULL; | 684 stack[i] = NULL; |
| 684 Handle<Object> handle = GlobalHandles::Create(obj); | 685 Handle<Object> handle = GlobalHandles::Create(obj); |
| 685 GlobalHandles::MakeWeak(handle.location(), | 686 GlobalHandles::MakeWeak(handle.location(), |
| 686 static_cast<void*>(stack.start()), | 687 static_cast<void*>(stack.start()), |
| 687 StackWeakReferenceCallback); | 688 StackWeakReferenceCallback); |
| 688 } | 689 } |
| 689 | 690 |
| 690 | 691 |
| 691 #endif // ENABLE_LOGGING_AND_PROFILING | 692 #endif // ENABLE_LOGGING_AND_PROFILING |
| 692 | 693 |
| 693 | 694 |
| 694 } } // namespace v8::internal | 695 } } // namespace v8::internal |
| OLD | NEW |