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

Side by Side Diff: remoting/host/daemon_process.cc

Issue 2950993003: [Chromoting] Use ProcessStatsSender in DaemonProcess (daemon process) (Closed)
Patch Set: Resolve review comments Created 3 years, 5 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
« no previous file with comments | « remoting/host/daemon_process.h ('k') | remoting/host/daemon_process_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "remoting/host/daemon_process.h" 5 #include "remoting/host/daemon_process.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
15 #include "base/files/file_util.h" 15 #include "base/files/file_util.h"
16 #include "base/location.h" 16 #include "base/location.h"
17 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "remoting/base/auto_thread_task_runner.h" 18 #include "remoting/base/auto_thread_task_runner.h"
19 #include "remoting/base/constants.h"
19 #include "remoting/host/branding.h" 20 #include "remoting/host/branding.h"
20 #include "remoting/host/chromoting_messages.h" 21 #include "remoting/host/chromoting_messages.h"
21 #include "remoting/host/config_file_watcher.h" 22 #include "remoting/host/config_file_watcher.h"
22 #include "remoting/host/desktop_session.h" 23 #include "remoting/host/desktop_session.h"
23 #include "remoting/host/host_event_logger.h" 24 #include "remoting/host/host_event_logger.h"
24 #include "remoting/host/host_exit_codes.h" 25 #include "remoting/host/host_exit_codes.h"
25 #include "remoting/host/host_status_observer.h" 26 #include "remoting/host/host_status_observer.h"
27 #include "remoting/host/process_stats_sender.h"
26 #include "remoting/host/screen_resolution.h" 28 #include "remoting/host/screen_resolution.h"
27 #include "remoting/protocol/transport.h" 29 #include "remoting/protocol/transport.h"
28 30
29 namespace remoting { 31 namespace remoting {
30 32
31 namespace { 33 namespace {
32 34
33 // This is used for tagging system event logs. 35 // This is used for tagging system event logs.
34 const char kApplicationName[] = "chromoting"; 36 const char kApplicationName[] = "chromoting";
35 37
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientConnected, 115 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientConnected,
114 OnClientConnected) 116 OnClientConnected)
115 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientDisconnected, 117 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientDisconnected,
116 OnClientDisconnected) 118 OnClientDisconnected)
117 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientRouteChange, 119 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_ClientRouteChange,
118 OnClientRouteChange) 120 OnClientRouteChange)
119 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_HostStarted, 121 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_HostStarted,
120 OnHostStarted) 122 OnHostStarted)
121 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_HostShutdown, 123 IPC_MESSAGE_HANDLER(ChromotingNetworkDaemonMsg_HostShutdown,
122 OnHostShutdown) 124 OnHostShutdown)
125 IPC_MESSAGE_HANDLER(ChromotingNetworkToAnyMsg_StartProcessStatsReport,
126 StartProcessStatsReport)
127 IPC_MESSAGE_HANDLER(ChromotingNetworkToAnyMsg_StopProcessStatsReport,
128 StopProcessStatsReport)
123 IPC_MESSAGE_UNHANDLED(handled = false) 129 IPC_MESSAGE_UNHANDLED(handled = false)
124 IPC_END_MESSAGE_MAP() 130 IPC_END_MESSAGE_MAP()
125 131
126 if (!handled) { 132 if (!handled) {
127 LOG(ERROR) << "Received unexpected IPC type: " << message.type(); 133 LOG(ERROR) << "Received unexpected IPC type: " << message.type();
128 CrashNetworkProcess(FROM_HERE); 134 CrashNetworkProcess(FROM_HERE);
129 } 135 }
130 136
131 return handled; 137 return handled;
132 } 138 }
133 139
134 void DaemonProcess::OnPermanentError(int exit_code) { 140 void DaemonProcess::OnPermanentError(int exit_code) {
135 DCHECK(caller_task_runner()->BelongsToCurrentThread()); 141 DCHECK(caller_task_runner()->BelongsToCurrentThread());
136 DCHECK(kMinPermanentErrorExitCode <= exit_code && 142 DCHECK(kMinPermanentErrorExitCode <= exit_code &&
137 exit_code <= kMaxPermanentErrorExitCode); 143 exit_code <= kMaxPermanentErrorExitCode);
138 144
139 Stop(); 145 Stop();
140 } 146 }
141 147
148 void DaemonProcess::OnWorkerProcessStopped() {
149 process_stats_request_count_ = 0;
150 stats_sender_.reset();
151 }
152
142 void DaemonProcess::CloseDesktopSession(int terminal_id) { 153 void DaemonProcess::CloseDesktopSession(int terminal_id) {
143 DCHECK(caller_task_runner()->BelongsToCurrentThread()); 154 DCHECK(caller_task_runner()->BelongsToCurrentThread());
144 155
145 // Validate the supplied terminal ID. An attempt to use a desktop session ID 156 // Validate the supplied terminal ID. An attempt to use a desktop session ID
146 // that couldn't possibly have been allocated is considered a protocol error 157 // that couldn't possibly have been allocated is considered a protocol error
147 // and the network process will be restarted. 158 // and the network process will be restarted.
148 if (!WasTerminalIdAllocated(terminal_id)) { 159 if (!WasTerminalIdAllocated(terminal_id)) {
149 LOG(ERROR) << "Invalid terminal ID: " << terminal_id; 160 LOG(ERROR) << "Invalid terminal ID: " << terminal_id;
150 CrashNetworkProcess(FROM_HERE); 161 CrashNetworkProcess(FROM_HERE);
151 return; 162 return;
(...skipping 21 matching lines...) Expand all
173 } 184 }
174 185
175 DaemonProcess::DaemonProcess( 186 DaemonProcess::DaemonProcess(
176 scoped_refptr<AutoThreadTaskRunner> caller_task_runner, 187 scoped_refptr<AutoThreadTaskRunner> caller_task_runner,
177 scoped_refptr<AutoThreadTaskRunner> io_task_runner, 188 scoped_refptr<AutoThreadTaskRunner> io_task_runner,
178 const base::Closure& stopped_callback) 189 const base::Closure& stopped_callback)
179 : caller_task_runner_(caller_task_runner), 190 : caller_task_runner_(caller_task_runner),
180 io_task_runner_(io_task_runner), 191 io_task_runner_(io_task_runner),
181 next_terminal_id_(0), 192 next_terminal_id_(0),
182 stopped_callback_(stopped_callback), 193 stopped_callback_(stopped_callback),
194 current_process_stats_("DaemonProcess"),
183 weak_factory_(this) { 195 weak_factory_(this) {
184 DCHECK(caller_task_runner->BelongsToCurrentThread()); 196 DCHECK(caller_task_runner->BelongsToCurrentThread());
185 // TODO(sammc): On OSX, mojo::edk::SetMachPortProvider() should be called with 197 // TODO(sammc): On OSX, mojo::edk::SetMachPortProvider() should be called with
186 // a base::PortProvider implementation. Add it here when this code is used on 198 // a base::PortProvider implementation. Add it here when this code is used on
187 // OSX. 199 // OSX.
188 } 200 }
189 201
190 void DaemonProcess::CreateDesktopSession(int terminal_id, 202 void DaemonProcess::CreateDesktopSession(int terminal_id,
191 const ScreenResolution& resolution, 203 const ScreenResolution& resolution,
192 bool virtual_terminal) { 204 bool virtual_terminal) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 host_event_logger_ = 292 host_event_logger_ =
281 HostEventLogger::Create(weak_factory_.GetWeakPtr(), kApplicationName); 293 HostEventLogger::Create(weak_factory_.GetWeakPtr(), kApplicationName);
282 294
283 // Launch the process. 295 // Launch the process.
284 LaunchNetworkProcess(); 296 LaunchNetworkProcess();
285 } 297 }
286 298
287 void DaemonProcess::Stop() { 299 void DaemonProcess::Stop() {
288 DCHECK(caller_task_runner()->BelongsToCurrentThread()); 300 DCHECK(caller_task_runner()->BelongsToCurrentThread());
289 301
302 OnWorkerProcessStopped();
303
290 if (!stopped_callback_.is_null()) { 304 if (!stopped_callback_.is_null()) {
291 base::ResetAndReturn(&stopped_callback_).Run(); 305 base::ResetAndReturn(&stopped_callback_).Run();
292 } 306 }
293 } 307 }
294 308
295 bool DaemonProcess::WasTerminalIdAllocated(int terminal_id) { 309 bool DaemonProcess::WasTerminalIdAllocated(int terminal_id) {
296 return terminal_id < next_terminal_id_; 310 return terminal_id < next_terminal_id_;
297 } 311 }
298 312
299 void DaemonProcess::OnAccessDenied(const std::string& jid) { 313 void DaemonProcess::OnAccessDenied(const std::string& jid) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 observer.OnShutdown(); 372 observer.OnShutdown();
359 } 373 }
360 374
361 void DaemonProcess::DeleteAllDesktopSessions() { 375 void DaemonProcess::DeleteAllDesktopSessions() {
362 while (!desktop_sessions_.empty()) { 376 while (!desktop_sessions_.empty()) {
363 delete desktop_sessions_.front(); 377 delete desktop_sessions_.front();
364 desktop_sessions_.pop_front(); 378 desktop_sessions_.pop_front();
365 } 379 }
366 } 380 }
367 381
382 void DaemonProcess::StartProcessStatsReport(base::TimeDelta interval) {
383 DCHECK(caller_task_runner()->BelongsToCurrentThread());
384 if (interval <= base::TimeDelta::FromSeconds(0)) {
385 interval = kDefaultProcessStatsInterval;
386 }
387
388 process_stats_request_count_++;
389 DCHECK_GT(process_stats_request_count_, 0);
390 if (process_stats_request_count_ == 1 ||
391 stats_sender_->interval() > interval) {
392 DCHECK_EQ(process_stats_request_count_ == 1, !stats_sender_);
393 stats_sender_.reset(new ProcessStatsSender(
394 this,
395 interval,
396 { &current_process_stats_ }));
397 }
398 }
399
400 void DaemonProcess::StopProcessStatsReport() {
401 DCHECK(caller_task_runner()->BelongsToCurrentThread());
402 process_stats_request_count_--;
403 DCHECK_GE(process_stats_request_count_, 0);
404 if (process_stats_request_count_ == 0) {
405 DCHECK(stats_sender_);
406 stats_sender_.reset();
407 }
408 }
409
410 void DaemonProcess::OnProcessStats(
411 const protocol::AggregatedProcessResourceUsage& usage) {
412 SendToNetwork(new ChromotingAnyToNetworkMsg_ReportProcessStats(usage));
413 }
414
368 } // namespace remoting 415 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/daemon_process.h ('k') | remoting/host/daemon_process_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698