OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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/log.h" | 5 #include "src/log.h" |
6 | 6 |
7 #include <cstdarg> | 7 #include <cstdarg> |
8 #include <memory> | 8 #include <memory> |
9 #include <sstream> | 9 #include <sstream> |
10 | 10 |
(...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1539 break; | 1539 break; |
1540 case AbstractCode::NUMBER_OF_KINDS: | 1540 case AbstractCode::NUMBER_OF_KINDS: |
1541 UNIMPLEMENTED(); | 1541 UNIMPLEMENTED(); |
1542 } | 1542 } |
1543 PROFILE(isolate_, CodeCreateEvent(tag, code_object, description)); | 1543 PROFILE(isolate_, CodeCreateEvent(tag, code_object, description)); |
1544 } | 1544 } |
1545 | 1545 |
1546 | 1546 |
1547 void Logger::LogCodeObjects() { | 1547 void Logger::LogCodeObjects() { |
1548 Heap* heap = isolate_->heap(); | 1548 Heap* heap = isolate_->heap(); |
1549 heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, | |
1550 "Logger::LogCodeObjects"); | |
1551 HeapIterator iterator(heap); | 1549 HeapIterator iterator(heap); |
1552 DisallowHeapAllocation no_gc; | 1550 DisallowHeapAllocation no_gc; |
1553 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 1551 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
1554 if (obj->IsCode()) LogCodeObject(obj); | 1552 if (obj->IsCode()) LogCodeObject(obj); |
1555 if (obj->IsBytecodeArray()) LogCodeObject(obj); | 1553 if (obj->IsBytecodeArray()) LogCodeObject(obj); |
1556 } | 1554 } |
1557 } | 1555 } |
1558 | 1556 |
1559 void Logger::LogBytecodeHandlers() { | 1557 void Logger::LogBytecodeHandlers() { |
1560 if (!FLAG_ignition) return; | 1558 if (!FLAG_ignition) return; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 } | 1625 } |
1628 } else { | 1626 } else { |
1629 PROFILE(isolate_, CodeCreateEvent(CodeEventListener::LAZY_COMPILE_TAG, | 1627 PROFILE(isolate_, CodeCreateEvent(CodeEventListener::LAZY_COMPILE_TAG, |
1630 *code, *shared, *func_name)); | 1628 *code, *shared, *func_name)); |
1631 } | 1629 } |
1632 } | 1630 } |
1633 | 1631 |
1634 | 1632 |
1635 void Logger::LogCompiledFunctions() { | 1633 void Logger::LogCompiledFunctions() { |
1636 Heap* heap = isolate_->heap(); | 1634 Heap* heap = isolate_->heap(); |
1637 heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, | |
1638 "Logger::LogCompiledFunctions"); | |
1639 HandleScope scope(isolate_); | 1635 HandleScope scope(isolate_); |
1640 const int compiled_funcs_count = EnumerateCompiledFunctions(heap, NULL, NULL); | 1636 const int compiled_funcs_count = EnumerateCompiledFunctions(heap, NULL, NULL); |
1641 ScopedVector< Handle<SharedFunctionInfo> > sfis(compiled_funcs_count); | 1637 ScopedVector< Handle<SharedFunctionInfo> > sfis(compiled_funcs_count); |
1642 ScopedVector<Handle<AbstractCode> > code_objects(compiled_funcs_count); | 1638 ScopedVector<Handle<AbstractCode> > code_objects(compiled_funcs_count); |
1643 EnumerateCompiledFunctions(heap, sfis.start(), code_objects.start()); | 1639 EnumerateCompiledFunctions(heap, sfis.start(), code_objects.start()); |
1644 | 1640 |
1645 // During iteration, there can be heap allocation due to | 1641 // During iteration, there can be heap allocation due to |
1646 // GetScriptLineNumber call. | 1642 // GetScriptLineNumber call. |
1647 for (int i = 0; i < compiled_funcs_count; ++i) { | 1643 for (int i = 0; i < compiled_funcs_count; ++i) { |
1648 if (code_objects[i].is_identical_to(isolate_->builtins()->CompileLazy())) | 1644 if (code_objects[i].is_identical_to(isolate_->builtins()->CompileLazy())) |
1649 continue; | 1645 continue; |
1650 LogExistingFunction(sfis[i], code_objects[i]); | 1646 LogExistingFunction(sfis[i], code_objects[i]); |
1651 } | 1647 } |
1652 } | 1648 } |
1653 | 1649 |
1654 | 1650 |
1655 void Logger::LogAccessorCallbacks() { | 1651 void Logger::LogAccessorCallbacks() { |
1656 Heap* heap = isolate_->heap(); | 1652 Heap* heap = isolate_->heap(); |
1657 heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, | |
1658 "Logger::LogAccessorCallbacks"); | |
1659 HeapIterator iterator(heap); | 1653 HeapIterator iterator(heap); |
1660 DisallowHeapAllocation no_gc; | 1654 DisallowHeapAllocation no_gc; |
1661 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 1655 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
1662 if (!obj->IsAccessorInfo()) continue; | 1656 if (!obj->IsAccessorInfo()) continue; |
1663 AccessorInfo* ai = AccessorInfo::cast(obj); | 1657 AccessorInfo* ai = AccessorInfo::cast(obj); |
1664 if (!ai->name()->IsName()) continue; | 1658 if (!ai->name()->IsName()) continue; |
1665 Address getter_entry = v8::ToCData<Address>(ai->getter()); | 1659 Address getter_entry = v8::ToCData<Address>(ai->getter()); |
1666 Name* name = Name::cast(ai->name()); | 1660 Name* name = Name::cast(ai->name()); |
1667 if (getter_entry != 0) { | 1661 if (getter_entry != 0) { |
1668 #if USES_FUNCTION_DESCRIPTORS | 1662 #if USES_FUNCTION_DESCRIPTORS |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 | 1850 |
1857 if (profiler_listener_.get() != nullptr) { | 1851 if (profiler_listener_.get() != nullptr) { |
1858 removeCodeEventListener(profiler_listener_.get()); | 1852 removeCodeEventListener(profiler_listener_.get()); |
1859 } | 1853 } |
1860 | 1854 |
1861 return log_->Close(); | 1855 return log_->Close(); |
1862 } | 1856 } |
1863 | 1857 |
1864 } // namespace internal | 1858 } // namespace internal |
1865 } // namespace v8 | 1859 } // namespace v8 |
OLD | NEW |