<?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>65688</bug_id>
          
          <creation_ts>2011-08-04 08:18:54 -0700</creation_ts>
          <short_desc>[Chromium] Reduce memory consumption of HarfbuzzFace</short_desc>
          <delta_ts>2011-08-04 15:53:56 -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>Platform</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>behdad</cc>
    
    <cc>evan</cc>
    
    <cc>satish</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>446505</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 08:18:54 -0700</bug_when>
    <thetext>We can eliminate multiple allocation of HB_FontRec for the same uniqueID by introducing a cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446509</commentid>
    <comment_count>1</comment_count>
      <attachid>102918</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 08:29:56 -0700</bug_when>
    <thetext>Created attachment 102918
Patch V0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446521</commentid>
    <comment_count>2</comment_count>
      <attachid>102918</attachid>
    <who name="Evan Martin">evan</who>
    <bug_when>2011-08-04 08:45:25 -0700</bug_when>
    <thetext>Comment on attachment 102918
Patch V0

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

I don&apos;t understand the font code well enough to know if this is a good idea.
Some questions, at least:

- is the memory use of HarfbuzzFace a problem you&apos;ve measured?
- why aren&apos;t higher-level caches in WebKit over fonts caching this as well?
- since the cache appears to be refcounting, it doesn&apos;t seem like the FIXME to limit its size is needed; it will only ever be as large as the number of HarfbuzzFaces needed

