<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>223713</bug_id>
          
          <creation_ts>2021-03-24 14:36:59 -0700</creation_ts>
          <short_desc>Preload graphics drivers on a background thread instead of the main thread</short_desc>
          <delta_ts>2021-03-25 08:02:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215183</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=223715</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=223717</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>nham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1743552</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 14:36:59 -0700</bug_when>
    <thetext>Preload graphics drivers on a background thread instead of the main thread. We have evidence of prewarmGlobally() hanging the main thread so we should do pre-warming off the main thread whenever possible.
r265418 introduced this graphics loader preloading and an earlier version of this patch was simply calling MTLCopyAllDevices() on a background queue. However, that patch was updated before landing to do the work on the main thread.
I think we should go back to the earlier iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743554</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-24 14:37:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/75804953&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743555</commentid>
    <comment_count>2</comment_count>
      <attachid>424186</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 14:39:11 -0700</bug_when>
    <thetext>Created attachment 424186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743568</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-03-24 15:15:35 -0700</bug_when>
    <thetext>Seems fine to do it this way -- but do we know why MTLCopyAllDevices() hangs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743570</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 15:24:35 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #3)
&gt; Seems fine to do it this way -- but do we know why MTLCopyAllDevices() hangs?

If you look at the radar, there is no evidence of any hang inside MTLCopyAllDevices() per say. It just looks like prewarmGlobally() can be slow under some circumstances (often in a different place inside prewarmGlobally, not necessarily Metal) and we get a report of main thread hang.

I have zero evidence of an issue with Metal per say but I am looking for work inside prewarmGlobally() that can be moved off the main thread. Metal happens for be something we can move off-thread. I plan to follow-up with other things I am able to move off the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743585</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-24 16:02:36 -0700</bug_when>
    <thetext>Committed r274982: &lt;https://commits.webkit.org/r274982&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424186.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743756</commentid>
    <comment_count>6</comment_count>
      <attachid>424186</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-03-25 06:48:01 -0700</bug_when>
    <thetext>Comment on attachment 424186
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424186&amp;action=review

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:49
&gt; +        MTLCopyAllDevices();

(Sorry for not knowing obj-c or the current sdks better)

Does this leak? Below we capture same call result with adoptNS
Does this compile on non-mac, non-catalyst? Below we ifdef it. My SDK fails to compile this, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743771</commentid>
    <comment_count>7</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2021-03-25 08:02:57 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #6)
&gt; Comment on attachment 424186 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424186&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:49
&gt; &gt; +        MTLCopyAllDevices();
&gt; 
&gt; (Sorry for not knowing obj-c or the current sdks better)
&gt; 
&gt; Does this leak? Below we capture same call result with adoptNS

The returned array contains references to MTLDevice objects that generally live for the life of the process, but that is an implementation detail that we probably shouldn&apos;t count on. (Also I don&apos;t think that is true for a GPU that is removed.) So we should probably add a release or an adoptNS here.

&gt; Does this compile on non-mac, non-catalyst? Below we ifdef it. My SDK fails
&gt; to compile this, too.

We should add the PLATFORM(MAC) here because MTLCopyAllDevices is not a public API on iOS. The issue of GPU drivers falling out of the dyld shared cache is also doesn&apos;t occur on iOS so we wouldn&apos;t want to call it as an SPI during prewarming anyway.

Here is a patch to address these issues: https://bugs.webkit.org/show_bug.cgi?id=223747</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424186</attachid>
            <date>2021-03-24 14:39:11 -0700</date>
            <delta_ts>2021-03-24 16:02:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223713-20210324143910.patch</filename>
            <type>text/plain</type>
            <size>4232</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NjgwZTA4OTdiNmQx
