OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium 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 "base/base_switches.h" | 5 #include "base/base_switches.h" |
6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
7 #include "base/debug/debugger.h" | 7 #include "base/debug/debugger.h" |
8 #include "base/debug/stack_trace.h" | 8 #include "base/debug/stack_trace.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/hi_res_timer_manager.h" | 10 #include "base/hi_res_timer_manager.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 ChildProcess::WaitForDebugger("Renderer"); | 57 ChildProcess::WaitForDebugger("Renderer"); |
58 | 58 |
59 // This parameter causes an assertion. | 59 // This parameter causes an assertion. |
60 if (command_line.HasSwitch(switches::kRendererAssertTest)) { | 60 if (command_line.HasSwitch(switches::kRendererAssertTest)) { |
61 DCHECK(false); | 61 DCHECK(false); |
62 } | 62 } |
63 } | 63 } |
64 | 64 |
65 // This is a simplified version of the browser Jankometer, which measures | 65 // This is a simplified version of the browser Jankometer, which measures |
66 // the processing time of tasks on the render thread. | 66 // the processing time of tasks on the render thread. |
67 class RendererMessageLoopObserver : public MessageLoop::TaskObserver { | 67 class RendererMessageLoopObserver : public base::MessageLoop::TaskObserver { |
68 public: | 68 public: |
69 RendererMessageLoopObserver() | 69 RendererMessageLoopObserver() |
70 : process_times_(base::Histogram::FactoryGet( | 70 : process_times_(base::Histogram::FactoryGet( |
71 "Chrome.ProcMsgL RenderThread", | 71 "Chrome.ProcMsgL RenderThread", |
72 1, 3600000, 50, base::Histogram::kUmaTargetedHistogramFlag)) {} | 72 1, 3600000, 50, base::Histogram::kUmaTargetedHistogramFlag)) {} |
73 virtual ~RendererMessageLoopObserver() {} | 73 virtual ~RendererMessageLoopObserver() {} |
74 | 74 |
75 virtual void WillProcessTask(const base::PendingTask& pending_task) OVERRIDE { | 75 virtual void WillProcessTask(const base::PendingTask& pending_task) OVERRIDE { |
76 begin_process_message_ = base::TimeTicks::Now(); | 76 begin_process_message_ = base::TimeTicks::Now(); |
77 } | 77 } |
78 | 78 |
79 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { | 79 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { |
80 if (!begin_process_message_.is_null()) | 80 if (!begin_process_message_.is_null()) |
81 process_times_->AddTime(base::TimeTicks::Now() - begin_process_message_); | 81 process_times_->AddTime(base::TimeTicks::Now() - begin_process_message_); |
82 } | 82 } |
83 | 83 |
84 private: | 84 private: |
85 base::TimeTicks begin_process_message_; | 85 base::TimeTicks begin_process_message_; |
86 base::HistogramBase* const process_times_; | 86 base::HistogramBase* const process_times_; |
87 DISALLOW_COPY_AND_ASSIGN(RendererMessageLoopObserver); | 87 DISALLOW_COPY_AND_ASSIGN(RendererMessageLoopObserver); |
88 }; | 88 }; |
89 | 89 |
90 // For measuring memory usage after each task. Behind a command line flag. | 90 // For measuring memory usage after each task. Behind a command line flag. |
91 class MemoryObserver : public MessageLoop::TaskObserver { | 91 class MemoryObserver : public base::MessageLoop::TaskObserver { |
92 public: | 92 public: |
93 MemoryObserver() {} | 93 MemoryObserver() {} |
94 virtual ~MemoryObserver() {} | 94 virtual ~MemoryObserver() {} |
95 | 95 |
96 virtual void WillProcessTask(const base::PendingTask& pending_task) OVERRIDE { | 96 virtual void WillProcessTask(const base::PendingTask& pending_task) OVERRIDE { |
97 } | 97 } |
98 | 98 |
99 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { | 99 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { |
100 HISTOGRAM_MEMORY_KB("Memory.RendererUsed", webkit_glue::MemoryUsageKB()); | 100 HISTOGRAM_MEMORY_KB("Memory.RendererUsed", webkit_glue::MemoryUsageKB()); |
101 } | 101 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 GetContentClient()->renderer()->RegisterPPAPIInterfaceFactories( | 138 GetContentClient()->renderer()->RegisterPPAPIInterfaceFactories( |
139 factory_manager); | 139 factory_manager); |
140 | 140 |
141 base::StatsCounterTimer stats_counter_timer("Content.RendererInit"); | 141 base::StatsCounterTimer stats_counter_timer("Content.RendererInit"); |
142 base::StatsScope<base::StatsCounterTimer> startup_timer(stats_counter_timer); | 142 base::StatsScope<base::StatsCounterTimer> startup_timer(stats_counter_timer); |
143 | 143 |
144 RendererMessageLoopObserver task_observer; | 144 RendererMessageLoopObserver task_observer; |
145 #if defined(OS_MACOSX) | 145 #if defined(OS_MACOSX) |
146 // As long as we use Cocoa in the renderer (for the forseeable future as of | 146 // As long as we use Cocoa in the renderer (for the forseeable future as of |
147 // now; see http://crbug.com/13890 for info) we need to have a UI loop. | 147 // now; see http://crbug.com/13890 for info) we need to have a UI loop. |
148 MessageLoop main_message_loop(MessageLoop::TYPE_UI); | 148 base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI); |
149 #else | 149 #else |
150 // The main message loop of the renderer services doesn't have IO or UI tasks, | 150 // The main message loop of the renderer services doesn't have IO or UI tasks, |
151 // unless in-process-plugins is used. | 151 // unless in-process-plugins is used. |
152 MessageLoop main_message_loop(RenderProcessImpl::InProcessPlugins() ? | 152 base::MessageLoop main_message_loop(RenderProcessImpl::InProcessPlugins() |
153 MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT); | 153 ? base::MessageLoop::TYPE_UI |
| 154 : base::MessageLoop::TYPE_DEFAULT); |
154 #endif | 155 #endif |
155 main_message_loop.AddTaskObserver(&task_observer); | 156 main_message_loop.AddTaskObserver(&task_observer); |
156 | 157 |
157 scoped_ptr<MemoryObserver> memory_observer; | 158 scoped_ptr<MemoryObserver> memory_observer; |
158 if (parsed_command_line.HasSwitch(switches::kMemoryMetrics)) { | 159 if (parsed_command_line.HasSwitch(switches::kMemoryMetrics)) { |
159 memory_observer.reset(new MemoryObserver()); | 160 memory_observer.reset(new MemoryObserver()); |
160 main_message_loop.AddTaskObserver(memory_observer.get()); | 161 main_message_loop.AddTaskObserver(memory_observer.get()); |
161 } | 162 } |
162 | 163 |
163 base::PlatformThread::SetName("CrRendererMain"); | 164 base::PlatformThread::SetName("CrRendererMain"); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 platform.RunSandboxTests(no_sandbox); | 225 platform.RunSandboxTests(no_sandbox); |
225 | 226 |
226 startup_timer.Stop(); // End of Startup Time Measurement. | 227 startup_timer.Stop(); // End of Startup Time Measurement. |
227 | 228 |
228 if (run_loop) { | 229 if (run_loop) { |
229 #if defined(OS_MACOSX) | 230 #if defined(OS_MACOSX) |
230 if (pool) | 231 if (pool) |
231 pool->Recycle(); | 232 pool->Recycle(); |
232 #endif | 233 #endif |
233 TRACE_EVENT_BEGIN_ETW("RendererMain.START_MSG_LOOP", 0, 0); | 234 TRACE_EVENT_BEGIN_ETW("RendererMain.START_MSG_LOOP", 0, 0); |
234 MessageLoop::current()->Run(); | 235 base::MessageLoop::current()->Run(); |
235 TRACE_EVENT_END_ETW("RendererMain.START_MSG_LOOP", 0, 0); | 236 TRACE_EVENT_END_ETW("RendererMain.START_MSG_LOOP", 0, 0); |
236 } | 237 } |
237 } | 238 } |
238 platform.PlatformUninitialize(); | 239 platform.PlatformUninitialize(); |
239 TRACE_EVENT_END_ETW("RendererMain", 0, ""); | 240 TRACE_EVENT_END_ETW("RendererMain", 0, ""); |
240 return 0; | 241 return 0; |
241 } | 242 } |
242 | 243 |
243 } // namespace content | 244 } // namespace content |
OLD | NEW |