D3D11: Add UMA metrics for Create*Shader's timing

Bug: chromium:399642827
Change-Id: Iaf22b598305d8c11ec0ea9bafa6cd1361db571f5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/265654
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
diff --git a/src/dawn/native/d3d11/ComputePipelineD3D11.cpp b/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
index 95f523b..dcf48ff 100644
--- a/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
+++ b/src/dawn/native/d3d11/ComputePipelineD3D11.cpp
@@ -36,6 +36,7 @@
 #include "dawn/native/d3d11/DeviceD3D11.h"
 #include "dawn/native/d3d11/ShaderModuleD3D11.h"
 #include "dawn/native/d3d11/UtilsD3D11.h"
+#include "dawn/platform/DawnPlatform.h"
 
 namespace dawn::native::d3d11 {
 
@@ -83,10 +84,13 @@
                     ToBackend(programmableStage.module)
                         ->Compile(programmableStage, SingleShaderStage::Compute,
                                   ToBackend(GetLayout()), compileFlags, GetImmediateMask()));
-    DAWN_TRY(CheckHRESULT(device->GetD3D11Device()->CreateComputeShader(
-                              compiledShader.shaderBlob.Data(), compiledShader.shaderBlob.Size(),
-                              nullptr, &mComputeShader),
-                          "D3D11 create compute shader"));
+    {
+        SCOPED_DAWN_HISTOGRAM_TIMER_MICROS(device->GetPlatform(), "D3D11.CreateComputeShaderUs");
+        DAWN_TRY(CheckHRESULT(device->GetD3D11Device()->CreateComputeShader(
+                                  compiledShader.shaderBlob.Data(),
+                                  compiledShader.shaderBlob.Size(), nullptr, &mComputeShader),
+                              "D3D11 create compute shader"));
+    }
 
     SetLabelImpl();
 
diff --git a/src/dawn/native/d3d11/RenderPipelineD3D11.cpp b/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
index 2e8ef8f..6b87e4c 100644
--- a/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
+++ b/src/dawn/native/d3d11/RenderPipelineD3D11.cpp
@@ -44,6 +44,7 @@
 #include "dawn/native/d3d11/PipelineLayoutD3D11.h"
 #include "dawn/native/d3d11/ShaderModuleD3D11.h"
 #include "dawn/native/d3d11/UtilsD3D11.h"
+#include "dawn/platform/DawnPlatform.h"
 
 namespace dawn::native::d3d11 {
 namespace {
@@ -482,9 +483,13 @@
                                       ToBackend(GetLayout()), compileFlags | additionalCompileFlags,
                                       GetImmediateMask(), usedInterstageVariables));
         const Blob& shaderBlob = compiledShader[SingleShaderStage::Vertex].shaderBlob;
-        DAWN_TRY(CheckHRESULT(device->GetD3D11Device()->CreateVertexShader(
-                                  shaderBlob.Data(), shaderBlob.Size(), nullptr, &mVertexShader),
-                              "D3D11 create vertex shader"));
+        {
+            SCOPED_DAWN_HISTOGRAM_TIMER_MICROS(device->GetPlatform(), "D3D11.CreateVertexShaderUs");
+            DAWN_TRY(
+                CheckHRESULT(device->GetD3D11Device()->CreateVertexShader(
+                                 shaderBlob.Data(), shaderBlob.Size(), nullptr, &mVertexShader),
+                             "D3D11 create vertex shader"));
+        }
         DAWN_TRY(InitializeInputLayout(shaderBlob));
     }
 
@@ -548,11 +553,14 @@
                 ->Compile(programmableStage, SingleShaderStage::Fragment, ToBackend(GetLayout()),
                           compileFlags | additionalCompileFlags, GetImmediateMask(),
                           usedInterstageVariables, pixelLocalOptions));
-        DAWN_TRY(CheckHRESULT(device->GetD3D11Device()->CreatePixelShader(
-                                  compiledShader[SingleShaderStage::Fragment].shaderBlob.Data(),
-                                  compiledShader[SingleShaderStage::Fragment].shaderBlob.Size(),
-                                  nullptr, &mPixelShader),
-                              "D3D11 create pixel shader"));
+        {
+            SCOPED_DAWN_HISTOGRAM_TIMER_MICROS(device->GetPlatform(), "D3D11.CreatePixelShaderUs");
+            DAWN_TRY(CheckHRESULT(device->GetD3D11Device()->CreatePixelShader(
+                                      compiledShader[SingleShaderStage::Fragment].shaderBlob.Data(),
+                                      compiledShader[SingleShaderStage::Fragment].shaderBlob.Size(),
+                                      nullptr, &mPixelShader),
+                                  "D3D11 create pixel shader"));
+        }
     }
 
     return {};