0

Trace events for swap chain presentations in SharedImageBacking

Also do gl::LabelSwapChainAndBuffers for D3DImageBacking as DXGISwapChainImageBacking.
It can make things easier to know which SII is doing presentation.

Bug: None
Change-Id: I0ce37c78493656fe910e6be6e5aabe2e81b00bc0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6268400
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Reviewed-by: Saifuddin Hitawala <hitawala@chromium.org>
Commit-Queue: Chunbo Hua <chunbo.hua@intel.com>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1422290}
This commit is contained in:
Chunbo Hua
2025-02-19 17:03:39 -08:00
committed by Chromium LUCI CQ
parent 9b0282c0ec
commit 50ae3921ac
6 changed files with 13 additions and 8 deletions

@ -114,7 +114,8 @@ basic_test_harness_script = r"""
_GET_STATISTICS_EVENT_NAME = 'GetFrameStatisticsMedia'
_SWAP_CHAIN_PRESENT_EVENT_NAME = 'SwapChain::Present'
_BEGIN_OVERLAY_ACCESS_EVENT_NAME = 'SkiaOutputDeviceDComp::BeginOverlayAccess'
_PRESENT_SWAP_CHAIN_EVENT_NAME = 'IDXGISwapChain1::Present1'
_PRESENT_SWAP_CHAIN_EVENT_NAME =\
'DXGISwapChainImageBacking::Present'
_HTML_CANVAS_NOTIFY_LISTENERS_CANVAS_CHANGED_EVENT_NAME =\
'HTMLCanvasElement::NotifyListenersCanvasChanged'

@ -1208,15 +1208,15 @@ void* D3DImageBacking::GetEGLImage() const {
bool D3DImageBacking::PresentSwapChain() {
AutoLock auto_lock(this);
TRACE_EVENT0("gpu", "D3DImageBacking::PresentSwapChain");
if (!swap_chain_ || !is_back_buffer_) {
LOG(ERROR) << "Backing does not correspond to back buffer of swap chain";
return false;
}
TRACE_EVENT1("gpu", "D3DImageBacking::PresentSwapChain", "has_alpha",
!SkAlphaTypeIsOpaque(alpha_type()));
constexpr UINT kFlags = DXGI_PRESENT_ALLOW_TEARING;
constexpr DXGI_PRESENT_PARAMETERS kParams = {};
HRESULT hr = swap_chain_->Present1(/*interval=*/0, kFlags, &kParams);
if (FAILED(hr)) {
LOG(ERROR) << "Present1 failed with error " << std::hex << hr;

@ -173,6 +173,8 @@ constexpr SharedImageUsageSet kSupportedUsage =
SHARED_IMAGE_USAGE_WEBGPU_STORAGE_TEXTURE |
SHARED_IMAGE_USAGE_WEBGPU_SHARED_BUFFER;
const char* kD3DImageBackingLabel = "D3DImageBacking";
} // anonymous namespace
D3DImageBackingFactory::D3DImageBackingFactory(
@ -323,6 +325,8 @@ D3DImageBackingFactory::CreateSwapChain(const Mailbox& front_buffer_mailbox,
return {nullptr, nullptr};
}
gl::LabelSwapChainAndBuffers(swap_chain.Get(), kD3DImageBackingLabel);
if (gl::DXGIWaitableSwapChainEnabled()) {
Microsoft::WRL::ComPtr<IDXGISwapChain3> swap_chain3;
if (SUCCEEDED(swap_chain.As(&swap_chain3))) {

@ -42,7 +42,7 @@ namespace gpu {
namespace {
const char* kDXGISwapChainImageBackingLabel = "DXGISwapChainImageBacking";
} // namespace
} // anonymous namespace
// static
std::unique_ptr<DXGISwapChainImageBacking> DXGISwapChainImageBacking::Create(
@ -270,7 +270,7 @@ bool DXGISwapChainImageBacking::Present(
: 1;
UINT flags = use_swap_chain_tearing ? DXGI_PRESENT_ALLOW_TEARING : 0;
TRACE_EVENT2("gpu", "IDXGISwapChain1::Present1", "has_alpha",
TRACE_EVENT2("gpu", "DXGISwapChainImageBacking::Present", "has_alpha",
!SkAlphaTypeIsOpaque(alpha_type()), "dirty_rect",
pending_swap_rect_->ToString());
DXGI_PRESENT_PARAMETERS params = {};

@ -168,8 +168,8 @@ void LabelSwapChainBuffers(IDXGISwapChain* swap_chain,
}
}
// Same as LabelSwapChainAndBuffers, but only does the buffers. Used for resize
// operations
// Labels swapchain with the name_prefix and its buffers with the string
// name_prefix + _Buffer_ + <buffer_number>.
void LabelSwapChainAndBuffers(IDXGISwapChain* swap_chain,
const char* name_prefix) {
SetDebugName(swap_chain, name_prefix);

@ -65,7 +65,7 @@ GL_EXPORT unsigned int FrameRateToPresentDuration(float frame_rate);
// BufferCount for the root surface swap chain.
GL_EXPORT unsigned int DirectCompositionRootSurfaceBufferCount();
// Labels swapchain with the name_prefix and ts buffers buffers with the string
// Labels swapchain with the name_prefix and its buffers with the string
// name_prefix + _Buffer_ + <buffer_number>.
GL_EXPORT void LabelSwapChainAndBuffers(IDXGISwapChain* swap_chain,
const char* name_prefix);