ODQ0NDg0Y2MxYjgyNzU1MTJlMjE3Yzg2OC4uOTk0MDIzY2Y4ZDE4ZDRjZDE0NGQxM2RlYzJjMzc2
ZDY1NjI5OTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTAzLTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUHJlbG9hZCBncmFwaGljcyBk
cml2ZXJzIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaW5zdGVhZCBvZiB0aGUgbWFpbiB0aHJlYWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzcxMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZWxvYWQg
Z3JhcGhpY3MgZHJpdmVycyBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGluc3RlYWQgb2YgdGhlIG1h
aW4gdGhyZWFkLiBXZSBoYXZlIGV2aWRlbmNlIG9mIHByZXdhcm1HbG9iYWxseSgpIGhhbmdpbmcK
KyAgICAgICAgdGhlIG1haW4gdGhyZWFkIChyZGFyOi8vNzUyNzkzODMpIHNvIHdlIHNob3VsZCBk
byBwcmUtd2FybWluZyBvZmYgdGhlIG1haW4gdGhyZWFkIHdoZW5ldmVyIHBvc3NpYmxlLgorCisg
ICAgICAgIHIyNjU0MTggaW50cm9kdWNlZCB0aGlzIGdyYXBoaWNzIGxvYWRlciBwcmVsb2FkaW5n
IGFuZCBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBwYXRjaCB3YXMgc2ltcGx5IGNhbGxpbmcg
TVRMQ29weUFsbERldmljZXMoKQorICAgICAgICBvbiBhIGJhY2tncm91bmQgcXVldWUuIEhvd2V2
ZXIsIHRoYXQgcGF0Y2ggd2FzIHVwZGF0ZWQgYmVmb3JlIGxhbmRpbmcgdG8gZG8gdGhlIHdvcmsg
b24gdGhlIG1haW4gdGhyZWFkLiBJIHRoaW5rIHdlIHNob3VsZCBnbworICAgICAgICBiYWNrIHRv
IHRoZSBlYXJsaWVyIGl0ZXJhdGlvbi4KKworICAgICAgICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdQVURldmljZTo6cHJld2FybSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZp
Y2U6OnByZXdhcm0pOgorCiAyMDIxLTAzLTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaDo5OTA6NTA6IHJ1
bnRpbWUgZXJyb3I6IHNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93OiA2NTUzNyAqIDY1NTM3IGNhbm5v
dCBiZSByZXByZXNlbnRlZCBpbiB0eXBlICdpbnQnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1Byb2Nlc3NXYXJtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUHJvY2Vzc1dh
cm1pbmcuY3BwCmluZGV4IDVhNGMxZDc1OGFmODEzZmM1YTM2NDkwYzFiNTNjYzY2NWMzMTExOGEu
LjQxMDQxOTNmNDVjYmJkZmM1ZTczMjM5ODY0YjM0MjViMjNmNjU1MzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgUHJvY2Vzc1dh
cm1pbmc6OnByZXdhcm1HbG9iYWxseSgpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShHUFVfRFJJVkVS
X1BSRVdBUk1JTkcpCi0gICAgR1BVRGV2aWNlOjp0cnlDcmVhdGUoV1RGOjpudWxsb3B0KTsKKyAg
ICBHUFVEZXZpY2U6OnByZXdhcm0oKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmgKaW5kZXggNzNkZjQ5NDBhMTk0MDcz
MThmZTA0NDQyODFkNmRmMTdiNzMxN2ZlNy4uZWI3NzFjOTJmMjZkZjNkYzdlZWYxMzY0ZWQzZDAx
YzAxZTJmMTI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVURldmljZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVEZXZpY2UuaApAQCAtNzAsNiArNzAsNyBAQCBlbnVtIGNsYXNzIEdQVUJ1ZmZlck1hcHBl
ZE9wdGlvbjsKIGNsYXNzIEdQVURldmljZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVURldmljZT4s
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVEZXZpY2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmUHRyPEdQVURldmljZT4gdHJ5Q3JlYXRlKGNvbnN0IE9wdGlvbmFsPEdQVVJlcXVlc3RBZGFw
dGVyT3B0aW9ucz4mKTsKKyAgICBzdGF0aWMgdm9pZCBwcmV3YXJtKCk7CiAKICAgICBSZWZQdHI8
R1BVQnVmZmVyPiB0cnlDcmVhdGVCdWZmZXIoY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYsIEdQ
VUJ1ZmZlck1hcHBlZE9wdGlvbiwgR1BVRXJyb3JTY29wZXMmKTsKICAgICBSZWZQdHI8R1BVVGV4
dHVyZT4gdHJ5Q3JlYXRlVGV4dHVyZShjb25zdCBHUFVUZXh0dXJlRGVzY3JpcHRvciYpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29h
L0dQVURldmljZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVURldmljZU1ldGFsLm1tCmluZGV4IGI5MzI4YTRjMmFhNTI3NmViYzIyNjhjODk5
M2M3Njc0ZjliNjVkNDMuLjAyODQyYWQ0Y2NiNGI4NDkxMTk5N2NmNWIwN2E1ZDM2YjRmMGFmZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVEZXZpY2VNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KQEAgLTQyLDYgKzQyLDE0IEBAIHN0YXRpYyBib29s
IGlzQWNjZXB0YWJsZURldmljZShpZCA8TVRMRGV2aWNlPiBkZXZpY2UpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3ZvaWQgR1BVRGV2aWNlOjpwcmV3YXJtKCkKK3sKKyAgICAvLyBDYWxsIE1UTENv
cHlBbGxEZXZpY2VzKCkgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB0byBhdm9pZCBoYW5naW5nIHRo
ZSBtYWluIHRocmVhZC4KKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1
ZXVlKDAsIDApLCBeeworICAgICAgICBNVExDb3B5QWxsRGV2aWNlcygpOworICAgIH0pOworfQor
CiBSZWZQdHI8R1BVRGV2aWNlPiBHUFVEZXZpY2U6OnRyeUNyZWF0ZShjb25zdCBPcHRpb25hbDxH
UFVSZXF1ZXN0QWRhcHRlck9wdGlvbnM+JiBvcHRpb25zKQogewogICAgIFJldGFpblB0cjxNVExE
ZXZpY2U+IGRldmljZVB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9kYXduL0dQVURldmljZURhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHAKaW5kZXggYWQ2YjZjZjdmOWZh
NzlmYmQ5MTQwMjFkMjUzZDk3MmRiNzAzNjQ0Yy4uYTdiZmIxOTA5NzIwMzFiNzVmOGVjZGE0MDk2
M2Y4ZmQ5YzA4NjBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHAKQEAgLTM1LDYgKzM1LDEwIEBA
IFJlZlB0cjxHUFVEZXZpY2U+IEdQVURldmljZTo6dHJ5Q3JlYXRlKGNvbnN0IE9wdGlvbmFsPEdQ
VVJlcXVlc3RBZGFwdGVyT3B0aW9ucz4mCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQg
R1BVRGV2aWNlOjpwcmV3YXJtKCkKK3sKK30KKwogR1BVRGV2aWNlOjpHUFVEZXZpY2UoUGxhdGZv
cm1EZXZpY2VTbWFydFB0ciYmIGRldmljZSkKICAgICA6IG1fcGxhdGZvcm1EZXZpY2UoV1RGTW92
ZShkZXZpY2UpKQogewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>