From 8f1b93c1044d528879141d7e1712df9bf5ad7951 Mon Sep 17 00:00:00 2001 From: Zijie He Date: Mon, 25 Sep 2017 18:24:59 -0700 Subject: [PATCH] Add more logs in DX capturer This is a trivial change to add more logs in DX capturer components for debugging purpose. Bug: chromium:764258 Change-Id: I406127d838a522f0226720434e840c7163b4719d Reviewed-on: https://webrtc-review.googlesource.com/3541 Commit-Queue: Zijie He Reviewed-by: Jamie Walch Cr-Commit-Position: refs/heads/master@{#19960} --- .../win/dxgi_adapter_duplicator.cc | 6 +++++ .../win/dxgi_duplicator_controller.cc | 25 ++++++++++++++++++- .../win/dxgi_duplicator_controller.h | 4 +++ .../win/screen_capturer_win_directx.cc | 6 +++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/modules/desktop_capture/win/dxgi_adapter_duplicator.cc b/modules/desktop_capture/win/dxgi_adapter_duplicator.cc index 3fb92c977b..959f96988e 100644 --- a/modules/desktop_capture/win/dxgi_adapter_duplicator.cc +++ b/modules/desktop_capture/win/dxgi_adapter_duplicator.cc @@ -89,6 +89,12 @@ bool DxgiAdapterDuplicator::DoInitialize() { duplicators_.push_back(std::move(duplicator)); desktop_rect_.UnionWith(duplicators_.back().desktop_rect()); + } else { + LOG(LS_ERROR) << (desc.AttachedToDesktop ? "Attached" : "Detached") + << " output " << i << " (" << desc.DesktopCoordinates.top + << ", " << desc.DesktopCoordinates.left << ") - (" + << desc.DesktopCoordinates.bottom << ", " + << desc.DesktopCoordinates.right << ") is ignored."; } } else { LOG(LS_WARNING) << "Failed to get output description of device " << i diff --git a/modules/desktop_capture/win/dxgi_duplicator_controller.cc b/modules/desktop_capture/win/dxgi_duplicator_controller.cc index bd992f1f05..2fe5e0cc70 100644 --- a/modules/desktop_capture/win/dxgi_duplicator_controller.cc +++ b/modules/desktop_capture/win/dxgi_duplicator_controller.cc @@ -25,6 +25,27 @@ namespace webrtc { +// static +std::string DxgiDuplicatorController::ResultName( + DxgiDuplicatorController::Result result) { + switch (result) { + case Result::SUCCEEDED: + return "Succeeded"; + case Result::UNSUPPORTED_SESSION: + return "Unsupported session"; + case Result::FRAME_PREPARE_FAILED: + return "Frame preparation failed"; + case Result::INITIALIZATION_FAILED: + return "Initialization failed"; + case Result::DUPLICATION_FAILED: + return "Duplication failed"; + case Result::INVALID_MONITOR_ID: + return "Invalid monitor id"; + default: + return "Unknown error"; + } +} + // static rtc::scoped_refptr DxgiDuplicatorController::Instance() { @@ -305,7 +326,7 @@ bool DxgiDuplicatorController::DoDuplicateUnlocked(Context* context, } if (result) { - target->set_dpi(dpi()); + target->set_dpi(dpi_); return true; } @@ -439,6 +460,8 @@ bool DxgiDuplicatorController::EnsureFrameCaptured(Context* context, return false; } if (rtc::TimeMillis() - start_ms > timeout_ms) { + LOG(LS_ERROR) << "Failed to capture " << frames_to_skip << " frames " + "within " << timeout_ms << " milliseconds."; return false; } } diff --git a/modules/desktop_capture/win/dxgi_duplicator_controller.h b/modules/desktop_capture/win/dxgi_duplicator_controller.h index e2fa32e281..ecae481005 100644 --- a/modules/desktop_capture/win/dxgi_duplicator_controller.h +++ b/modules/desktop_capture/win/dxgi_duplicator_controller.h @@ -68,6 +68,10 @@ class DxgiDuplicatorController { INVALID_MONITOR_ID, }; + // Converts |result| into user-friendly string representation. The return + // value should not be used to identify error types. + static std::string ResultName(Result result); + // Returns the singleton instance of DxgiDuplicatorController. static rtc::scoped_refptr Instance(); diff --git a/modules/desktop_capture/win/screen_capturer_win_directx.cc b/modules/desktop_capture/win/screen_capturer_win_directx.cc index 3ac1ce037f..5356ad3e51 100644 --- a/modules/desktop_capture/win/screen_capturer_win_directx.cc +++ b/modules/desktop_capture/win/screen_capturer_win_directx.cc @@ -135,6 +135,11 @@ void ScreenCapturerWinDirectx::CaptureFrame() { } using DuplicateResult = DxgiDuplicatorController::Result; + if (result != DuplicateResult::SUCCEEDED) { + LOG(LS_ERROR) << "DxgiDuplicatorController failed to capture desktop, " + "error code " + << DxgiDuplicatorController::ResultName(result); + } switch (result) { case DuplicateResult::UNSUPPORTED_SESSION: { LOG(LS_ERROR) << "Current binary is running on a session not supported " @@ -150,6 +155,7 @@ void ScreenCapturerWinDirectx::CaptureFrame() { break; } case DuplicateResult::INVALID_MONITOR_ID: { + LOG(LS_ERROR) << "Invalid monitor id " << current_screen_id_; callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr); break; }