<?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>39647</bug_id>
          
          <creation_ts>2010-05-24 23:19:01 -0700</creation_ts>
          <short_desc>Big rendering performance issue with multiple font-faces which cause recalculating styles</short_desc>
          <delta_ts>2010-08-26 12:34:35 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="michael lewis">mikelikespie</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>ap</cc>
    
    <cc>hyatt</cc>
    
    <cc>jim</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230103</commentid>
    <comment_count>0</comment_count>
      <attachid>56974</attachid>
    <who name="michael lewis">mikelikespie</who>
    <bug_when>2010-05-24 23:19:01 -0700</bug_when>
    <thetext>Created attachment 56974
Testcase with slow behaviour simulated with javascript

At Scribd we&apos;ve been @font-face excessively.  Unfortunately, getting multiple fonts to load quickly has proven to be quite the challenge.

I&apos;ve narrowed it down to  to the fact that after each font-face loads, the style gets recalculated.  This even happens if you have several uri-encoded fonts in one CSS file.

The only way I&apos;ve been able to get around this (sometimes) is displaying an element with a given font-face, setting its display to none  after a little bit, and then loading the CSS in.  This makes it (sometimes) load the font when the CSS is loaded without it having to recalculate the style.

This performance issue is most apparent when looking at the Timeline  view in developer tools and is most noticeable using chrome (it recalculates the layout a bit slower than Safari it seems).

The time to recalculate the style is much more significant on Scribds&apos; website because there&apos;s toolbars, ads, and whatnot which give it more load I imagine.

I attached two files.  slowfont.html which is a repro of the performance issue.  fastfont.html is an example of the workaround (which works in chrome at least).  You&apos;ll notice in fastfont there are not N &quot;Recalculate Style&quot; events and it performs faster (even though it has 1.5 seconds worth of timeouts).

I haven&apos;t been able to figure out a reliable way to &quot;prime&quot; webkit to *quickly* load a font without it causing the layout to recalculate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230104</commentid>
    <comment_count>1</comment_count>
      <attachid>56975</attachid>
    <who name="michael lewis">mikelikespie</who>
    <bug_when>2010-05-24 23:20:19 -0700</bug_when>
    <thetext>Created attachment 56975
Example of unreliable workaround to get styles to not recalculate several times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230493</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-25 15:13:19 -0700</bug_when>
    <thetext>See also bug 36303.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230496</commentid>
    <comment_count>3</comment_count>
    <who name="michael lewis">mikelikespie</who>
    <bug_when>2010-05-25 15:16:37 -0700</bug_when>
    <thetext>Changing platform to all. (confirmed this happens in windows as well with at least with chrome).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230498</commentid>
    <comment_count>4</comment_count>
    <who name="michael lewis">mikelikespie</who>
    <bug_when>2010-05-25 15:17:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; See also bug 36303.

