diff --git a/gfx/layers/d3d11/TextureHostWrapperD3D11.cpp b/gfx/layers/d3d11/TextureHostWrapperD3D11.cpp index 380307fcea8f..aa6cb49f39ca 100644 --- a/gfx/layers/d3d11/TextureHostWrapperD3D11.cpp +++ b/gfx/layers/d3d11/TextureHostWrapperD3D11.cpp @@ -14,6 +14,7 @@ #include "mozilla/layers/GpuProcessD3D11TextureMap.h" #include "mozilla/layers/TextureD3D11.h" #include "mozilla/layers/WebRenderTextureHost.h" +#include "mozilla/ProfilerMarkers.h" #include "mozilla/SharedThreadPool.h" namespace mozilla { @@ -236,6 +237,14 @@ RefPtr TextureHostWrapperD3D11::CreateFromBufferTexture( colorDepth != gfx::ColorDepth::COLOR_8 || colorRange != gfx::ColorRange::LIMITED || chromaSubsampling != gfx::ChromaSubsampling::HALF_WIDTH_AND_HEIGHT) { + if (profiler_thread_is_being_profiled_for_markers()) { + nsPrintfCString str( + "Unsupported size(%dx%d) colorDepth %hhu colorRange %hhu " + "chromaSubsampling %hhu", + size.width, size.height, uint8_t(colorDepth), uint8_t(colorRange), + uint8_t(chromaSubsampling)); + PROFILER_MARKER_TEXT("TextureHostWrapperD3D11", GRAPHICS, {}, str); + } return nullptr; } diff --git a/gfx/layers/wr/WebRenderImageHost.cpp b/gfx/layers/wr/WebRenderImageHost.cpp index 5016bc30f843..3febc5872baa 100644 --- a/gfx/layers/wr/WebRenderImageHost.cpp +++ b/gfx/layers/wr/WebRenderImageHost.cpp @@ -18,6 +18,7 @@ #include "mozilla/layers/RemoteTextureMap.h" #include "mozilla/layers/WebRenderBridgeParent.h" #include "mozilla/layers/WebRenderTextureHost.h" +#include "mozilla/ProfilerMarkers.h" #include "mozilla/StaticPrefs_webgl.h" #include "nsAString.h" #include "nsDebug.h" // for NS_WARNING, NS_ASSERTION @@ -311,12 +312,15 @@ TextureHost* WebRenderImageHost::GetAsTextureHostForComposite( // Convert YUV BufferTextureHost to TextureHostWrapperD3D11 if possible if (texture->AsBufferTextureHost()) { auto identifier = aAsyncImageManager->GetTextureFactoryIdentifier(); - const bool convertToNV12 = + const bool tryConvertToNV12 = StaticPrefs::gfx_video_convert_yuv_to_nv12_image_host_win() && identifier.mSupportsD3D11NV12 && KnowsCompositor::SupportsD3D11(identifier) && texture->GetFormat() == gfx::SurfaceFormat::YUV; - if (convertToNV12) { + if (tryConvertToNV12) { + PROFILER_MARKER_TEXT("WebRenderImageHost", GRAPHICS, {}, + "Try ConvertToNV12"_ns); + if (!mTextureAllocator) { mTextureAllocator = new TextureWrapperD3D11Allocator(); } @@ -326,6 +330,13 @@ TextureHost* WebRenderImageHost::GetAsTextureHostForComposite( if (textureWrapper) { texture = textureWrapper; } + } else if (profiler_thread_is_being_profiled_for_markers() && + StaticPrefs::gfx_video_convert_yuv_to_nv12_image_host_win() && + texture->GetFormat() == gfx::SurfaceFormat::YUV) { + nsPrintfCString str("No ConvertToNV12 D3D11 %d NV12 %d", + KnowsCompositor::SupportsD3D11(identifier), + identifier.mSupportsD3D11NV12); + PROFILER_MARKER_TEXT("WebRenderImageHost", GRAPHICS, {}, str); } } #endif diff --git a/gfx/webrender_bindings/DCLayerTree.cpp b/gfx/webrender_bindings/DCLayerTree.cpp index 49ca8ee77b02..65dc9aca9aeb 100644 --- a/gfx/webrender_bindings/DCLayerTree.cpp +++ b/gfx/webrender_bindings/DCLayerTree.cpp @@ -1355,7 +1355,7 @@ bool DCSurfaceVideo::CalculateSwapChainSize(gfx::Matrix& aTransform) { MOZ_ASSERT(mDCLayerTree->GetVideoProcessor()); const UINT vendorId = GetVendorId(mDCLayerTree->GetVideoDevice()); - const bool driverSupportsTrueHDR = + const bool driverSupportsAutoHDR = GetVpAutoHDRSupported(vendorId, mDCLayerTree->GetVideoContext(), mDCLayerTree->GetVideoProcessor()); const bool contentIsHDR = false; // XXX for now, only non-HDR is supported. @@ -1364,9 +1364,18 @@ bool DCSurfaceVideo::CalculateSwapChainSize(gfx::Matrix& aTransform) { const bool powerIsCharging = RenderThread::Get()->GetPowerIsCharging(); bool useVpAutoHDR = gfx::gfxVars::WebRenderOverlayVpAutoHDR() && - !contentIsHDR && monitorIsHDR && driverSupportsTrueHDR && + !contentIsHDR && monitorIsHDR && driverSupportsAutoHDR && powerIsCharging && !mVpAutoHDRFailed; + if (profiler_thread_is_being_profiled_for_markers()) { + nsPrintfCString str( + "useVpAutoHDR %d gfxVars %d contentIsHDR %d monitor %d driver %d " + "charging %d failed %d", + useVpAutoHDR, gfx::gfxVars::WebRenderOverlayVpAutoHDR(), contentIsHDR, + monitorIsHDR, driverSupportsAutoHDR, powerIsCharging, mVpAutoHDRFailed); + PROFILER_MARKER_TEXT("DCSurfaceVideo", GRAPHICS, {}, str); + } + if (!mVideoSwapChain || mSwapChainSize != swapChainSize || mIsDRM != isDRM || mUseVpAutoHDR != useVpAutoHDR) { needsToPresent = true; @@ -1791,8 +1800,22 @@ bool DCSurfaceVideo::CallVideoProcessorBlt() { const UINT vendorId = GetVendorId(videoDevice); const auto powerIsCharging = RenderThread::Get()->GetPowerIsCharging(); - if (gfx::gfxVars::WebRenderOverlayVpSuperResolution() && - !mVpSuperResolutionFailed && powerIsCharging) { + const bool useSuperResolution = + gfx::gfxVars::WebRenderOverlayVpSuperResolution() && powerIsCharging && + !mVpSuperResolutionFailed; + + if (profiler_thread_is_being_profiled_for_markers()) { + nsPrintfCString str( + "useSuperResolution %d gfxVars %d charging %d failed %d", + useSuperResolution, gfx::gfxVars::WebRenderOverlayVpSuperResolution(), + powerIsCharging, mVpSuperResolutionFailed); + PROFILER_MARKER_TEXT("DCSurfaceVideo", GRAPHICS, {}, str); + } + + if (useSuperResolution) { + PROFILER_MARKER_TEXT("DCSurfaceVideo", GRAPHICS, {}, + "SetVpSuperResolution"_ns); + hr = SetVpSuperResolution(vendorId, videoContext, videoProcessor, true); if (FAILED(hr)) { if (hr != E_NOTIMPL) { @@ -1803,6 +1826,8 @@ bool DCSurfaceVideo::CallVideoProcessorBlt() { } if (mUseVpAutoHDR) { + PROFILER_MARKER_TEXT("DCSurfaceVideo", GRAPHICS, {}, "SetVpAutoHDR"_ns); + hr = SetVpAutoHDR(vendorId, videoContext, videoProcessor, true); if (FAILED(hr)) { gfxCriticalNoteOnce << "SetVpAutoHDR failed: " << gfx::hexa(hr);