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

Side by Side Diff: src/log.cc

Issue 2053523003: Refactor CpuProfiler. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: stop profiler listener when there's no cpu profiler Created 4 years, 6 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 unified diff | Download patch
OLDNEW
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 <sstream> 8 #include <sstream>
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
11 #include "src/base/platform/platform.h" 11 #include "src/base/platform/platform.h"
12 #include "src/bootstrapper.h" 12 #include "src/bootstrapper.h"
13 #include "src/code-stubs.h" 13 #include "src/code-stubs.h"
14 #include "src/counters.h" 14 #include "src/counters.h"
15 #include "src/deoptimizer.h" 15 #include "src/deoptimizer.h"
16 #include "src/global-handles.h" 16 #include "src/global-handles.h"
17 #include "src/interpreter/bytecodes.h" 17 #include "src/interpreter/bytecodes.h"
18 #include "src/interpreter/interpreter.h" 18 #include "src/interpreter/interpreter.h"
19 #include "src/libsampler/v8-sampler.h" 19 #include "src/libsampler/v8-sampler.h"
20 #include "src/log-inl.h" 20 #include "src/log-inl.h"
21 #include "src/log-utils.h" 21 #include "src/log-utils.h"
22 #include "src/macro-assembler.h" 22 #include "src/macro-assembler.h"
23 #include "src/perf-jit.h" 23 #include "src/perf-jit.h"
24 #include "src/profiler/cpu-profiler-inl.h" 24 #include "src/profiler/cpu-profiler-inl.h"
25 #include "src/profiler/profiler-listener.h"
25 #include "src/runtime-profiler.h" 26 #include "src/runtime-profiler.h"
26 #include "src/string-stream.h" 27 #include "src/string-stream.h"
27 #include "src/vm-state-inl.h" 28 #include "src/vm-state-inl.h"
28 29
29 namespace v8 { 30 namespace v8 {
30 namespace internal { 31 namespace internal {
31 32
32 33
33 #define DECLARE_EVENT(ignore1, name) name, 34 #define DECLARE_EVENT(ignore1, name) name,
34 static const char* kLogEventsNames[CodeEventListener::NUMBER_OF_LOG_EVENTS] = { 35 static const char* kLogEventsNames[CodeEventListener::NUMBER_OF_LOG_EVENTS] = {
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 log_(new Log(this)), 753 log_(new Log(this)),
753 perf_basic_logger_(NULL), 754 perf_basic_logger_(NULL),
754 perf_jit_logger_(NULL), 755 perf_jit_logger_(NULL),
755 ll_logger_(NULL), 756 ll_logger_(NULL),
756 jit_logger_(NULL), 757 jit_logger_(NULL),
757 listeners_(5), 758 listeners_(5),
758 is_initialized_(false) {} 759 is_initialized_(false) {}
759 760
760 Logger::~Logger() { 761 Logger::~Logger() {
761 delete log_; 762 delete log_;
763 profiler_listener_.reset();
alph 2016/06/19 03:05:40 nit: don't need this
lpy 2016/06/20 17:16:55 Done.
762 } 764 }
763 765
764 void Logger::addCodeEventListener(CodeEventListener* listener) { 766 void Logger::addCodeEventListener(CodeEventListener* listener) {
765 bool result = isolate_->code_event_dispatcher()->AddListener(listener); 767 bool result = isolate_->code_event_dispatcher()->AddListener(listener);
766 USE(result); 768 USE(result);
767 DCHECK(result); 769 DCHECK(result);
768 } 770 }
769 771
770 void Logger::removeCodeEventListener(CodeEventListener* listener) { 772 void Logger::removeCodeEventListener(CodeEventListener* listener) {
771 isolate_->code_event_dispatcher()->RemoveListener(listener); 773 isolate_->code_event_dispatcher()->RemoveListener(listener);
(...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after
1782 } 1784 }
1783 1785
1784 if (FLAG_log_internal_timer_events || FLAG_prof_cpp) timer_.Start(); 1786 if (FLAG_log_internal_timer_events || FLAG_prof_cpp) timer_.Start();
1785 1787
1786 if (FLAG_prof_cpp) { 1788 if (FLAG_prof_cpp) {
1787 profiler_ = new Profiler(isolate); 1789 profiler_ = new Profiler(isolate);
1788 is_logging_ = true; 1790 is_logging_ = true;
1789 profiler_->Engage(); 1791 profiler_->Engage();
1790 } 1792 }
1791 1793
1794 profiler_listener_.reset();
1795
1792 if (is_logging_) { 1796 if (is_logging_) {
1793 addCodeEventListener(this); 1797 addCodeEventListener(this);
1794 } 1798 }
1795 1799
1796 return true; 1800 return true;
1797 } 1801 }
1798 1802
1799 1803
1800 void Logger::SetCodeEventHandler(uint32_t options, 1804 void Logger::SetCodeEventHandler(uint32_t options,
1801 JitCodeEventHandler event_handler) { 1805 JitCodeEventHandler event_handler) {
1802 if (jit_logger_) { 1806 if (jit_logger_) {
1803 removeCodeEventListener(jit_logger_); 1807 removeCodeEventListener(jit_logger_);
1804 delete jit_logger_; 1808 delete jit_logger_;
1805 jit_logger_ = NULL; 1809 jit_logger_ = NULL;
1806 } 1810 }
1807 1811
1808 if (event_handler) { 1812 if (event_handler) {
1809 jit_logger_ = new JitLogger(event_handler); 1813 jit_logger_ = new JitLogger(event_handler);
1810 addCodeEventListener(jit_logger_); 1814 addCodeEventListener(jit_logger_);
1811 if (options & kJitCodeEventEnumExisting) { 1815 if (options & kJitCodeEventEnumExisting) {
1812 HandleScope scope(isolate_); 1816 HandleScope scope(isolate_);
1813 LogCodeObjects(); 1817 LogCodeObjects();
1814 LogCompiledFunctions(); 1818 LogCompiledFunctions();
1815 } 1819 }
1816 } 1820 }
1817 } 1821 }
1818 1822
1823 void Logger::SetUpProfilerListener() {
1824 if (!is_initialized_) return;
1825 if (profiler_listener_.get()) {
alph 2016/06/19 03:05:40 nit: if (!listener) listener.reset(new ...); add
lpy 2016/06/20 17:16:55 Done.
1826 addCodeEventListener(profiler_listener_.get());
1827 return;
1828 }
1829 profiler_listener_.reset(new ProfilerListener(isolate_));
1830 addCodeEventListener(profiler_listener_.get());
1831 }
1832
1833 void Logger::TearDownProfilerListener() {
1834 if (profiler_listener_->HasObserver()) return;
alph 2016/06/19 03:05:40 maybe DCHECK(!HasObserver);
lpy 2016/06/20 17:16:55 The reason I don't put DCHECK here, is that I assu
1835 removeCodeEventListener(profiler_listener_.get());
1836 }
1819 1837
1820 sampler::Sampler* Logger::sampler() { 1838 sampler::Sampler* Logger::sampler() {
1821 return ticker_; 1839 return ticker_;
1822 } 1840 }
1823 1841
1824 1842
1825 FILE* Logger::TearDown() { 1843 FILE* Logger::TearDown() {
1826 if (!is_initialized_) return NULL; 1844 if (!is_initialized_) return NULL;
1827 is_initialized_ = false; 1845 is_initialized_ = false;
1828 1846
(...skipping 24 matching lines...) Expand all
1853 delete ll_logger_; 1871 delete ll_logger_;
1854 ll_logger_ = NULL; 1872 ll_logger_ = NULL;
1855 } 1873 }
1856 1874
1857 if (jit_logger_) { 1875 if (jit_logger_) {
1858 removeCodeEventListener(jit_logger_); 1876 removeCodeEventListener(jit_logger_);
1859 delete jit_logger_; 1877 delete jit_logger_;
1860 jit_logger_ = NULL; 1878 jit_logger_ = NULL;
1861 } 1879 }
1862 1880
1881 if (profiler_listener_.get()) {
alph 2016/06/19 03:05:40 I believe it has an implicit conversion to bool.
lpy 2016/06/20 17:16:55 Done.
1882 removeCodeEventListener(profiler_listener_.get());
1883 }
1884
1863 return log_->Close(); 1885 return log_->Close();
1864 } 1886 }
1865 1887
1866 } // namespace internal 1888 } // namespace internal
1867 } // namespace v8 1889 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698