<?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>89865</bug_id>
          
          <creation_ts>2012-06-25 04:07:15 -0700</creation_ts>
          <short_desc>[Qt] Avoid a deep copy of QImage in GraphicsContext3D::getImageData.</short_desc>
          <delta_ts>2012-06-25 19:29:14 -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>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>0</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656466</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-06-25 04:07:15 -0700</bug_when>
    <thetext>[Qt] Avoid a deep copy of QImage in GraphicsContext3D::getImageData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656467</commentid>
    <comment_count>1</comment_count>
      <attachid>149270</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-06-25 04:10:25 -0700</bug_when>
    <thetext>Created attachment 149270
patch

This patch follows BitmapTextureGL::updateContents.

void BitmapTextureGL::updateContents(Image* image, const IntRect&amp; targetRect, const IntPoint&amp; offset)
{
    if (!image)
        return;
    NativeImagePtr frameImage = image-&gt;nativeImageForCurrentFrame();
    if (!frameImage)
        return;

    int bytesPerLine;
    const char* imageData;

#if PLATFORM(QT)
    QImage qtImage;
#if HAVE(QT5)
    // With QPA, we can avoid a deep copy.
    qtImage = *frameImage-&gt;handle()-&gt;buffer();
#else
    // This might be a deep copy, depending on other references to the pixmap.
    qtImage = frameImage-&gt;toImage();
#endif
    imageData = reinterpret_cast&lt;const char*&gt;(qtImage.constBits());
    bytesPerLine = qtImage.bytesPerLine();
#elif USE(CAIRO)
    cairo_surface_t* surface = frameImage-&gt;surface();
    imageData = reinterpret_cast&lt;const char*&gt;(cairo_image_surface_get_data(surface));
    bytesPerLine = cairo_image_surface_get_stride(surface);
#endif

    updateContents(imageData, targetRect, offset, bytesPerLine);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656803</commentid>
    <comment_count>2</comment_count>
      <attachid>149270</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 13:06:47 -0700</bug_when>
    <thetext>Comment on attachment 149270
patch

While we&apos;re at it, we should convert the format to Format_ARGB32_Premultiplied if premultiplied is requested, instead of changing to ARGB32 and then premultiplying as an additional step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657050</commentid>
    <comment_count>3</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-06-25 17:22:34 -0700</bug_when>
    <thetext>Would you mind explain more detail? I don&apos;t fully understand.

As I understand, you means the two code stubs are different?

1. Original
nativeImage = nativePixmap-&gt;toImage().convertToFormat(QImage::Format_ARGB32);

2. Changed (For Qt4)
QImage qtImage;
qtImage = nativePixmap-&gt;toImage();
nativeImage = qtImage.convertToFormat(QImage::Format_ARGB32);


If the two is different and original stub is correct, can I change like this?

-        nativeImage = nativePixmap-&gt;toImage().convertToFormat(QImage::Format_ARGB32);
+#if HAVE(QT5)
+        // With QPA, we can avoid a deep copy.
+        nativeImage = nativePixmap-&gt;handle()-&gt;buffer()-&gt;convertToFormat(QImage::Format_ARGB32);
+#else
+        // This might be a deep copy, depending on other references to the pixmap.
+        nativeImage = nativePixmap-&gt;toImage().convertToFormat(QImage::Format_ARGB32);
+#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657107</commentid>
    <comment_count>4</comment_count>
      <attachid>149270</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 18:16:01 -0700</bug_when>
    <thetext>Comment on attachment 149270
patch

There is an additional optimization to do, but we should do it in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657130</commentid>
    <comment_count>5</comment_count>
      <attachid>149270</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 18:30:35 -0700</bug_when>
    <thetext>Comment on attachment 149270
patch

Clearing flags on attachment: 149270

Committed r121209: &lt;http://trac.webkit.org/changeset/121209&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657131</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 18:30:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657186</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 19:29:14 -0700</bug_when>
    <thetext>Created a new bug for the proposed additional optimization, https://bugs.webkit.org/show_bug.cgi?id=89937</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149270</attachid>
            <date>2012-06-25 04:10:25 -0700</date>
            <delta_ts>2012-06-25 18:30:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Qt-Avoid-a-deep-copy-of-QImage-in-GraphicsContext3D-.patch</filename>
            <type>text/plain</type>
            <size>2505</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAxZjkyOGRjMWI3NTYxZTQ0NWZiOWE5MTBkMGM0MWI5NWM3MmM5NjcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IE1vbiwgMjUgSnVuIDIwMTIgMTk6MDk6MTcgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBbUXRdIEF2b2lkIGEgZGVlcCBjb3B5IG9mIFFJbWFnZSBpbgogR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YS4KClRoaXMgcGF0Y2ggZm9sbG93cyBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0
ZUNvbnRlbnRzLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAxMiArKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcCAgIHwgICAxMSArKysrKysrKysrLQogMiBmaWxlcyBjaGFu
Z2VkLCAyMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMwNmNk
MjAuLjYzNTgzNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDYtMjUgIEh1
YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgW1F0XSBB
dm9pZCBhIGRlZXAgY29weSBvZiBRSW1hZ2UgaW4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5
ODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKwogMjAxMi0wNi0yNCAgRnVtaXRv
c2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNvbXBp
bGUgZXJyb3IgZml4IG9mIENocm9taXVtIFdpbiBSZWxlYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAppbmRleCAyZjUyNjIxLi4zN2IxODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lmIEhBVkUoUVQ1KQogI2lu
Y2x1ZGUgPFFXaW5kb3c+CisjaW5jbHVkZSA8cXBhL3FwbGF0Zm9ybXBpeG1hcC5oPgogI2VuZGlm
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgpAQCAtNDkwLDcgKzQ5MSwxNSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFn
ZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICBuYXRpdmVJbWFnZSA9IFFJbWFnZTo6ZnJvbURh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KGltYWdlLT5kYXRhKCktPmRhdGEoKSks
IGltYWdlLT5kYXRhKCktPnNpemUoKSkuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMik7CiAgICAgZWxzZSB7CiAgICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBuYXRpdmVJbWFnZSA9IG5h
dGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdC
MzIpOworICAgICAgICBRSW1hZ2UgcXRJbWFnZTsKKyNpZiBIQVZFKFFUNSkKKyAgICAgICAgLy8g
V2l0aCBRUEEsIHdlIGNhbiBhdm9pZCBhIGRlZXAgY29weS4KKyAgICAgICAgcXRJbWFnZSA9ICpu
YXRpdmVQaXhtYXAtPmhhbmRsZSgpLT5idWZmZXIoKTsKKyNlbHNlCisgICAgICAgIC8vIFRoaXMg
bWlnaHQgYmUgYSBkZWVwIGNvcHksIGRlcGVuZGluZyBvbiBvdGhlciByZWZlcmVuY2VzIHRvIHRo
ZSBwaXhtYXAuCisgICAgICAgIHF0SW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKTsKKyNl
bmRpZgorICAgICAgICBuYXRpdmVJbWFnZSA9IHF0SW1hZ2UuY29udmVydFRvRm9ybWF0KFFJbWFn
ZTo6Rm9ybWF0X0FSR0IzMik7CiAgICAgfQogICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IEFs
cGhhRG9Ob3RoaW5nOwogICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotLSAKMS43LjkuNQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>