&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp:257
&gt; +    if (result.get()-&gt;second.second) {

Shouldn&apos;t this test == 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446529</commentid>
    <comment_count>3</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 08:58:56 -0700</bug_when>
    <thetext>Hi Evan,

Thank you for your prompt response.

(In reply to comment #2)
&gt; - is the memory use of HarfbuzzFace a problem you&apos;ve measured?

Not me, but other guys measured a large memory consumption on HarfbuzzFace.

&gt; - why aren&apos;t higher-level caches in WebKit over fonts caching this as well?

Actually, WebKit has a font caching mechanism (Source/WebCore/platform/graphics/FontCache.{h,cpp}. 
The problem is the current implementation could call HB_NewFace() for the same uniqueID because HarfbuzzFace belongs to FontPlatformData and instances of FontPlatformData could have the same uniqueID of Skia font face.

&gt; - since the cache appears to be refcounting, it doesn&apos;t seem like the FIXME to limit its size is needed; it will only ever be as large as the number of HarfbuzzFaces needed

Certainly.  I&apos;ll remove the comment.

&gt; &gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp:257
&gt; &gt; +    if (result.get()-&gt;second.second) {
&gt; 
&gt; Shouldn&apos;t this test == 0?

check-webkit-style complained: &quot;Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446553</commentid>
    <comment_count>4</comment_count>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-08-04 09:28:04 -0700</bug_when>
    <thetext>I have measured memory usage of this code. One of my test sites was kapook.com and I saw 10 copies of the same font being created, each one taking 4M of memory. This patch would be a welcome addition to reduce such memory usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446556</commentid>
    <comment_count>5</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2011-08-04 09:31:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; - why aren&apos;t higher-level caches in WebKit over fonts caching this as well?
&gt; 
&gt; Actually, WebKit has a font caching mechanism (Source/WebCore/platform/graphics/FontCache.{h,cpp}. 
&gt; The problem is the current implementation could call HB_NewFace() for the same uniqueID because HarfbuzzFace belongs to FontPlatformData and instances of FontPlatformData could have the same uniqueID of Skia font face.

Is it a bug that we can have more than one FontPlatformData for the same uniqueID?  (Another way of phrasing my question: why isn&apos;t this a problem on Windows?)

&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp:257
&gt; &gt; &gt; +    if (result.get()-&gt;second.second) {
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this test == 0?
&gt; 
&gt; check-webkit-style complained: &quot;Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]&quot;.

Well, then, at least something like:
  if (!result.get()-&gt;second.second) {
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446557</commentid>
    <comment_count>6</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2011-08-04 09:32:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I have measured memory usage of this code. One of my test sites was kapook.com and I saw 10 copies of the same font being created, each one taking 4M of memory. This patch would be a welcome addition to reduce such memory usage.

Don&apos;t get me wrong -- I understand what the patch is accomplishing; I just don&apos;t want to be quick to jump to the wrong fix.  WebKit has many layers of caches like these and each one makes the app less predictable and consumes memory on top of the others.  (It is likely that bashi&apos;s patch is correct, I just want to be sure.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446571</commentid>
    <comment_count>7</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 09:48:26 -0700</bug_when>
    <thetext>Hi Evan,

Your concerns are definitely reasonable.

(In reply to comment #5)
&gt; Is it a bug that we can have more than one FontPlatformData for the same uniqueID?  (Another way of phrasing my question: why isn&apos;t this a problem on Windows?)

It&apos;s not a bug.  Multiple FontPlatformData could have the same (Skia&apos;s) uniqueID.  For instance, the uniqueID could be the same for fonts which have the same font-family and different font-size.

I&apos;m not sure there is the same problem on Windows since I don&apos;t know well enough Windows port.

&gt; Well, then, at least something like:
&gt;   if (!result.get()-&gt;second.second) {
&gt; ?

Oh, how stupid I am. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446576</commentid>
    <comment_count>8</comment_count>
    <who name="Satish Sampath">satish</who>
    <bug_when>2011-08-04 09:50:52 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; &gt; - why aren&apos;t higher-level caches in WebKit over fonts caching this as well?
&gt; &gt; 
&gt; &gt; Actually, WebKit has a font caching mechanism (Source/WebCore/platform/graphics/FontCache.{h,cpp}. 
&gt; &gt; The problem is the current implementation could call HB_NewFace() for the same uniqueID because HarfbuzzFace belongs to FontPlatformData and instances of FontPlatformData could have the same uniqueID of Skia font face.
&gt; 
&gt; Is it a bug that we can have more than one FontPlatformData for the same uniqueID?  (Another way of phrasing my question: why isn&apos;t this a problem on Windows?)

When I tested on Linux I saw HB_NewFace was called multiple times for the same font there as well. My guess is that this would be the same for windows. The difference in memory usage was because the font file used was different hence memory usage was lesser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446579</commentid>
    <comment_count>9</comment_count>
      <attachid>102939</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 09:51:49 -0700</bug_when>
    <thetext>Created attachment 102939
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446661</commentid>
    <comment_count>10</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2011-08-04 11:52:48 -0700</bug_when>
    <thetext>LGTM (note: I am not a WebKit reviewer)

I&apos;m still a little confused as to why this is necessary.  I worry that there is a cache at a different layer that we are not properly using.

It looks like on Windows we use an HFONT in a similar place, but an HFONT is for a specific size, so I guess it makes sense that they don&apos;t need a cache there.  I wonder if HFONT uses a shared cache of the underlying font files inside Windows somewhere.  I think I&apos;ve convinced myself this is ok.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446671</commentid>
    <comment_count>11</comment_count>
      <attachid>102939</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-08-04 12:05:16 -0700</bug_when>
    <thetext>Comment on attachment 102939
Patch V1

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

&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp:231
&gt; +typedef HashMap&lt;unsigned int, FaceCacheEntry, WTF::IntHash&lt;unsigned int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned int&gt; &gt; HarfbuzzFaceCache;

Nit: If you use |unsigned| instead of |unsigned int|, can you drop the last 2 template parameters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446672</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-08-04 12:08:39 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 102939 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102939&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.cpp:231
&gt; &gt; +typedef HashMap&lt;unsigned int, FaceCacheEntry, WTF::IntHash&lt;unsigned int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned int&gt; &gt; HarfbuzzFaceCache;
&gt; 
&gt; Nit: If you use |unsigned| instead of |unsigned int|, can you drop the last 2 template parameters?

Nevermind, it looks like you need to override the default hash trait for unsigned int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446864</commentid>
    <comment_count>13</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-08-04 15:53:56 -0700</bug_when>
    <thetext>Committed r92425: &lt;http://trac.webkit.org/changeset/92425&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102918</attachid>
            <date>2011-08-04 08:29:56 -0700</date>
            <delta_ts>2011-08-04 09:51:44 -0700</delta_ts>
            <desc>Patch V0</desc>
            <filename>bug-65688-20110805002954.patch</filename>
            <type>text/plain</type>
            <size>4168</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIzNTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYjE2Y2ZjYjViNDkyNjgy
ZGUzNmM1ZWNmNTJjMDZhNDM0N2E0Yzk2Li41N2JlODc1YmE4NTY3MTFmY2RkMzFlZTI1NmRiZjc1
YTUzMThhOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDgtMDQgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
UmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBIYXJmYnV6ekZhY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1Njg4CisKKyAgICAgICAgQWRkcyBh
IGNhY2hlIGZvciBIQl9GYWNlUmVjIHRvIGVsaW1pbmF0ZSBtdWx0aXBsZSBhbGxvY2F0aW9uIGZv
ciB0aGUgc2FtZSBmb250LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpyZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIYXJmYnV6ekZhY2U6OkhhcmZidXp6RmFjZSk6IENhbGxzIGdldENhY2hlZEhh
cmZidXp6RmFjZSgpIGluc3RlYWQgb2YgYWxsb2NhdGluZyBIQl9GYWNlUmVjLgorICAgICAgICAo
V2ViQ29yZTo6SGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKTogQ2FsbHMgcmVsZWFzZUNhY2hl
ZEhhcmZidXp6RmFjZSgpIHRvIHJlbGVhc2UgdGhlIG9uZXJzaGlwIG9mIHRoZSBjYWNoZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaDoKKwogMjAx
MS0wOC0wMyAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIENsZWFuIHVwIHZhbHVlIGNsYW1waW5nIGluIENTU1N0eWxlU2VsZWN0b3IuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6
elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFy
ZmJ1enpTa2lhLmNwcAppbmRleCBiOTRlZDFhODlmYjdjZGVmN2FiY2UxYjdmZGY5MDI4OTYxNmY0
NTA2Li44NzUzYzFiNWUyNGIzMzIyOTcwZDQ1YWVkNWZlYzE0Y2EzYjczZjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZi
dXp6U2tpYS5jcHAKQEAgLTMxLDcgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJ3dGYvT3duQXJyYXlQdHIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgog
CiAjaW5jbHVkZSAiU2tGb250SG9zdC5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKQEAgLTIyNiwx
NCArMjI3LDQ4IEBAIEhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNl
LCBjb25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsCiAgICAgcmV0dXJuIEhCX0Vycl9P
azsKIH0KIAordHlwZWRlZiBwYWlyPEhCX0ZhY2VSZWNfKiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVu
dHJ5OwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgRmFjZUNhY2hlRW50cnksIFdURjo6
SW50SGFzaDx1bnNpZ25lZCBpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkIGludD4gPiBIYXJmYnV6ekZhY2VDYWNoZTsKK3N0YXRpYyBIYXJmYnV6ekZhY2VD
YWNoZSogZ0hhcmZidXp6RmFjZUNhY2hlID0gMDsKKworc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRD
YWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAg
IGlmICghZ0hhcmZidXp6RmFjZUNhY2hlKQorICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUgPSBu
ZXcgSGFyZmJ1enpGYWNlQ2FjaGU7CisgICAgU2tGb250SUQgdW5pcXVlSUQgPSBwbGF0Zm9ybURh
dGEtPnVuaXF1ZUlEKCk7CisgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9
IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CisgICAgaWYgKHJlc3VsdCA9PSBn
SGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgbGlt
aXQgdGhlIHNpemUgb2YgdGhlIGNhY2hlLgorICAgICAgICBGYWNlQ2FjaGVFbnRyeSBlbnRyeShI
Ql9OZXdGYWNlKHBsYXRmb3JtRGF0YSwgaGFyZmJ1enpTa2lhR2V0VGFibGUpLCAxKTsKKyAgICAg
ICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5zZXQodW5pcXVlSUQsIGVudHJ5KTsKKyAgICAgICAgcmV0
dXJuIGVudHJ5LmZpcnN0OworICAgIH0KKyAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQpOworICAgIHJldHVybiByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKK30KKworc3RhdGlj
IHZvaWQgcmVsZWFzZUNhY2hlZEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9y
bURhdGEpCit7CisgICAgU2tGb250SUQgdW5pcXVlSUQgPSBwbGF0Zm9ybURhdGEtPnVuaXF1ZUlE
KCk7CisgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGdIYXJmYnV6ekZh
Y2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBnSGFyZmJ1enpG
YWNlQ2FjaGUtPmVuZCgpKTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25k
ID4gMCk7CisgICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAgICBpZiAocmVz
dWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSB7CisgICAgICAgIEhCX0ZyZWVGYWNlKHJlc3VsdC5n
ZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAgZ0hhcmZidXp6RmFjZUNhY2hlLT5yZW1vdmUo
dW5pcXVlSUQpOworICAgIH0KK30KKwogSGFyZmJ1enpGYWNlOjpIYXJmYnV6ekZhY2UoRm9udFBs
YXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQorICAgIDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1E
YXRhKQogewotICAgIG1faGFyZmJ1enpGYWNlID0gSEJfTmV3RmFjZShwbGF0Zm9ybURhdGEsIGhh
cmZidXp6U2tpYUdldFRhYmxlKTsKKyAgICBtX2hhcmZidXp6RmFjZSA9IGdldENhY2hlZEhhcmZi
dXp6RmFjZShtX3BsYXRmb3JtRGF0YSk7CiB9CiAKIEhhcmZidXp6RmFjZTo6fkhhcmZidXp6RmFj
ZSgpCiB7Ci0gICAgSEJfRnJlZUZhY2UobV9oYXJmYnV6ekZhY2UpOworICAgIHJlbGVhc2VDYWNo
ZWRIYXJmYnV6ekZhY2UobV9wbGF0Zm9ybURhdGEpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSGFyZmJ1enpTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9IYXJmYnV6elNraWEuaAppbmRleCA5M2RjNzE4MjQwODUxNjdlMmU0ZjcxM2NiMTY2Nzk5
OWMwMDRjYTdkLi5jNzFkZWJlNzQzOGRjNzdjYzA5YTViYTQ4Njg0YTViMDlkOTNmOTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6
elNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKik7CiAKKyAgICBGb250UGxhdGZv
cm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKICAgICBIQl9GYWNlUmVjXyogbV9oYXJmYnV6ekZhY2U7
CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102939</attachid>
            <date>2011-08-04 09:51:49 -0700</date>
            <delta_ts>2011-08-04 12:05:16 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug-65688-20110805015148.patch</filename>
            <type>text/plain</type>
            <size>4116</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIzNTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYjE2Y2ZjYjViNDkyNjgy
ZGUzNmM1ZWNmNTJjMDZhNDM0N2E0Yzk2Li41N2JlODc1YmE4NTY3MTFmY2RkMzFlZTI1NmRiZjc1
YTUzMThhOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDgtMDQgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
UmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBIYXJmYnV6ekZhY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1Njg4CisKKyAgICAgICAgQWRkcyBh
IGNhY2hlIGZvciBIQl9GYWNlUmVjIHRvIGVsaW1pbmF0ZSBtdWx0aXBsZSBhbGxvY2F0aW9uIGZv
ciB0aGUgc2FtZSBmb250LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkSGFyZmJ1enpGYWNlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpyZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIYXJmYnV6ekZhY2U6OkhhcmZidXp6RmFjZSk6IENhbGxzIGdldENhY2hlZEhh
cmZidXp6RmFjZSgpIGluc3RlYWQgb2YgYWxsb2NhdGluZyBIQl9GYWNlUmVjLgorICAgICAgICAo
V2ViQ29yZTo6SGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKTogQ2FsbHMgcmVsZWFzZUNhY2hl
ZEhhcmZidXp6RmFjZSgpIHRvIHJlbGVhc2UgdGhlIG9uZXJzaGlwIG9mIHRoZSBjYWNoZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaDoKKwogMjAx
MS0wOC0wMyAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIENsZWFuIHVwIHZhbHVlIGNsYW1waW5nIGluIENTU1N0eWxlU2VsZWN0b3IuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6
elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFy
ZmJ1enpTa2lhLmNwcAppbmRleCBiOTRlZDFhODlmYjdjZGVmN2FiY2UxYjdmZGY5MDI4OTYxNmY0
NTA2Li4xZGZlY2ViY2QyZGMyY2JhZDBmNWRmZjA1YWViNzc2MGIxMmJjNzQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZi
dXp6U2tpYS5jcHAKQEAgLTMxLDcgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJ3dGYvT3duQXJyYXlQdHIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgog
CiAjaW5jbHVkZSAiU2tGb250SG9zdC5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKQEAgLTIyNiwx
NCArMjI3LDQ3IEBAIEhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNl
LCBjb25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsCiAgICAgcmV0dXJuIEhCX0Vycl9P
azsKIH0KIAordHlwZWRlZiBwYWlyPEhCX0ZhY2VSZWNfKiwgdW5zaWduZWQ+IEZhY2VDYWNoZUVu
dHJ5OwordHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgRmFjZUNhY2hlRW50cnksIFdURjo6
SW50SGFzaDx1bnNpZ25lZCBpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVuc2lnbmVkIGludD4gPiBIYXJmYnV6ekZhY2VDYWNoZTsKK3N0YXRpYyBIYXJmYnV6ekZhY2VD
YWNoZSogZ0hhcmZidXp6RmFjZUNhY2hlID0gMDsKKworc3RhdGljIEhCX0ZhY2VSZWNfKiBnZXRD
YWNoZWRIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAg
IGlmICghZ0hhcmZidXp6RmFjZUNhY2hlKQorICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUgPSBu
ZXcgSGFyZmJ1enpGYWNlQ2FjaGU7CisgICAgU2tGb250SUQgdW5pcXVlSUQgPSBwbGF0Zm9ybURh
dGEtPnVuaXF1ZUlEKCk7CisgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9
IGdIYXJmYnV6ekZhY2VDYWNoZS0+ZmluZCh1bmlxdWVJRCk7CisgICAgaWYgKHJlc3VsdCA9PSBn
SGFyZmJ1enpGYWNlQ2FjaGUtPmVuZCgpKSB7CisgICAgICAgIEZhY2VDYWNoZUVudHJ5IGVudHJ5
KEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBoYXJmYnV6elNraWFHZXRUYWJsZSksIDEpOworICAg
ICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnNldCh1bmlxdWVJRCwgZW50cnkpOworICAgICAgICBy
ZXR1cm4gZW50cnkuZmlyc3Q7CisgICAgfQorICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCk7CisgICAgcmV0dXJuIHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OworfQorCitzdGF0
aWMgdm9pZCByZWxlYXNlQ2FjaGVkSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRm
b3JtRGF0YSkKK3sKKyAgICBTa0ZvbnRJRCB1bmlxdWVJRCA9IHBsYXRmb3JtRGF0YS0+dW5pcXVl
SUQoKTsKKyAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gZ0hhcmZidXp6
RmFjZUNhY2hlLT5maW5kKHVuaXF1ZUlEKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9IGdIYXJmYnV6
ekZhY2VDYWNoZS0+ZW5kKCkpOworICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNv
bmQgPiAwKTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOworICAgIGlmICgh
KHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKKyAgICAgICAgSEJfRnJlZUZhY2UocmVz
dWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgICAgICBnSGFyZmJ1enpGYWNlQ2FjaGUtPnJl
bW92ZSh1bmlxdWVJRCk7CisgICAgfQorfQorCiBIYXJmYnV6ekZhY2U6OkhhcmZidXp6RmFjZShG
b250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX3BsYXRmb3JtRGF0YShwbGF0
Zm9ybURhdGEpCiB7Ci0gICAgbV9oYXJmYnV6ekZhY2UgPSBIQl9OZXdGYWNlKHBsYXRmb3JtRGF0
YSwgaGFyZmJ1enpTa2lhR2V0VGFibGUpOworICAgIG1faGFyZmJ1enpGYWNlID0gZ2V0Q2FjaGVk
SGFyZmJ1enpGYWNlKG1fcGxhdGZvcm1EYXRhKTsKIH0KIAogSGFyZmJ1enpGYWNlOjp+SGFyZmJ1
enpGYWNlKCkKIHsKLSAgICBIQl9GcmVlRmFjZShtX2hhcmZidXp6RmFjZSk7CisgICAgcmVsZWFz
ZUNhY2hlZEhhcmZidXp6RmFjZShtX3BsYXRmb3JtRGF0YSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9IYXJmYnV6elNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0hhcmZidXp6U2tpYS5oCmluZGV4IDkzZGM3MTgyNDA4NTE2N2UyZTRmNzEzY2Ix
NjY3OTk5YzAwNGNhN2QuLmM3MWRlYmU3NDM4ZGM3N2NjMDlhNWJhNDg2ODRhNWIwOWQ5M2Y5OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hh
cmZidXp6U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0hhcmZidXp6U2tpYS5oCkBAIC01NSw2ICs1NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgSGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqKTsKIAorICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIG1fcGxhdGZvcm1EYXRhOwogICAgIEhCX0ZhY2VSZWNfKiBtX2hhcmZidXp6
RmFjZTsKIH07CiAK
</data>
<flag name="review"
          id="98352"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>