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

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

Issue 2050353002: Update webrtc::DesktopCapturer clients to implement OnCaptureResult(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update 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 (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/desktop_session_proxy.h" 5 #include "remoting/host/desktop_session_proxy.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 171 }
172 } 172 }
173 173
174 bool DesktopSessionProxy::OnMessageReceived(const IPC::Message& message) { 174 bool DesktopSessionProxy::OnMessageReceived(const IPC::Message& message) {
175 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 175 DCHECK(caller_task_runner_->BelongsToCurrentThread());
176 176
177 bool handled = true; 177 bool handled = true;
178 IPC_BEGIN_MESSAGE_MAP(DesktopSessionProxy, message) 178 IPC_BEGIN_MESSAGE_MAP(DesktopSessionProxy, message)
179 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_AudioPacket, 179 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_AudioPacket,
180 OnAudioPacket) 180 OnAudioPacket)
181 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CaptureCompleted, 181 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CaptureResult,
182 OnCaptureCompleted) 182 OnCaptureResult)
183 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_MouseCursor, 183 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_MouseCursor,
184 OnMouseCursor) 184 OnMouseCursor)
185 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CreateSharedBuffer, 185 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CreateSharedBuffer,
186 OnCreateSharedBuffer) 186 OnCreateSharedBuffer)
187 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer, 187 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer,
188 OnReleaseSharedBuffer) 188 OnReleaseSharedBuffer)
189 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_InjectClipboardEvent, 189 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_InjectClipboardEvent,
190 OnInjectClipboardEvent) 190 OnInjectClipboardEvent)
191 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_DisconnectSession, 191 IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_DisconnectSession,
192 DisconnectSession); 192 DisconnectSession);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 desktop_channel_.reset(); 255 desktop_channel_.reset();
256 256
257 if (desktop_process_.IsValid()) 257 if (desktop_process_.IsValid())
258 desktop_process_.Close(); 258 desktop_process_.Close();
259 259
260 shared_buffers_.clear(); 260 shared_buffers_.clear();
261 261
262 // Generate fake responses to keep the video capturer in sync. 262 // Generate fake responses to keep the video capturer in sync.
263 while (pending_capture_frame_requests_) { 263 while (pending_capture_frame_requests_) {
264 --pending_capture_frame_requests_; 264 --pending_capture_frame_requests_;
265 video_capturer_->OnCaptureCompleted(nullptr); 265 video_capturer_->OnCaptureResult(
266 webrtc::DesktopCapturer::Result::ERROR_PERMANENT, nullptr);
266 } 267 }
267 } 268 }
268 269
269 void DesktopSessionProxy::SetAudioCapturer( 270 void DesktopSessionProxy::SetAudioCapturer(
270 const base::WeakPtr<IpcAudioCapturer>& audio_capturer) { 271 const base::WeakPtr<IpcAudioCapturer>& audio_capturer) {
271 DCHECK(audio_capture_task_runner_->BelongsToCurrentThread()); 272 DCHECK(audio_capture_task_runner_->BelongsToCurrentThread());
272 273
273 audio_capturer_ = audio_capturer; 274 audio_capturer_ = audio_capturer;
274 } 275 }
275 276
276 void DesktopSessionProxy::CaptureFrame() { 277 void DesktopSessionProxy::CaptureFrame() {
277 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 278 DCHECK(caller_task_runner_->BelongsToCurrentThread());
278 279
279 if (desktop_channel_) { 280 if (desktop_channel_) {
280 ++pending_capture_frame_requests_; 281 ++pending_capture_frame_requests_;
281 SendToDesktop(new ChromotingNetworkDesktopMsg_CaptureFrame()); 282 SendToDesktop(new ChromotingNetworkDesktopMsg_CaptureFrame());
282 } else { 283 } else {
283 video_capturer_->OnCaptureCompleted(nullptr); 284 video_capturer_->OnCaptureResult(
285 webrtc::DesktopCapturer::Result::ERROR_PERMANENT, nullptr);
284 } 286 }
285 } 287 }
286 288
287 void DesktopSessionProxy::SetVideoCapturer( 289 void DesktopSessionProxy::SetVideoCapturer(
288 const base::WeakPtr<IpcVideoFrameCapturer> video_capturer) { 290 const base::WeakPtr<IpcVideoFrameCapturer> video_capturer) {
289 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 291 DCHECK(caller_task_runner_->BelongsToCurrentThread());
290 292
291 video_capturer_ = video_capturer; 293 video_capturer_ = video_capturer;
292 } 294 }
293 295
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 } 462 }
461 } 463 }
462 464
463 void DesktopSessionProxy::OnReleaseSharedBuffer(int id) { 465 void DesktopSessionProxy::OnReleaseSharedBuffer(int id) {
464 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 466 DCHECK(caller_task_runner_->BelongsToCurrentThread());
465 467
466 // Drop the cached reference to the buffer. 468 // Drop the cached reference to the buffer.
467 shared_buffers_.erase(id); 469 shared_buffers_.erase(id);
468 } 470 }
469 471
470 void DesktopSessionProxy::OnCaptureCompleted( 472 void DesktopSessionProxy::OnCaptureResult(
473 webrtc::DesktopCapturer::Result result,
471 const SerializedDesktopFrame& serialized_frame) { 474 const SerializedDesktopFrame& serialized_frame) {
472 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 475 DCHECK(caller_task_runner_->BelongsToCurrentThread());
473 476
474 --pending_capture_frame_requests_; 477 --pending_capture_frame_requests_;
475 478
476 // If the input serialized_frame does not have a screen size, it means the 479 if (result != webrtc::DesktopCapturer::Result::SUCCESS) {
477 // capturer returns a nullptr for OnCaptureCompleted call. 480 video_capturer_->OnCaptureResult(result, nullptr);
478 if (serialized_frame.dimensions.is_empty()) {
479 video_capturer_->OnCaptureCompleted(nullptr);
480 return; 481 return;
481 } 482 }
482 483
483 // Assume that |serialized_frame| is well-formed because it was received from 484 // Assume that |serialized_frame| is well-formed because it was received from
484 // a more privileged process. 485 // a more privileged process.
485 scoped_refptr<IpcSharedBufferCore> shared_buffer_core = 486 scoped_refptr<IpcSharedBufferCore> shared_buffer_core =
486 GetSharedBufferCore(serialized_frame.shared_buffer_id); 487 GetSharedBufferCore(serialized_frame.shared_buffer_id);
487 CHECK(shared_buffer_core.get()); 488 CHECK(shared_buffer_core.get());
488 489
489 std::unique_ptr<webrtc::DesktopFrame> frame( 490 std::unique_ptr<webrtc::DesktopFrame> frame(
490 new webrtc::SharedMemoryDesktopFrame( 491 new webrtc::SharedMemoryDesktopFrame(
491 serialized_frame.dimensions, serialized_frame.bytes_per_row, 492 serialized_frame.dimensions, serialized_frame.bytes_per_row,
492 new IpcSharedBuffer(shared_buffer_core))); 493 new IpcSharedBuffer(shared_buffer_core)));
493 frame->set_capture_time_ms(serialized_frame.capture_time_ms); 494 frame->set_capture_time_ms(serialized_frame.capture_time_ms);
494 frame->set_dpi(serialized_frame.dpi); 495 frame->set_dpi(serialized_frame.dpi);
495 496
496 for (size_t i = 0; i < serialized_frame.dirty_region.size(); ++i) { 497 for (auto& rect : serialized_frame.dirty_region) {
Jamie 2016/06/14 21:22:44 s/auto/const auto/?
Sergey Ulanov 2016/06/15 20:30:10 Done.
497 frame->mutable_updated_region()->AddRect(serialized_frame.dirty_region[i]); 498 frame->mutable_updated_region()->AddRect(rect);
498 } 499 }
499 500
500 video_capturer_->OnCaptureCompleted(std::move(frame)); 501 video_capturer_->OnCaptureResult(webrtc::DesktopCapturer::Result::SUCCESS,
502 std::move(frame));
501 } 503 }
502 504
503 void DesktopSessionProxy::OnMouseCursor( 505 void DesktopSessionProxy::OnMouseCursor(
504 const webrtc::MouseCursor& mouse_cursor) { 506 const webrtc::MouseCursor& mouse_cursor) {
505 DCHECK(caller_task_runner_->BelongsToCurrentThread()); 507 DCHECK(caller_task_runner_->BelongsToCurrentThread());
506 508
507 if (mouse_cursor_monitor_) { 509 if (mouse_cursor_monitor_) {
508 mouse_cursor_monitor_->OnMouseCursor( 510 mouse_cursor_monitor_->OnMouseCursor(
509 base::WrapUnique(webrtc::MouseCursor::CopyOf(mouse_cursor))); 511 base::WrapUnique(webrtc::MouseCursor::CopyOf(mouse_cursor)));
510 } 512 }
(...skipping 25 matching lines...) Expand all
536 } 538 }
537 539
538 // static 540 // static
539 void DesktopSessionProxyTraits::Destruct( 541 void DesktopSessionProxyTraits::Destruct(
540 const DesktopSessionProxy* desktop_session_proxy) { 542 const DesktopSessionProxy* desktop_session_proxy) {
541 desktop_session_proxy->caller_task_runner_->DeleteSoon(FROM_HERE, 543 desktop_session_proxy->caller_task_runner_->DeleteSoon(FROM_HERE,
542 desktop_session_proxy); 544 desktop_session_proxy);
543 } 545 }
544 546
545 } // namespace remoting 547 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698