<?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>110560</bug_id>
          
          <creation_ts>2013-02-21 23:35:41 -0800</creation_ts>
          <short_desc>Code cache size should adapt to workload</short_desc>
          <delta_ts>2013-02-22 11:17:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>839295</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-21 23:35:41 -0800</bug_when>
    <thetext>Code cache size should adapt to workload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839301</commentid>
    <comment_count>1</comment_count>
      <attachid>189699</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-21 23:40:04 -0800</bug_when>
    <thetext>Created attachment 189699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839305</commentid>
    <comment_count>2</comment_count>
      <attachid>189700</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-21 23:43:10 -0800</bug_when>
    <thetext>Created attachment 189700
microbenchmark</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839560</commentid>
    <comment_count>3</comment_count>
      <attachid>189699</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-22 07:24:33 -0800</bug_when>
    <thetext>Comment on attachment 189699
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +
&gt; +        (*) 5% PLT arithmetic mean speedup
&gt; +        (*) 10% PLT geometric mean speedup
&gt; +        (*) 3.4X microbenchmark speedup
&gt; +        (*) Reduces initial cache capacity by 16X

Nice!

How does this affect average cache capacity (say over PLT3)?

&gt; Source/JavaScriptCore/runtime/CodeCache.h:156
&gt; +        if (age &gt; m_capacity) {
&gt; +            // A requested object is older than the cache&apos;s capacity. We can
&gt; +            // infer that requested objects are subject to high eviction probability,
&gt; +            // so we grow the cache to improve our hit rate.
&gt; +            m_capacity += s_recencyBias * s_oldObjectSamplingMultiplier * key.length();

Is it plausible that some access pattern (say XHR of lots of unique scripts with occasional hits to aging cache items) could make cache grow very large without providing good hit rate? Should there be MaxCacheCapacity?

&gt; Source/JavaScriptCore/runtime/CodeCache.h:190
&gt; +    static const int64_t s_recencyBias = 4;

I would name constants without s_</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839751</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-22 11:14:01 -0800</bug_when>
    <thetext>&gt; How does this affect average cache capacity (say over PLT3)?

On PLT3, cache capacity was 16MC, and now it grows to about 25MC. PLT has a 99% cache hit rate, so I think this is reasonable.

On an site like nytimes.com, cache capacity can be around 4MC - 8MC. Navigating some nytimes.com pages, followed by wsj.com pages, followed by amazon.com pages, in a cycle, puts the cache at about 16MC. Hit rates vary from about 50%-99%, depending on the site.

Running the attached microbenchmark, you get up to about 64MC. Critically, navigating nytimes.com after running the microbenchmark, the cache shrinks back down to 4MC - 8MC after about 10-20 page loads.

* MC: million characters.

Side note: Rough measurement indicates that cached bytecode is much more compact than original text. So, it&apos;s a big optimization that the cache no longer holds onto the string key. For any resource whose text is already in the WebCore cache, adding a bytecode cache for it seems like small additional overhead with big speed gain.

&gt; &gt; Source/JavaScriptCore/runtime/CodeCache.h:156
&gt; &gt; +        if (age &gt; m_capacity) {
&gt; &gt; +            // A requested object is older than the cache&apos;s capacity. We can
&gt; &gt; +            // infer that requested objects are subject to high eviction probability,
&gt; &gt; +            // so we grow the cache to improve our hit rate.
&gt; &gt; +            m_capacity += s_recencyBias * s_oldObjectSamplingMultiplier * key.length();
&gt; 
&gt; Is it plausible that some access pattern (say XHR of lots of unique scripts with occasional hits to aging cache items) could make cache grow very large without providing good hit rate? Should there be MaxCacheCapacity?

Seems unlikely, but plausible. (The key factor that makes this unlikely is that pulling an item out of the cache updates its age. The only pattern that can trigger the bad case is a repeating cycle of 1 item, followed by hundreds of unique items, followed by that first item again. And, even though this pattern will make a cache much bigger than it needs to be, it will still have bounded space.)

I think it&apos;s worth investigating a max and, separately, investigating evicting unrepeated items first. I think I&apos;ll do that in a follow-up patch, since qualifying this patch took lots and lots of performance measurement time.

&gt; &gt; Source/JavaScriptCore/runtime/CodeCache.h:190
&gt; &gt; +    static const int64_t s_recencyBias = 4;
&gt; 
&gt; I would name constants without s_

Will fix. I&apos;ve always wondered what our style guideline was for that.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839756</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-22 11:17:40 -0800</bug_when>
    <thetext>Committed r143759: &lt;http://trac.webkit.org/changeset/143759&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189699</attachid>
            <date>2013-02-21 23:40:04 -0800</date>
            <delta_ts>2013-02-22 07:24:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110560-20130221233624.patch</filename>
            <type>text/plain</type>
            <size>5777</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDEzLTAyLTIxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQ29kZSBjYWNoZSBzaXplIHNob3VsZCBhZGFwdCB0byB3b3JrbG9hZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKCopIDUlIFBMVCBhcml0aG1ldGlj
IG1lYW4gc3BlZWR1cAorICAgICAgICAoKikgMTAlIFBMVCBnZW9tZXRyaWMgbWVhbiBzcGVlZHVw
CisgICAgICAgICgqKSAzLjRYIG1pY3JvYmVuY2htYXJrIHNwZWVkdXAKKyAgICAgICAgKCopIFJl
ZHVjZXMgaW5pdGlhbCBjYWNoZSBjYXBhY2l0eSBieSAxNlgKKworICAgICAgICAqIHJ1bnRpbWUv
Q29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpDb2RlQ2FjaGUpOiBVcGRh
dGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlLgorCisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUu
aDoKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZVZhbHVlOjpTb3VyY2VDb2RlVmFsdWUpOgorICAg
ICAgICAoU291cmNlQ29kZVZhbHVlKTogVHVybmVkIHRoZSBjYWNoZSB2YWx1ZSBpbnRvIGEgc3Ry
dWN0IHNvIGl0IGNhbiB0cmFjayBpdHMgYWdlLgorCisgICAgICAgIChDb2RlQ2FjaGVNYXApOgor
ICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OkNvZGVDYWNoZU1hcCk6CisgICAgICAgIChKU0M6
OkNvZGVDYWNoZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6c2V0KToK
KyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpjbGVhcik6CisgICAgICAgIChKU0M6OkNvZGVD
YWNoZU1hcDo6cHJ1bmVJZk5lZWRlZCk6CisgICAgICAgIChDb2RlQ2FjaGUpOiBHcm93IGFuZCBz
aHJpbmsgaW4gcmVzcG9uc2UgdG8gdXNhZ2UuCisKIDIwMTMtMDItMjEgIEplc3NpZSBCZXJsaW4g
IDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIHRoYXQgYnJva2UgdGhl
IDMyIGJpdCBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29k
ZUNhY2hlLmNwcAkocmV2aXNpb24gMTQzMzg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIENvZGVDYWNoZTo6Q29kZUNhY2hlKCkKLSAgICA6IG1fc291cmNlQ29k
ZShDYWNoZVNpemUpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCShyZXZpc2lvbiAxNDMzODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDQ3ICsxMTMsMTAwIEBA
IHN0cnVjdCBTb3VyY2VDb2RlS2V5SGFzaFRyYWl0cyA6IFNpbXBsZUMKICAgICBzdGF0aWMgYm9v
bCBpc0VtcHR5VmFsdWUoY29uc3QgU291cmNlQ29kZUtleSYgc291cmNlQ29kZUtleSkgeyByZXR1
cm4gc291cmNlQ29kZUtleS5pc051bGwoKTsgfQogfTsKIAorc3RydWN0IFNvdXJjZUNvZGVWYWx1
ZSB7CisgICAgU291cmNlQ29kZVZhbHVlKCkKKyAgICB7CisgICAgfQorCisgICAgU291cmNlQ29k
ZVZhbHVlKGNvbnN0IFN0cm9uZzxKU0NlbGw+JiBjZWxsLCBpbnQ2NF90IGFnZSkKKyAgICAgICAg
OiBjZWxsKGNlbGwpCisgICAgICAgICwgYWdlKGFnZSkKKyAgICB7CisgICAgfQorCisgICAgU3Ry
b25nPEpTQ2VsbD4gY2VsbDsKKyAgICBpbnQ2NF90IGFnZTsKK307CisKIGNsYXNzIENvZGVDYWNo
ZU1hcCB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUNvZGVLZXksIFN0cm9uZzxKU0NlbGw+
LCBTb3VyY2VDb2RlS2V5SGFzaCwgU291cmNlQ29kZUtleUhhc2hUcmFpdHM+IE1hcFR5cGU7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUNvZGVLZXksIFNvdXJjZUNvZGVWYWx1ZSwgU291cmNl
Q29kZUtleUhhc2gsIFNvdXJjZUNvZGVLZXlIYXNoVHJhaXRzPiBNYXBUeXBlOwogICAgIHR5cGVk
ZWYgTWFwVHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAKIHB1YmxpYzoKLSAgICBDb2RlQ2FjaGVN
YXAoc2l6ZV90IGNhcGFjaXR5KQorICAgIGVudW0geyBNaW5DYWNoZUNhcGFjaXR5ID0gMTAwMDAw
MCB9OyAvLyBTaXplIGluIGNoYXJhY3RlcnMKKworICAgIENvZGVDYWNoZU1hcCgpCiAgICAgICAg
IDogbV9zaXplKDApCi0gICAgICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAgICAgLCBt
X2NhcGFjaXR5KE1pbkNhY2hlQ2FwYWNpdHkpCisgICAgICAgICwgbV9hZ2UoMCkKICAgICB7CiAg
ICAgfQogCiAgICAgY29uc3QgU3Ryb25nPEpTQ2VsbD4qIGZpbmQoY29uc3QgU291cmNlQ29kZUtl
eSYga2V5KQogICAgIHsKLSAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gbV9tYXAuZmluZChrZXkp
OwotICAgICAgICBpZiAocmVzdWx0ID09IG1fbWFwLmVuZCgpKQorICAgICAgICBpdGVyYXRvciBp
dCA9IG1fbWFwLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmcmVzdWx0LT52YWx1ZTsKKworICAg
ICAgICBzaXplX3QgYWdlID0gbV9hZ2UgLSBpdC0+dmFsdWUuYWdlOworICAgICAgICBpZiAoYWdl
ID4gbV9jYXBhY2l0eSkgeworICAgICAgICAgICAgLy8gQSByZXF1ZXN0ZWQgb2JqZWN0IGlzIG9s
ZGVyIHRoYW4gdGhlIGNhY2hlJ3MgY2FwYWNpdHkuIFdlIGNhbgorICAgICAgICAgICAgLy8gaW5m
ZXIgdGhhdCByZXF1ZXN0ZWQgb2JqZWN0cyBhcmUgc3ViamVjdCB0byBoaWdoIGV2aWN0aW9uIHBy
b2JhYmlsaXR5LAorICAgICAgICAgICAgLy8gc28gd2UgZ3JvdyB0aGUgY2FjaGUgdG8gaW1wcm92
ZSBvdXIgaGl0IHJhdGUuCisgICAgICAgICAgICBtX2NhcGFjaXR5ICs9IHNfcmVjZW5jeUJpYXMg
KiBzX29sZE9iamVjdFNhbXBsaW5nTXVsdGlwbGllciAqIGtleS5sZW5ndGgoKTsKKyAgICAgICAg
fSBlbHNlIGlmIChhZ2UgPCBtX2NhcGFjaXR5IC8gMikgeworICAgICAgICAgICAgLy8gQSByZXF1
ZXN0ZWQgb2JqZWN0IGlzIG11Y2ggeW91bmdlciB0aGFuIHRoZSBjYWNoZSdzIGNhcGFjaXR5LiBX
ZSBjYW4KKyAgICAgICAgICAgIC8vIGluZmVyIHRoYXQgcmVxdWVzdGVkIG9iamVjdHMgYXJlIHN1
YmplY3QgdG8gbG93IGV2aWN0aW9uIHByb2JhYmlsaXR5LAorICAgICAgICAgICAgLy8gc28gd2Ug
c2hyaW5rIHRoZSBjYWNoZSB0byBzYXZlIG1lbW9yeS4KKyAgICAgICAgICAgIG1fY2FwYWNpdHkg
LT0gc19yZWNlbmN5QmlhcyAqIGtleS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChtX2NhcGFj
aXR5IDwgTWluQ2FjaGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBtX2NhcGFjaXR5ID0gTWlu
Q2FjaGVDYXBhY2l0eTsKKyAgICAgICAgfQorCisgICAgICAgIGl0LT52YWx1ZS5hZ2UgPSBtX2Fn
ZTsKKyAgICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOworICAgICAgICByZXR1cm4gJml0LT52
YWx1ZS5jZWxsOwogICAgIH0KIAogICAgIHZvaWQgc2V0KGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSwgY29uc3QgU3Ryb25nPEpTQ2VsbD4mIHZhbHVlKQogICAgIHsKLSAgICAgICAgd2hpbGUgKG1f
c2l6ZSA+PSBtX2NhcGFjaXR5KSB7Ci0gICAgICAgICAgICBNYXBUeXBlOjppdGVyYXRvciBpdCA9
IG1fbWFwLmJlZ2luKCk7Ci0gICAgICAgICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsK
LSAgICAgICAgICAgIG1fbWFwLnJlbW92ZShpdCk7Ci0gICAgICAgIH0KKyAgICAgICAgcHJ1bmVJ
Zk5lZWRlZCgpOwogCiAgICAgICAgIG1fc2l6ZSArPSBrZXkubGVuZ3RoKCk7Ci0gICAgICAgIG1f
bWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgbV9hZ2UgKz0ga2V5Lmxlbmd0aCgpOworICAg
ICAgICBtX21hcC5zZXQoa2V5LCBTb3VyY2VDb2RlVmFsdWUodmFsdWUsIG1fYWdlKSk7CiAgICAg
fQogCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBtX3NpemUgPSAwOworICAgICAg
ICBtX2FnZSA9IDA7CiAgICAgICAgIG1fbWFwLmNsZWFyKCk7CiAgICAgfQogCiBwcml2YXRlOgor
ICAgIC8vIFRoaXMgY29uc3RhbnQgZmFjdG9yIGJpYXNlcyBjYWNoZSBjYXBhY2l0eSB0b3dhcmQg
cmVjZW50IGFjdGl2aXR5LiBXZQorICAgIC8vIHdhbnQgdG8gYWRhcHQgdG8gY2hhbmdpbmcgd29y
a2xvYWRzLgorICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IHNfcmVjZW5jeUJpYXMgPSA0OworCisg
ICAgLy8gVGhpcyBjb25zdGFudCBmYWN0b3IgdHJlYXRzIGEgc2FtcGxlZCBldmVudCBmb3Igb25l
IG9sZCBvYmplY3QgYXMgaWYgaXQKKyAgICAvLyBoYXBwZW5lZCBmb3IgbWFueSBvbGQgb2JqZWN0
cy4gTW9zdCBvbGQgb2JqZWN0cyBhcmUgZXZpY3RlZCBiZWZvcmUgd2UgY2FuCisgICAgLy8gc2Ft
cGxlIHRoZW0sIHNvIHdlIG5lZWQgdG8gZXh0cmFwb2xhdGUgZnJvbSB0aGUgb25lcyB3ZSBkbyBz
YW1wbGUuCisgICAgc3RhdGljIGNvbnN0IGludDY0X3Qgc19vbGRPYmplY3RTYW1wbGluZ011bHRp
cGxpZXIgPSAzMjsKKworICAgIHZvaWQgcHJ1bmVJZk5lZWRlZCgpCisgICAgeworICAgICAgICB3
aGlsZSAobV9zaXplID49IG1fY2FwYWNpdHkpIHsKKyAgICAgICAgICAgIE1hcFR5cGU6Oml0ZXJh
dG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIG1fc2l6ZSAtPSBpdC0+a2V5Lmxl
bmd0aCgpOworICAgICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIE1hcFR5cGUgbV9tYXA7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9j
YXBhY2l0eTsKKyAgICBpbnQ2NF90IG1fYWdlOwogfTsKIAogLy8gQ2FjaGVzIHRvcC1sZXZlbCBj
b2RlIHN1Y2ggYXMgPHNjcmlwdD4sIGV2YWwoKSwgbmV3IEZ1bmN0aW9uLCBhbmQgSlNFdmFsdWF0
ZVNjcmlwdCgpLgpAQCAtMTc3LDggKzIzMCw2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+IAogICAgIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogZ2V0Q29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIEV4ZWN1dGFi
bGVUeXBlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyU3RyaWN0bmVzcywgRGVidWdnZXJN
b2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CiAKLSAgICBlbnVtIHsgQ2FjaGVTaXpl
ID0gMTYwMDAwMDAgfTsgLy8gU2l6ZSBpbiBjaGFyYWN0ZXJzCi0KICAgICBDb2RlQ2FjaGVNYXAg
bV9zb3VyY2VDb2RlOwogfTsKIAo=
</data>
<flag name="review"
          id="210198"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>189700</attachid>
            <date>2013-02-21 23:43:10 -0800</date>
            <delta_ts>2013-02-21 23:43:10 -0800</delta_ts>
            <desc>microbenchmark</desc>
            <filename>scratch.html</filename>
            <type>text/html</type>
            <size>681</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewoJdmFyIHJlc3VsdCA9IDA7CgoJZnVuY3Rpb24gdGVzdCgp
IHsKCQlmb3IgKHZhciBpID0gMDsgaSA8IDUwMDsgKytpKSB7CgkJCXZhciBwcm9ncmFtID0gIihm
dW5jdGlvbiBmIiArIGkgKyAiKCkge1xuIjsKCQkJZm9yICh2YXIgaiA9IDA7IGogPCAxMDAwOyAr
K2opIHsKCQkJCXByb2dyYW0gKz0gImZ1bmN0aW9uIGYiICsgaiArICIoKSB7IHJldHVybiAwICYm
IDEgJiYgMiAmJiAzICYmIDQgJiYgNSAmJiA2ICYmIDcgJiYgOCAmJiA5ICYmIDEwOyB9XG4iOwoJ
CQl9CgkJCXByb2dyYW0gKz0gIn0pKCk7XG4iOwoJCQlwcm9ncmFtICs9ICJyZXR1cm4gMDtcbiI7
CgoJCQlyZXN1bHQgKz0gbmV3IEZ1bmN0aW9uKHByb2dyYW0pKCk7CgkJfQoKCQlpZiAocmVzdWx0
ICE9IDApIHsKCQkgICAgcHJpbnQoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwoJCSAgICB0aHJv
dyAiRXJyb3IiOwoJCX0KCX0KCgkvLyBXYXJtdXAKCWZvciAodmFyIHRpbWVzID0gMDsgdGltZXMg
PCAyOyArK3RpbWVzKQoJCXRlc3QoKTsKCgkvLyBDYWNoZSBlZmZlY3RpdmVuZXNzCgl2YXIgc3Rh
cnQgPSBuZXcgRGF0ZTsKCXRlc3QoKTsKCXZhciBlbmQgPSBuZXcgRGF0ZTsKCWRvY3VtZW50Lndy
aXRlKCI8cD4iICsgKGVuZCAtIHN0YXJ0KSArICI8XC9wPiIpOwp9KSgpOwo8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>