diff --git a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll index 27a8cfb..2b7407a 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll differ diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 78adc5f..8ecda3d 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll differ diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp index 90c8470..32207a6 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.cpp @@ -60,6 +60,8 @@ const std::unique_ptr& GetMonitorManager() LUID GetUnityAdapterLuid() { + UDD_FUNCTION_SCOPE_TIMER + const auto device = GetDevice(); Microsoft::WRL::ComPtr dxgiDevice; diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp index d6a6d39..c00f1b0 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Cursor.cpp @@ -21,6 +21,8 @@ Cursor::~Cursor() void Cursor::UpdateBuffer(Duplicator* duplicator, const DXGI_OUTDUPL_FRAME_INFO& frameInfo) { + UDD_FUNCTION_SCOPE_TIMER + if (frameInfo.LastMouseUpdateTime.QuadPart == 0) { return; @@ -66,6 +68,8 @@ void Cursor::UpdateTexture( Duplicator* duplicator, const ComPtr& desktopTexture) { + UDD_FUNCTION_SCOPE_TIMER + auto monitor = duplicator->GetMonitor(); // Check desktop texure @@ -369,6 +373,8 @@ void Cursor::UpdateTexture( void Cursor::Draw(const Microsoft::WRL::ComPtr& texture) { + UDD_FUNCTION_SCOPE_TIMER + if (texture == nullptr) { Debug::Error("Cursor::UpdateTexture() => Desktop texture is null."); @@ -384,6 +390,8 @@ void Cursor::Draw(const Microsoft::WRL::ComPtr& texture) void Cursor::GetTexture(ID3D11Texture2D* texture) { + UDD_FUNCTION_SCOPE_TIMER + if (!bgraBuffer_) { Debug::Error("Cursor::GetTexture() => bgra32Buffer is null."); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp index 4e899aa..01f506a 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.cpp @@ -39,4 +39,18 @@ void Debug::Finalize() } Debug::SetLogFunc(nullptr); Debug::SetErrorFunc(nullptr); +} + + +decltype(DebugFunctionScopedTimer::currentId) DebugFunctionScopedTimer::currentId = 0; + + +DebugFunctionScopedTimer::DebugFunctionScopedTimer(const char* name) + : ScopedTimer([this](std::chrono::microseconds us) { + Debug::Log("<< [", id_, "]", name_, " : ", us.count(), "[us]"); + }) + , name_(name) + , id_(currentId++) +{ + Debug::Log(">> [", id_, "]", name_); } \ No newline at end of file diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h index d1222aa..fd79648 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Debug.h @@ -10,7 +10,9 @@ // Debug flag +#ifdef _DEBUG #define UDD_DEBUG_ON +#endif // Logging @@ -156,16 +158,25 @@ private: }; +class DebugFunctionScopedTimer : public ScopedTimer +{ +public: + explicit DebugFunctionScopedTimer(const char* name); + +private: + static unsigned int currentId; + const char* const name_; + const unsigned int id_; +}; + + #ifdef UDD_DEBUG_ON #define UDD_FUNCTION_SCOPE_TIMER \ - ScopedTimer _timer_##__COUNTER__([](std::chrono::microseconds us) \ - { \ - Debug::Log(__FUNCTION__, "@", __FILE__, ":", __LINE__, " => ", us.count(), " [us]"); \ - }); + DebugFunctionScopedTimer _timer_##__COUNTER__(__FUNCTION__); #define UDD_SCOPE_TIMER(Name) \ ScopedTimer _timer_##__COUNTER__([](std::chrono::microseconds us) \ { \ - Debug::Log(#Name, " => ", us.count(), " [us]"); \ + Debug::Log(#Name, " : ", us.count(), " [us]"); \ }); #else #define UDD_FUNCTION_SCOPE_TIMER diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Device.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Device.cpp index 032cbc6..1759d85 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Device.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Device.cpp @@ -27,6 +27,8 @@ IsolatedD3D11Device::~IsolatedD3D11Device() HRESULT IsolatedD3D11Device::Create(const ComPtr& adapter) { + UDD_FUNCTION_SCOPE_TIMER + const auto driverType = adapter ? D3D_DRIVER_TYPE_UNKNOWN : D3D_DRIVER_TYPE_HARDWARE; @@ -68,6 +70,8 @@ ComPtr IsolatedD3D11Device::GetDevice() Microsoft::WRL::ComPtr IsolatedD3D11Device::GetCompatibleSharedTexture( const ComPtr& src) { + UDD_FUNCTION_SCOPE_TIMER + D3D11_TEXTURE2D_DESC srcDesc; src->GetDesc(&srcDesc); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp index 2e7a9c4..666593d 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp @@ -33,6 +33,8 @@ Duplicator::~Duplicator() void Duplicator::InitializeDevice() { + UDD_FUNCTION_SCOPE_TIMER + device_ = std::make_shared(); if (FAILED(device_->Create(monitor_->GetAdapter()))) @@ -45,6 +47,8 @@ void Duplicator::InitializeDevice() void Duplicator::InitializeDuplication() { + UDD_FUNCTION_SCOPE_TIMER + ComPtr output1; if (FAILED(monitor_->GetOutput().As(&output1))) { @@ -107,6 +111,8 @@ void Duplicator::InitializeDuplication() void Duplicator::CheckUnityAdapter() { + UDD_FUNCTION_SCOPE_TIMER + DXGI_ADAPTER_DESC desc; monitor_->GetAdapter()->GetDesc(&desc); @@ -125,6 +131,8 @@ void Duplicator::CheckUnityAdapter() void Duplicator::Start() { + UDD_FUNCTION_SCOPE_TIMER + if (state_ != State::Ready) return; Stop(); @@ -170,6 +178,8 @@ void Duplicator::Start() void Duplicator::Stop() { + UDD_FUNCTION_SCOPE_TIMER + shouldRun_ = false; if (thread_.joinable()) @@ -226,6 +236,8 @@ const Duplicator::Frame& Duplicator::GetLastFrame() const void Duplicator::Duplicate(UINT timeout) { + UDD_FUNCTION_SCOPE_TIMER + if (!dupl_ || !device_) return; Release(); @@ -312,6 +324,8 @@ void Duplicator::Duplicate(UINT timeout) void Duplicator::Release() { + UDD_FUNCTION_SCOPE_TIMER + if (!isFrameAcquired_) return; const auto hr = dupl_->ReleaseFrame(); @@ -347,6 +361,8 @@ void Duplicator::UpdateCursor( const ComPtr& texture, const DXGI_OUTDUPL_FRAME_INFO& frameInfo) { + UDD_FUNCTION_SCOPE_TIMER + auto& manager = GetMonitorManager(); if (frameInfo.PointerPosition.Visible) @@ -365,6 +381,8 @@ void Duplicator::UpdateCursor( void Duplicator::UpdateMetadata(UINT totalBufferSize) { + UDD_FUNCTION_SCOPE_TIMER + metaData_.buffer.ExpandIfNeeded(totalBufferSize); if (!metaData_.buffer.Empty()) { @@ -376,6 +394,8 @@ void Duplicator::UpdateMetadata(UINT totalBufferSize) void Duplicator::UpdateMoveRects() { + UDD_FUNCTION_SCOPE_TIMER + const auto hr = dupl_->GetFrameMoveRects( metaData_.buffer.Size(), metaData_.buffer.As(), @@ -418,6 +438,8 @@ void Duplicator::UpdateMoveRects() void Duplicator::UpdateDirtyRects() { + UDD_FUNCTION_SCOPE_TIMER + const auto hr = dupl_->GetFrameDirtyRects( metaData_.buffer.Size() - metaData_.moveRectSize, metaData_.buffer.As(metaData_.moveRectSize /* offset */), diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp index f0e331f..f75ff15 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Monitor.cpp @@ -29,6 +29,8 @@ void Monitor::Initialize( const ComPtr &output ) { + UDD_FUNCTION_SCOPE_TIMER + adapter_ = adapter; output_ = output; @@ -75,12 +77,16 @@ void Monitor::Initialize( void Monitor::Finalize() { + UDD_FUNCTION_SCOPE_TIMER + StopCapture(); } void Monitor::Render() { + UDD_FUNCTION_SCOPE_TIMER + const auto& frame = duplicator_->GetLastFrame(); if (frame.id == lastFrameId_) return; @@ -133,6 +139,8 @@ void Monitor::Render() void Monitor::StartCapture() { + UDD_FUNCTION_SCOPE_TIMER + if (duplicator_->GetState() == DuplicatorState::Ready) { duplicator_->Start(); @@ -142,6 +150,8 @@ void Monitor::StartCapture() void Monitor::StopCapture() { + UDD_FUNCTION_SCOPE_TIMER + duplicator_->Stop(); } @@ -302,6 +312,8 @@ bool Monitor::UseGetPixels() const void Monitor::CopyTextureFromGpuToCpu(ID3D11Texture2D* texture) { + UDD_FUNCTION_SCOPE_TIMER + const auto monitorRot = static_cast(GetRotation()); const auto monitorWidth = GetWidth(); const auto monitorHeight = GetHeight(); @@ -367,6 +379,8 @@ void Monitor::CopyTextureFromGpuToCpu(ID3D11Texture2D* texture) bool Monitor::GetPixels(BYTE* output, int x, int y, int width, int height) { + UDD_FUNCTION_SCOPE_TIMER + if (!UseGetPixels()) { Debug::Error("Monitor::GetPixels() => UseGetPixels(true) must have been called when you want to use GetPixels()."); diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp index bbfaf32..b7caeec 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/MonitorManager.cpp @@ -30,6 +30,8 @@ MonitorManager::~MonitorManager() void MonitorManager::Initialize() { + UDD_FUNCTION_SCOPE_TIMER + ComPtr factory; if (FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&factory)))) { @@ -69,6 +71,8 @@ void MonitorManager::Initialize() void MonitorManager::Finalize() { + UDD_FUNCTION_SCOPE_TIMER + for (const auto& monitor : monitors_) { monitor->Finalize(); @@ -80,6 +84,8 @@ void MonitorManager::Finalize() void MonitorManager::Update() { + UDD_FUNCTION_SCOPE_TIMER + if (isReinitializationRequired_) { Reinitialize(); @@ -97,6 +103,8 @@ void MonitorManager::RequireReinitilization() void MonitorManager::Reinitialize() { + UDD_FUNCTION_SCOPE_TIMER + Debug::Log("MonitorManager::Reinitialize()"); Finalize(); Initialize(); @@ -106,6 +114,8 @@ void MonitorManager::Reinitialize() bool MonitorManager::HasMonitorCountChanged() const { + UDD_FUNCTION_SCOPE_TIMER + ComPtr factory; if (FAILED(CreateDXGIFactory1(IID_PPV_ARGS(&factory)))) {