<?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>190467</bug_id>
          
          <creation_ts>2018-10-11 06:26:35 -0700</creation_ts>
          <short_desc>Use finer grained locking in FontDatabase</short_desc>
          <delta_ts>2018-10-11 11:40:27 -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>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1468012</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-11 06:26:35 -0700</bug_when>
    <thetext>Constructing a font can take a significant amount of time. We don&apos;t need to hold the lock during that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468015</commentid>
    <comment_count>1</comment_count>
      <attachid>352038</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-11 06:32:49 -0700</bug_when>
    <thetext>Created attachment 352038
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468058</commentid>
    <comment_count>2</comment_count>
      <attachid>352038</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-11 09:40:02 -0700</bug_when>
    <thetext>Comment on attachment 352038
patch

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

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:-893
&gt; -        std::lock_guard&lt;Lock&gt; locker(m_descriptorMapLock);
&gt; -
&gt;          auto folded = familyName.foldCase();
&gt; -        return m_familyNameToFontDescriptors.ensure(folded, [&amp;] {

Wouldn&apos;t moving the lock_guard to after the call to foldCase have the same result?  we could leave the call to ensure as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468086</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-11 11:12:05 -0700</bug_when>
    <thetext>&gt; Wouldn&apos;t moving the lock_guard to after the call to foldCase have the same
&gt; result?  we could leave the call to ensure as it is.

No, the lock needs to be free during the CTFont stuff, that&apos;s the slow part (but inherently thread safe). 

We lookup the cache with the lock held. If we don&apos;t find anything we free the lock and do the CTFont dance. Then we retake the lock to add it to the cache (which might not do anything because other thread might have already added this font).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468095</commentid>
    <comment_count>4</comment_count>
      <attachid>352038</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-11 11:39:12 -0700</bug_when>
    <thetext>Comment on attachment 352038
patch

Clearing flags on attachment: 352038

Committed r237040: &lt;https://trac.webkit.org/changeset/237040&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468096</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-11 11:39:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468098</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-11 11:40:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/45199971&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352038</attachid>
            <date>2018-10-11 06:32:49 -0700</date>
            <delta_ts>2018-10-11 11:39:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdatabase-locking-finegrained.patch</filename>
            <type>text/plain</type>
            <size>4603</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNzAzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE4LTEwLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgZmluZXIgZ3JhaW5lZCBs
b2NraW5nIGluIEZvbnREYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkwNDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKworICAgICAg
ICBBbHNvIHVzZSBMaXN0SGFzaFNldCBmb3IgcHJld2FybWluZyBpbmZvIHNvIHdlIGNhbiBwcmV3
YXJtIGluIHRoZSBzYW1lIG9yZGVyIHRoZSBmb250cyB3ZXJlCisgICAgICAgIHNlZW4gbGFzdCB0
aW1lLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpjb2xsZWN0aW9uRm9yRmFt
aWx5KToKKworICAgICAgICBPbmx5IGhvbGQgdGhlIGxvY2sgd2hlbiBhY2Nlc3NpbmcgdGhlIGhh
c2htYXAuIFRoZXJlIGlzIG5vIG5lZWQgdG8gaG9sZCBpdCBkdXJpbmcgZm9udCBjb25zdHJ1Y3Rp
b24KKyAgICAgICAgd2hpY2ggY2FuIHRha2UgYSBsb25nIHRpbWUuCisKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREYXRhYmFzZTo6Zm9udEZvclBvc3RTY3JpcHROYW1lKToKKworICAgICAgICBUaGlz
IGlzIGN1cnJlbnRseSBub3QgcHJld2FybWVkIGZyb20gYSB0aHJlYWQgc28gbm8gbmVlZCBmb3Ig
bG9ja2luZy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGFiYXNlOjpjbGVhcik6CisKIDIw
MTgtMTAtMTEgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbR1N0cmVhbWVyXVtNU0VdIEZpeCBoZWlnaHQgY2FsY3VsYXRpb24gZm9yIHN0
cmVhbXMgd2l0aCBzb3VyY2UgYXNwZWN0IHJhdGlvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMjM3MDMwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgpAQCAtMjY0LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9y
UHJld2FybWluZzsKKyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJl
d2FybWluZzsKICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKIAogICAgIGZy
aWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCShyZXZpc2lvbiAyMzcwMzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Nywx
MCArODg3LDE1IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3RhbGxlZEZvbnRGYW1pbHkmIGNv
bGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2NyaXB0b3JNYXBMb2NrKTsKLQog
ICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENhc2UoKTsKLSAgICAgICAgcmV0
dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQsIFsmXSB7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9mYW1p
bHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrKTsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBtX2Zh
bWlseU5hbWVUb0ZvbnREZXNjcmlwdG9ycy5maW5kKGZvbGRlZCk7CisgICAgICAgICAgICBpZiAo
aXQgIT0gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5kKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaW5zdGFsbGVk
Rm9udEZhbWlseSA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBm
b2xkZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7CiAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShhdHRyaWJ1dGVzLmdl
dCgpLCBrQ1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZSwgZmFtaWx5TmFtZVN0cmluZy5nZXQoKSk7
CkBAIC05MDgsMTMgKzkxMywxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3RhbGxlZEZvbnRGYW1pbHkoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBJbnN0YWxsZWRGb250RmFtaWx5KCk7Ci0gICAgICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgfSgpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrZXIobV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrKTsKKyAgICAgICAgcmV0dXJu
IG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmFkZChmb2xkZWQuaXNvbGF0ZWRDb3B5KCks
IGluc3RhbGxlZEZvbnRGYW1pbHkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAKICAgICBjb25z
dCBJbnN0YWxsZWRGb250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBwb3N0U2NyaXB0TmFtZSkKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrZXIobV9kZXNjcmlwdG9yTWFwTG9jayk7Ci0KICAgICAgICAgY29uc3QgYXV0byYgZm9sZGVk
ID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0TmFt
ZSk7CiAgICAgICAgIHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5z
dXJlKGZvbGRlZCwgWyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcg
PSBmb2xkZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkzNiw5ICs5NDIsMTAgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9ja2VyKG1fZGVzY3JpcHRvck1hcExvY2spOwotCi0gICAgICAgIG1fZmFtaWx5TmFtZVRvRm9u
dERlc2NyaXB0b3JzLmNsZWFyKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrZXIobV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnNMb2NrKTsKKyAg
ICAgICAgICAgIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFyKCk7CisgICAgICAg
IH0KICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFyKCk7CiAg
ICAgfQogCkBAIC05NTAsNyArOTU3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAg
TG9jayBtX2Rlc2NyaXB0b3JNYXBMb2NrOworICAgIExvY2sgbV9mYW1pbHlOYW1lVG9Gb250RGVz
Y3JpcHRvcnNMb2NrOwogICAgIEhhc2hNYXA8U3RyaW5nLCBJbnN0YWxsZWRGb250RmFtaWx5PiBt
X2ZhbWlseU5hbWVUb0ZvbnREZXNjcmlwdG9yczsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zdGFs
bGVkRm9udD4gbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzOwogICAgIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzIG1fYWxsb3dVc2VySW5zdGFsbGVkRm9udHM7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>