We came across this as well.  This is why in the example I&apos;m just setting the innerHTML to a big block of CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270029</commentid>
    <comment_count>5</comment_count>
      <attachid>65598</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-26 12:30:38 -0700</bug_when>
    <thetext>Created attachment 65598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270031</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-26 12:32:51 -0700</bug_when>
    <thetext>The attached patch will at least improve things when multiple fonts load synchronously at the same time.  However it doesn&apos;t address the more general concern that the entire document recalcs style when a font loads.  That&apos;s a pretty difficult problem to address without consuming a lot of memory (to point from the font back to the specific renderers that use it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270033</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-26 12:34:35 -0700</bug_when>
    <thetext>Fixed in r66122.  Please open a new bug if your particular use case is still slow.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56974</attachid>
            <date>2010-05-24 23:19:01 -0700</date>
            <delta_ts>2010-05-24 23:19:01 -0700</delta_ts>
            <desc>Testcase with slow behaviour simulated with javascript</desc>
            <filename>slowfont.html</filename>
            <type>text/html</type>
            <size>5012</size>
            <attacher name="michael lewis">mikelikespie</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgo8aHRtbCB4bWw6bGFuZz0nZW4nICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCc+CiAgPGhlYWQ+CiAgICA8bWV0YSAgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04JyBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIC8+IAogICAgPHN0eWxlIHR5cGU9J3Rl
eHQvY3NzJyBpZD0nZm9udF9zdHlsZXMnPgogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQgdHlwZT0n
dGV4dC9qYXZhc2NyaXB0Jz4KICAgICAgdmFyIE5VTV9GQU1JTElFUyA9IDUwMDsKCiAgICAgIHZh
ciBkYXRhVXJpID0gIjtiYXNlNjQsQUFFQUFBQU1BSUFBQXdCQVQxTXZNbGV0YTVRQUFBRE1BQUFB
WUdOdFlYRHpVUW5oQUFBQkxBQUFBSVpuWVhOd0FBQUFFQUFBQWJRQUFBQUlaMng1Wm51Myt2OEFB
QUc4QUFBR3ZHaGxZV1JtMlVNekFBQUllQUFBQURab2FHVmhCbUVITHdBQUNMQUFBQUFrYUcxMGVD
alpBQUFBQUFqVUFBQUFUR3h2WTJFQUFENmpBQUFKSUFBQUFGQnRZWGh3QUJZQVBBQUFDWEFBQUFB
Z2JtRnRaZXB5RFd3QUFBbVFBQUFCSUhCdmMzUUFBd0FBQUFBS3NBQUFBQ0J3Y21Wd2JaQ05OUUFB
Q3RBQUFBQUtBQUlDSmdHUUFBVUFBQVFjQWY4RUhBQUFCQndCL3dRY0FmOEFaZ1FjQUFBQUFBWUFB
QUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZORFFrUUFBQUFnK1A4REd2OGJBQUFER2dEbEFB
QUFBUUFBQUFBRUhBVjdBQUFBSUFBQUFBQUFBZ0FBQUFNQUFBQVVBQU1BQVFBQUFCUUFCQUJ5QUFB
QUVnQVFBQU1BQWdBZ0FDa0FNQUJCQUdVQWNRQjErUC8vL3dBQUFDQUFLQUF3QUVFQVlnQnBBSEw0
Ly8vLy8rSC8ydi9VLzhRQUFBQUEvNXdIRXdBQkFBQUFBQUFBQUFBQUNnQVFBQUFBQUFBQUFBWUFC
d0FBQUFnQUNRQUFBQUFBQ2dBTEFBd0FEUUFBQUFBQUFBQUJBQUgvL3dBUEFBRUFBQUFBQUFBQUFB
QUFBQUF4QUFFQUFBQUFBQUFBQUFBQUFBQXhBQUVBV3Y4YkFic0RHZ0FUQUFBWE1TWTFORGMyTnpZ
M013WUhCZ2NHRlJRWEk2MVRJaUZFTFdOS1BVVkVIeDg4UnVXM3dZQndiMnhKYzBONWVYUjFkcSs4
QUFIL3gvOGJBU2NER2dBVEFBQVRNUllWRkFjR0J3WUhJelkzTmpjMk5UUW5NOVJUSVNGRUxtTkpQ
RVZGSGg4OFJnTWF0OEdDYjI1dFNITkRlWGgwZFhhd3ZBQUNBRXovOHdKZkF4QUFHUUF4QUFBVE1U
UTNOamMyTnpZM05qTXlGeFlWRkFjR0J3WWpJaWNtTlJjeEZCY1dNekkzTmpjMk5UUW5KaU1pQndZ
SEJnY0dGVXdkSFNNa0ppY2xKUzFZT3pzcE1GWkNWVlk4TzFzWUlEODNMVUVoSVNBZ05DVWhJUjRx
SUJzQkFHTm1aajQ5SXlJUkVFTkNmb0orbDBzNFJFV0VHVWdvT0ROSGlvbFlWQ1VsRXhRd1JJWnpS
d0FDLytzQUFBS1dBdzBBQ1FBU0FBQWpNUUV6RXlNbklRY2pBVEV6SnlZbkJnOEJGUUd6ZVg5a0pm
N0plM0FCRi84ZUVnUWFNbjhERGZ6ejRPQUJNY1IxVFVOYzV3QUNBQ1AvOUFJK0F3MEFIQUF6QUFB
ek1STXpBelkzTmpNeUZ4WVZGQWNHQndZSEJnY0dJeUluSmljSEl6Y3hCeFFYRmpNeU56WTNOalUw
SnlZaklnY0dCd1lWSTZGZk9pNGtKU2hPTkRRVkZSNGZJU0lpSXlBM0tpb1hGbFNOQVNJaU16SXFL
aG9iSWlJeE5Dc3JIUlVERGY3b0toSVJPenR4U3o4K0tpc1pHUXdNSEI0OWErZ1NTU1lsSXlOTVN6
OUhLQ2NvS0ZRK0tnQUJBRHovOUFJa0FrSUFKd0FBSlRFWEJnY0dJeUluSmpVME56WTNOak15RnhZ
VkJ5WW5KaU1pQndZSEJoVVVGeFl6TWpjMk53R2tYeVJDUWxSYU9UZ2tKRVJEVjFrMU5GMEJIaDR4
T2lrcUdCZ2ZJQzR1S2lzWXpncHFOREk2UEd0ZFdWb3VMek0wVkFjMkhoOGxKVXRMUlVna0pTUWtT
UUFDQURmLzlBSTdBa0lBSXdBd0FBQWxNUmNHQndZaklpY21KeVkxTkRjMk56WXpNaGNXRlJRSElR
WVZGQmNXTXpJM05qY2xNU0UyTlRRbkppTWlCd1lIQWJ4ZEZFaEhaRDR6TkJzYktpdERRMDVrT3p3
SS9tWUNKQ1EwTVM4dkd2N3NBVGtCSkNRNFBUSXlHY0FLUmo0K0hCMDNPRVpkVjFjcktqOC9iQ29z
RUExUUtpa2dJVDJNRHdaSkppY3JLbFlBQWdBZkFBQUJId01OQUFVQUN3QUFFekUzTXdjakF6RVRN
d01qcWhkZUYxNkxkVjkxWHdLZmJtNzlZUUkxL2NzQUFRQWNBQUFCR3dNTkFBVUFBRE14RXpNREl4
eWdYNkJmQXczODh3QUJBQ01BQUFOb0FrSUFOZ0FBTXpFVE13YzJOell6TWhjV0Z6WTNOak15RnhZ
VkZBY0RJeE0yTlRRbkppTWlCd1lIQmdjREl4TTJOVFFuSmlNaUJ3WUhCZ2NESXlOMFh4TTFLU294
TkNNakN5b3ZMelJHSXlJTVMxOU5DaEVTSHlzc0xCZ1pFamxmVHdrU0VSc29MU3djR3hJM1h3STFY
VHdYRnh3Y01qVWJHaUVpUFJvOC9wUUJkaTBVSEJBUUdob3JLbGorN2dGK0poRWNFUkVhR2k4dlZ2
NzFBQUVBSXdBQUFqY0NRZ0FkQUFBek1STXpCelkzTmpNeUZ4WVZGQWNESXhNMk5UUW5KaU1pQndZ
SEF5TWpkVllWT0RFeE0wTW5KdzVIWDBvTEV4TWtTVGs1R3paZkFqVmlPaG9iSlNVL0gwVCtxZ0Zt
TkJrZEVSSTJOWUgrK1FBQ0FEVC85QUpFQWtJQUZRQXhBQUEzTVRRM05qTXlGeFlWRkFjR0J3WWpJ
aWNtSnlZMU56RVVGeFl6TWpjMk56WTNOamMyTlRRbkppTWlCd1lIQmdjR0ZUUmdUNEZrUGo0bkow
aEhUMEUyTlJ3Y1h5WWxPeDRlSGhvWkVoTUxFQ1ltT2kwa0pSNGREZzdXcG0xWlFFQnNZbFJVTFNz
YkhEUTBRd3BRS1NvTkRCb1pJU0VtTlRCTktpc1dGaWtxTnpjckFBRUFJd0FBQWNJQ1FnQVRBQUF6
TVJNekJ6WTNOak15RndjbUl5SUhCZzhCSXlOMVZCZ3JLU2tySFNrbkdCNHlORFFlTUZvQ05YTkJJ
QjhWV1JJNU9KUGlBQUVBS1AvMEFob0NRZ0E1QUFBM01UY1VGeFlYRmpNeU56WTFOQ2NtSnlZbkpp
Y21OVFEzTmpNeUZ4WVhCeVluSmlNaUJ3WVZGQmNXRnhZWEZoVVVCd1lIQmlNaUp5WTNMRjhORENJ
aUxUOGZJQk1UVEVzVkl4SVNOVFJmYVRZM0FsMENJU0k5TWhzYkdBOUNiUnd0R1JvME5FZGdSRVFF
d1FZcUhSMFRFeG9aSXhrV0Z5RWdEaFlkSGlaRE1EQXhNVkVHTXg0ZUZ4Y2JHeFFPSERBY0xFQXFL
Q2tZRnk4eGJRQUJBRHovOXdGWkF3TUFIUUFBSlRFSEJpTWlKeVkxTkRjVEl6Y3pQd0VITXdjakF3
WVZGQmNXTXpJM0FRRVFJaUE0SWhrTlJFc1BTeDF0SzE0UVhVQU5DZ29XSHhsT1Rna2JGU1VUUXdG
SlNvdER6a3IreHp3TEVRb0pCd0FCQUVQLzlBSlhBalVBSHdBQUpURUdJeUluSmpVME54TXpBd1lW
RkJjV016STNOamMyTnpZL0FUTURJemNCbjJScFFDZ25FVVJmU3drVEV5VW9KaVljR3hJTER6TmZk
VmNVWm5Ja0pqWWtWd0ZHL3BjdUdTQVNFUk1VSWlFdUhVcjAvY3RtQUFFSUFBQUFDQUFBQUFBQUFB
QWhDQUFBQVFBQUFBRUFBR1AzVUZGZkR6ejFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQveC84
YkNBQURHZ0FBQUFnQUFBQUJBQUFBQUFBQkFBQURHdjhiQUFBSUFBQUFBQUFEUlFBQkFBQUFBQUFB
QUFBQUFBQUFBQUFBRXdBQUFBQUJLZ0FBQVdVQUFBRmxBQUFDVlFBQUFzd0FBQUpWQUFBQ0dRQUFB
bFVBQUFEdUFBQUE3Z0FBQTM0QUFBSlZBQUFDVlFBQUFXVUFBQUlaQUFBQktnQUFBbFVBQUFnQUFB
QUFBQUFBQUFBQUR3QUFBQjRBQUFCZ0FBQUFvd0FBQVRZQUFBRjdBQUFDRkFBQUFvd0FBQU1kQUFB
RFRRQUFBMm9BQUFRT0FBQUViQUFBQlA0QUFBVkFBQUFGNlFBQUJrWUFBQWFyQUFBR3ZBQUJBQUFB
RXdBNkFBSUFBQUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBQ1dBQUVBQUFBQUFBRUFC
d0FBQUFFQUFBQUFBQUlBQndBSEFBRUFBQUFBQUFNQUJ3QU9BQUVBQUFBQUFBUUFCd0FWQUFFQUFB
QUFBQVVBQ3dBY0FBRUFBQUFBQUFZQUJ3QW5BQU1BQVFRSkFBRUFEZ0F1QUFNQUFRUUpBQUlBRGdB
OEFBTUFBUVFKQUFNQURnQktBQU1BQVFRSkFBUUFEZ0JZQUFNQUFRUUpBQVVBRmdCbUFBTUFBUVFK
QUFZQURnQjhabTl1ZERjeU9HWnZiblEzTWpobWIyNTBOekk0Wm05dWREY3lPRlpsY25OcGIyNGdN
UzR3Wm05dWREY3lPQUJtQUc4QWJnQjBBRGNBTWdBNEFHWUFid0J1QUhRQU53QXlBRGdBWmdCdkFH
NEFkQUEzQURJQU9BQm1BRzhBYmdCMEFEY0FNZ0E0QUZZQVpRQnlBSE1BYVFCdkFHNEFJQUF4QUM0
QU1BQm1BRzhBYmdCMEFEY0FNZ0E0QUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQzRBZitGc0FHTnNBV05BQUE9KSBmb3JtYXQoJ3RydWV0eXBlJykiCgogICAgICBmdW5j
dGlvbiBtYWtlRm9udEZhY2UoZm9udEZhbWlseSkgewogICAgICAgIC8vQ2hhbmdpbmcgbWltZSB0
eXBlIHRvIG1ha2UgdXJsIHVuaXF1ZSBmb3IgZWFjaCBvbmUKICAgICAgICByZXR1cm4gIkBmb250
LWZhY2Uge3NyYzogdXJsKGRhdGE6Zm9udCIgKyBmb250RmFtaWx5ICsgZGF0YVVyaSArICI7IGZv
bnQtZmFtaWx5OiAiICsgZm9udEZhbWlseSArICI7fVxuIjsKICAgICAgfQoKICAgICAgZnVuY3Rp
b24gc2V0U3R5bGVzKCkgewogICAgICAgIHZhciBzdHlsZVN0ciA9ICIiOwogICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgTlVNX0ZBTUlMSUVTOyBpKyspIHsKICAgICAgICAgIHN0eWxlU3RyICs9
IG1ha2VGb250RmFjZSgiZmYiICsgaSk7CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdmb250X3N0eWxlcycpLmlubmVySFRNTCA9IHN0eWxlU3RyOwogICAgICB9Cgog
ICAgPC9zY3JpcHQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0nY29udGVudCc+CiAg
ICA8L2Rpdj4KICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KICAgICAgdmFyIGMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpOwogICAgICAKICAgICAgdmFyIGlu
bmVySHRtbCA9ICIiOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE5VTV9GQU1JTElFUzsgaSsr
KSB7CiAgICAgICAgaW5uZXJIdG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogZmYnICsg
aSArICciPmhpPC9kaXY+JzsKICAgICAgfQoKICAgICAgYy5pbm5lckhUTUwgPSBpbm5lckh0bWw7
CgogICAgICBzZXRTdHlsZXMoKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56975</attachid>
            <date>2010-05-24 23:20:19 -0700</date>
            <delta_ts>2010-05-24 23:20:19 -0700</delta_ts>
            <desc>Example of unreliable workaround to get styles to not recalculate several times.</desc>
            <filename>fastfont.html</filename>
            <type>text/html</type>
            <size>5202</size>
            <attacher name="michael lewis">mikelikespie</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgo8aHRtbCB4bWw6bGFuZz0nZW4nICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCc+CiAgPGhlYWQ+CiAgICA8bWV0YSAgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04JyBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIC8+IAogICAgPHN0eWxlIHR5cGU9J3Rl
eHQvY3NzJyBpZD0nZm9udF9zdHlsZXMnPgogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQgdHlwZT0n
dGV4dC9qYXZhc2NyaXB0Jz4KICAgICAgdmFyIE5VTV9GQU1JTElFUyA9IDUwMDsKCiAgICAgIHZh
ciBkYXRhVXJpID0gIjtiYXNlNjQsQUFFQUFBQU1BSUFBQXdCQVQxTXZNbGV0YTVRQUFBRE1BQUFB
WUdOdFlYRHpVUW5oQUFBQkxBQUFBSVpuWVhOd0FBQUFFQUFBQWJRQUFBQUlaMng1Wm51Myt2OEFB
QUc4QUFBR3ZHaGxZV1JtMlVNekFBQUllQUFBQURab2FHVmhCbUVITHdBQUNMQUFBQUFrYUcxMGVD
alpBQUFBQUFqVUFBQUFUR3h2WTJFQUFENmpBQUFKSUFBQUFGQnRZWGh3QUJZQVBBQUFDWEFBQUFB
Z2JtRnRaZXB5RFd3QUFBbVFBQUFCSUhCdmMzUUFBd0FBQUFBS3NBQUFBQ0J3Y21Wd2JaQ05OUUFB
Q3RBQUFBQUtBQUlDSmdHUUFBVUFBQVFjQWY4RUhBQUFCQndCL3dRY0FmOEFaZ1FjQUFBQUFBWUFB
QUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZORFFrUUFBQUFnK1A4REd2OGJBQUFER2dEbEFB
QUFBUUFBQUFBRUhBVjdBQUFBSUFBQUFBQUFBZ0FBQUFNQUFBQVVBQU1BQVFBQUFCUUFCQUJ5QUFB
QUVnQVFBQU1BQWdBZ0FDa0FNQUJCQUdVQWNRQjErUC8vL3dBQUFDQUFLQUF3QUVFQVlnQnBBSEw0
Ly8vLy8rSC8ydi9VLzhRQUFBQUEvNXdIRXdBQkFBQUFBQUFBQUFBQUNnQVFBQUFBQUFBQUFBWUFC
d0FBQUFnQUNRQUFBQUFBQ2dBTEFBd0FEUUFBQUFBQUFBQUJBQUgvL3dBUEFBRUFBQUFBQUFBQUFB
QUFBQUF4QUFFQUFBQUFBQUFBQUFBQUFBQXhBQUVBV3Y4YkFic0RHZ0FUQUFBWE1TWTFORGMyTnpZ
M013WUhCZ2NHRlJRWEk2MVRJaUZFTFdOS1BVVkVIeDg4UnVXM3dZQndiMnhKYzBONWVYUjFkcSs4
QUFIL3gvOGJBU2NER2dBVEFBQVRNUllWRkFjR0J3WUhJelkzTmpjMk5UUW5NOVJUSVNGRUxtTkpQ
RVZGSGg4OFJnTWF0OEdDYjI1dFNITkRlWGgwZFhhd3ZBQUNBRXovOHdKZkF4QUFHUUF4QUFBVE1U
UTNOamMyTnpZM05qTXlGeFlWRkFjR0J3WWpJaWNtTlJjeEZCY1dNekkzTmpjMk5UUW5KaU1pQndZ
SEJnY0dGVXdkSFNNa0ppY2xKUzFZT3pzcE1GWkNWVlk4TzFzWUlEODNMVUVoSVNBZ05DVWhJUjRx
SUJzQkFHTm1aajQ5SXlJUkVFTkNmb0orbDBzNFJFV0VHVWdvT0ROSGlvbFlWQ1VsRXhRd1JJWnpS
d0FDLytzQUFBS1dBdzBBQ1FBU0FBQWpNUUV6RXlNbklRY2pBVEV6SnlZbkJnOEJGUUd6ZVg5a0pm
N0plM0FCRi84ZUVnUWFNbjhERGZ6ejRPQUJNY1IxVFVOYzV3QUNBQ1AvOUFJK0F3MEFIQUF6QUFB
ek1STXpBelkzTmpNeUZ4WVZGQWNHQndZSEJnY0dJeUluSmljSEl6Y3hCeFFYRmpNeU56WTNOalUw
SnlZaklnY0dCd1lWSTZGZk9pNGtKU2hPTkRRVkZSNGZJU0lpSXlBM0tpb1hGbFNOQVNJaU16SXFL
aG9iSWlJeE5Dc3JIUlVERGY3b0toSVJPenR4U3o4K0tpc1pHUXdNSEI0OWErZ1NTU1lsSXlOTVN6
OUhLQ2NvS0ZRK0tnQUJBRHovOUFJa0FrSUFKd0FBSlRFWEJnY0dJeUluSmpVME56WTNOak15RnhZ
VkJ5WW5KaU1pQndZSEJoVVVGeFl6TWpjMk53R2tYeVJDUWxSYU9UZ2tKRVJEVjFrMU5GMEJIaDR4
T2lrcUdCZ2ZJQzR1S2lzWXpncHFOREk2UEd0ZFdWb3VMek0wVkFjMkhoOGxKVXRMUlVna0pTUWtT
UUFDQURmLzlBSTdBa0lBSXdBd0FBQWxNUmNHQndZaklpY21KeVkxTkRjMk56WXpNaGNXRlJRSElR
WVZGQmNXTXpJM05qY2xNU0UyTlRRbkppTWlCd1lIQWJ4ZEZFaEhaRDR6TkJzYktpdERRMDVrT3p3
SS9tWUNKQ1EwTVM4dkd2N3NBVGtCSkNRNFBUSXlHY0FLUmo0K0hCMDNPRVpkVjFjcktqOC9iQ29z
RUExUUtpa2dJVDJNRHdaSkppY3JLbFlBQWdBZkFBQUJId01OQUFVQUN3QUFFekUzTXdjakF6RVRN
d01qcWhkZUYxNkxkVjkxWHdLZmJtNzlZUUkxL2NzQUFRQWNBQUFCR3dNTkFBVUFBRE14RXpNREl4
eWdYNkJmQXczODh3QUJBQ01BQUFOb0FrSUFOZ0FBTXpFVE13YzJOell6TWhjV0Z6WTNOak15RnhZ
VkZBY0RJeE0yTlRRbkppTWlCd1lIQmdjREl4TTJOVFFuSmlNaUJ3WUhCZ2NESXlOMFh4TTFLU294
TkNNakN5b3ZMelJHSXlJTVMxOU5DaEVTSHlzc0xCZ1pFamxmVHdrU0VSc29MU3djR3hJM1h3STFY
VHdYRnh3Y01qVWJHaUVpUFJvOC9wUUJkaTBVSEJBUUdob3JLbGorN2dGK0poRWNFUkVhR2k4dlZ2
NzFBQUVBSXdBQUFqY0NRZ0FkQUFBek1STXpCelkzTmpNeUZ4WVZGQWNESXhNMk5UUW5KaU1pQndZ
SEF5TWpkVllWT0RFeE0wTW5KdzVIWDBvTEV4TWtTVGs1R3paZkFqVmlPaG9iSlNVL0gwVCtxZ0Zt
TkJrZEVSSTJOWUgrK1FBQ0FEVC85QUpFQWtJQUZRQXhBQUEzTVRRM05qTXlGeFlWRkFjR0J3WWpJ
aWNtSnlZMU56RVVGeFl6TWpjMk56WTNOamMyTlRRbkppTWlCd1lIQmdjR0ZUUmdUNEZrUGo0bkow
aEhUMEUyTlJ3Y1h5WWxPeDRlSGhvWkVoTUxFQ1ltT2kwa0pSNGREZzdXcG0xWlFFQnNZbFJVTFNz
YkhEUTBRd3BRS1NvTkRCb1pJU0VtTlRCTktpc1dGaWtxTnpjckFBRUFJd0FBQWNJQ1FnQVRBQUF6
TVJNekJ6WTNOak15RndjbUl5SUhCZzhCSXlOMVZCZ3JLU2tySFNrbkdCNHlORFFlTUZvQ05YTkJJ
QjhWV1JJNU9KUGlBQUVBS1AvMEFob0NRZ0E1QUFBM01UY1VGeFlYRmpNeU56WTFOQ2NtSnlZbkpp
Y21OVFEzTmpNeUZ4WVhCeVluSmlNaUJ3WVZGQmNXRnhZWEZoVVVCd1lIQmlNaUp5WTNMRjhORENJ
aUxUOGZJQk1UVEVzVkl4SVNOVFJmYVRZM0FsMENJU0k5TWhzYkdBOUNiUnd0R1JvME5FZGdSRVFF
d1FZcUhSMFRFeG9aSXhrV0Z5RWdEaFlkSGlaRE1EQXhNVkVHTXg0ZUZ4Y2JHeFFPSERBY0xFQXFL
Q2tZRnk4eGJRQUJBRHovOXdGWkF3TUFIUUFBSlRFSEJpTWlKeVkxTkRjVEl6Y3pQd0VITXdjakF3
WVZGQmNXTXpJM0FRRVFJaUE0SWhrTlJFc1BTeDF0SzE0UVhVQU5DZ29XSHhsT1Rna2JGU1VUUXdG
SlNvdER6a3IreHp3TEVRb0pCd0FCQUVQLzlBSlhBalVBSHdBQUpURUdJeUluSmpVME54TXpBd1lW
RkJjV016STNOamMyTnpZL0FUTURJemNCbjJScFFDZ25FVVJmU3drVEV5VW9KaVljR3hJTER6TmZk
VmNVWm5Ja0pqWWtWd0ZHL3BjdUdTQVNFUk1VSWlFdUhVcjAvY3RtQUFFSUFBQUFDQUFBQUFBQUFB
QWhDQUFBQVFBQUFBRUFBR1AzVUZGZkR6ejFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUQveC84
YkNBQURHZ0FBQUFnQUFBQUJBQUFBQUFBQkFBQURHdjhiQUFBSUFBQUFBQUFEUlFBQkFBQUFBQUFB
QUFBQUFBQUFBQUFBRXdBQUFBQUJLZ0FBQVdVQUFBRmxBQUFDVlFBQUFzd0FBQUpWQUFBQ0dRQUFB
bFVBQUFEdUFBQUE3Z0FBQTM0QUFBSlZBQUFDVlFBQUFXVUFBQUlaQUFBQktnQUFBbFVBQUFnQUFB
QUFBQUFBQUFBQUR3QUFBQjRBQUFCZ0FBQUFvd0FBQVRZQUFBRjdBQUFDRkFBQUFvd0FBQU1kQUFB
RFRRQUFBMm9BQUFRT0FBQUViQUFBQlA0QUFBVkFBQUFGNlFBQUJrWUFBQWFyQUFBR3ZBQUJBQUFB
RXdBNkFBSUFBQUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBQ1dBQUVBQUFBQUFBRUFC
d0FBQUFFQUFBQUFBQUlBQndBSEFBRUFBQUFBQUFNQUJ3QU9BQUVBQUFBQUFBUUFCd0FWQUFFQUFB
QUFBQVVBQ3dBY0FBRUFBQUFBQUFZQUJ3QW5BQU1BQVFRSkFBRUFEZ0F1QUFNQUFRUUpBQUlBRGdB
OEFBTUFBUVFKQUFNQURnQktBQU1BQVFRSkFBUUFEZ0JZQUFNQUFRUUpBQVVBRmdCbUFBTUFBUVFK
QUFZQURnQjhabTl1ZERjeU9HWnZiblEzTWpobWIyNTBOekk0Wm05dWREY3lPRlpsY25OcGIyNGdN
UzR3Wm05dWREY3lPQUJtQUc4QWJnQjBBRGNBTWdBNEFHWUFid0J1QUhRQU53QXlBRGdBWmdCdkFH
NEFkQUEzQURJQU9BQm1BRzhBYmdCMEFEY0FNZ0E0QUZZQVpRQnlBSE1BYVFCdkFHNEFJQUF4QUM0
QU1BQm1BRzhBYmdCMEFEY0FNZ0E0QUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
QUFBQUFBQzRBZitGc0FHTnNBV05BQUE9KSBmb3JtYXQoJ3RydWV0eXBlJykiCgogICAgICBmdW5j
dGlvbiBtYWtlRm9udEZhY2UoZm9udEZhbWlseSkgewogICAgICAgIC8vQ2hhbmdpbmcgbWltZSB0
eXBlIHRvIG1ha2UgdXJsIHVuaXF1ZSBmb3IgZWFjaCBvbmUKICAgICAgICByZXR1cm4gIkBmb250
LWZhY2Uge3NyYzogdXJsKGRhdGE6Zm9udCIgKyBmb250RmFtaWx5ICsgZGF0YVVyaSArICI7IGZv
bnQtZmFtaWx5OiAiICsgZm9udEZhbWlseSArICI7fVxuIjsKICAgICAgfQoKICAgICAgZnVuY3Rp
b24gc2V0U3R5bGVzKCkgewogICAgICAgIHZhciBzdHlsZVN0ciA9ICIiOwogICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgTlVNX0ZBTUlMSUVTOyBpKyspIHsKICAgICAgICAgIHN0eWxlU3RyICs9
IG1ha2VGb250RmFjZSgiZmYiICsgaSk7CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdmb250X3N0eWxlcycpLmlubmVySFRNTCA9IHN0eWxlU3RyOwogICAgICB9Cgog
ICAgPC9zY3JpcHQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0nY29udGVudCc+CiAg
ICA8L2Rpdj4KICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KICAgICAgdmFyIGMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudCcpOwogICAgICAKICAgICAgdmFyIGlu
bmVySHRtbCA9ICIiOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE5VTV9GQU1JTElFUzsgaSsr
KSB7CiAgICAgICAgaW5uZXJIdG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LWZhbWlseTogZmYnICsg
aSArICciPmhpPC9kaXY+JzsKICAgICAgfQogICAgICBjLmlubmVySFRNTCA9IGlubmVySHRtbDsK
CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBjLnN0eWxlLmRp
c3BsYXkgPSAnbm9uZSc7CiAgICAgICAgc2V0U3R5bGVzKCk7CiAgICAgICAgd2luZG93LnNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgYy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK
ICAgICAgICB9LCA1MDApOwogICAgICB9LCA1MDApOwogICAgICAKICAgIDwvc2NyaXB0PgogIDwv
Ym9keT4KPC9odG1sPgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65598</attachid>
            <date>2010-08-26 12:30:38 -0700</date>
            <delta_ts>2010-08-26 12:32:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3154</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDgtMjYgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTY0NywgZm9udCBmYWNlIGxvYWRz
IGRvIGEgc3luY2hyb25vdXMgcmVjYWxjU3R5bGUoRm9yY2UpCisgICAgICAgIG9uIHRoZSB3aG9s
ZSBkb2N1bWVudC4gIENoYW5nZSB0aGVzZSBjYWxscyB0byBkbyBhc3luYyByZWNhbGNTdHlsZXMg
aW5zdGVhZC4KKworICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2NoZWR1bGVGb3JjZWRT
dHlsZVJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVTZWxlY3RvckNo
YW5nZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorCiAyMDEwLTA4LTI2ICBYYW4gTG9w
ZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9i
aW5zb24uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDY2MTEzKQorKysg
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDE2
ICszNTYsMTQgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkZWQoKQogewogICAgIGlm
ICghbV9kb2N1bWVudCB8fCBtX2RvY3VtZW50LT5pblBhZ2VDYWNoZSgpIHx8ICFtX2RvY3VtZW50
LT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kb2N1bWVudC0+cmVjYWxjU3R5
bGUoRG9jdW1lbnQ6OkZvcmNlKTsKLSAgICBtX2RvY3VtZW50LT5yZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBtX2RvY3VtZW50LT5zY2hlZHVsZUZv
cmNlZFN0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpmb250Q2FjaGVJ
bnZhbGlkYXRlZCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50IHx8IG1fZG9jdW1lbnQtPmluUGFn
ZUNhY2hlKCkgfHwgIW1fZG9jdW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX2RvY3VtZW50LT5yZWNhbGNTdHlsZShEb2N1bWVudDo6Rm9yY2UpOwotICAgIG1fZG9jdW1l
bnQtPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAg
IG1fZG9jdW1lbnQtPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKIH0KIAogc3RhdGljIEZv
bnREYXRhKiBmb250RGF0YUZvckdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHlOYW1lKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjYxMTUpCisrKyBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjAsNiArMTM2MCwxMiBAQCBQYXNz
UmVmUHRyPFRyZWVXYWxrZXI+IERvY3VtZW50OjpjcmVhdGVUCiAgICAgcmV0dXJuIFRyZWVXYWxr
ZXI6OmNyZWF0ZShyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIsIGV4cGFuZEVudGl0eVJlZmVyZW5j
ZXMpOwogfQogCit2b2lkIERvY3VtZW50OjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCkKK3sK
KyAgICBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZvcmNlID0gdHJ1ZTsKKyAgICBzY2hlZHVs
ZVN0eWxlUmVjYWxjKCk7Cit9CisKIHZvaWQgRG9jdW1lbnQ6OnNjaGVkdWxlU3R5bGVSZWNhbGMo
KQogewogICAgIGlmIChtX3N0eWxlUmVjYWxjVGltZXIuaXNBY3RpdmUoKSB8fCBpblBhZ2VDYWNo
ZSgpKQpAQCAtMjczNCw4ICsyNzQwLDcgQEAgdm9pZCBEb2N1bWVudDo6c3R5bGVTZWxlY3RvckNo
YW5nZWQoU3R5bAogICAgIHJlY2FsY1N0eWxlU2VsZWN0b3IoKTsKICAgICAKICAgICBpZiAodXBk
YXRlRmxhZyA9PSBEZWZlclJlY2FsY1N0eWxlKSB7Ci0gICAgICAgIG1fcGVuZGluZ1N0eWxlUmVj
YWxjU2hvdWxkRm9yY2UgPSB0cnVlOwotICAgICAgICBzY2hlZHVsZVN0eWxlUmVjYWxjKCk7Cisg
ICAgICAgIHNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNjYxMTUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDEsNiArNjQxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0Q1NTVGFyZ2V0KEVsZW1lbnQqKTsKICAgICBFbGVtZW50KiBjc3NUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX2Nzc1RhcmdldDsgfQogICAgIAorICAgIHZvaWQgc2NoZWR1bGVGb3JjZWRT
dHlsZVJlY2FsYygpOwogICAgIHZvaWQgc2NoZWR1bGVTdHlsZVJlY2FsYygpOwogICAgIHZvaWQg
dW5zY2hlZHVsZVN0eWxlUmVjYWxjKCk7CiAgICAgdm9pZCBzdHlsZVJlY2FsY1RpbWVyRmlyZWQo
VGltZXI8RG9jdW1lbnQ+Kik7Cg==
</data>
<flag name="review"
          id="54415"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>