<?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>163988</bug_id>
          
          <creation_ts>2016-10-25 14:44:20 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Implement GraphicsContext::releaseWindowsContext.</short_desc>
          <delta_ts>2016-10-27 15:51:08 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>163898</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Per Arne Vollan">pvollan</reporter>
          <assigned_to name="Per Arne Vollan">pvollan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244455</commentid>
    <comment_count>0</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-10-25 14:44:20 -0700</bug_when>
    <thetext>This is needed to draw native controls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244466</commentid>
    <comment_count>1</comment_count>
      <attachid>292828</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-10-25 14:53:34 -0700</bug_when>
    <thetext>Created attachment 292828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244467</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 14:55:36 -0700</bug_when>
    <thetext>Attachment 292828 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:255:  Use the class HWndDC instead of calling GetDC to avoid potential memory leaks.  [runtime/leaky_pattern] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244630</commentid>
    <comment_count>3</comment_count>
      <attachid>292828</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-25 22:07:58 -0700</bug_when>
    <thetext>Comment on attachment 292828
Patch

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

Looks good! After this lands I&apos;ll incorporate into my patch.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:248
&gt; +    HRESULT hr = platformContext()-&gt;QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), (void**)&amp;gdiRenderTarget);

I have a patch to reuse the GDI Interop target. I&apos;ll update it to include this code path.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:252
&gt; +        platformContext()-&gt;BeginDraw();

I also have a patch with an RIAA class that will get rid of some of this boilerplate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245233</commentid>
    <comment_count>4</comment_count>
      <attachid>293049</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-10-27 13:31:51 -0700</bug_when>
    <thetext>Created attachment 293049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245287</commentid>
    <comment_count>5</comment_count>
      <attachid>293049</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-27 15:07:12 -0700</bug_when>
    <thetext>Comment on attachment 293049
Patch

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

Very nice! This should get rid of at least one expensive copy!

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:252
&gt; +    D2D1_BITMAP_PROPERTIES bitmapProperties = D2D1::BitmapProperties(D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE));

Use &apos;auto&apos; here, please.

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:255
&gt; +    HRESULT hr = platformContext()-&gt;CreateBitmap(pixelData.size(), pixelData.buffer(), pixelData.bytesPerRow(), &amp;bitmapProperties, &amp;bitmap);

We should probably ASSERT(SUCCEEDED(hr)) here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245310</commentid>
    <comment_count>6</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-10-27 15:42:04 -0700</bug_when>
    <thetext>Committed r208013: &lt;https://trac.webkit.org/changeset/208013&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245314</commentid>
    <comment_count>7</comment_count>
      <attachid>293049</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-10-27 15:49:31 -0700</bug_when>
    <thetext>Comment on attachment 293049
Patch

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

&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:263
&gt; +    if (!didBeginDraw())
&gt; +        hr = platformContext()-&gt;EndDraw();

I think this condition is wrong. It can be the opposite:

if (didBeginDraw())
    hr = platformContext()-&gt;EndDraw();

But I think this is not accurate either. Since you need to endDraw() only if you beginDraw(), I think you need to track this by flag in the beginDraw if-statetmen abovet. Otherwise you may cause unbalanced draw begin-end nesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245317</commentid>
    <comment_count>8</comment_count>
      <attachid>293049</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-27 15:51:08 -0700</bug_when>
    <thetext>Comment on attachment 293049
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GraphicsContextDirect2D.cpp:263
&gt;&gt; +        hr = platformContext()-&gt;EndDraw();
&gt; 
&gt; I think this condition is wrong. It can be the opposite:
&gt; 
&gt; if (didBeginDraw())
&gt;     hr = platformContext()-&gt;EndDraw();
&gt; 
&gt; But I think this is not accurate either. Since you need to endDraw() only if you beginDraw(), I think you need to track this by flag in the beginDraw if-statetmen abovet. Otherwise you may cause unbalanced draw begin-end nesting.

This whole issue will be fixed by Bug 164005.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292828</attachid>
            <date>2016-10-25 14:53:34 -0700</date>
            <delta_ts>2016-10-27 13:31:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163988-20161025145418.patch</filename>
            <type>text/plain</type>
            <size>2446</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzg0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTEwLTI1ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXVtEaXJlY3QyRF0g
SW1wbGVtZW50IEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTg4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMg
bmVlZGVkIHRvIGRyYXcgbmF0aXZlIGNvbnRyb2xzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KToKKwogMjAxNi0xMC0yNSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5kZXhlZERCIDIu
MDogU3VwcG9ydCBJREJPYmplY3RTdG9yZSBvcGVuS2V5Q3Vyc29yLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc3ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDQwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UoY28KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKIHsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBt
YXlDcmVhdGVCaXRtYXAgJiYgKCFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpKTsKKyAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKKyAgICAgICAgbV9kYXRhLT5yZXN0b3Jl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhkYyB8fCBkc3RSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElEMkQxR2RpSW50ZXJvcFJl
bmRlclRhcmdldD4gZ2RpUmVuZGVyVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNv
bnRleHQoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFHZGlJbnRlcm9wUmVuZGVyVGFy
Z2V0KSwgKHZvaWQqKikmZ2RpUmVuZGVyVGFyZ2V0KTsKKyAgICBBU1NFUlQoaHIgPT0gU19PSyk7
CisKKyAgICBpZiAoIWRpZEJlZ2luRHJhdygpKQorICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
QmVnaW5EcmF3KCk7CisKKyAgICBIREMgZHN0SGRjID0gbnVsbHB0cjsKKyAgICBociA9IGdkaVJl
bmRlclRhcmdldC0+R2V0REMoRDJEMV9EQ19JTklUSUFMSVpFX01PREVfQ09QWSwgJmRzdEhkYyk7
CisgICAgQVNTRVJUKGhyID09IFNfT0spOworCisgICAgRDJEMTo6TWF0cml4M3gyRiBjdXJyZW50
VHJhbnNmb3JtOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRU
cmFuc2Zvcm0pOworICAgIGRvdWJsZSBvZmZzZXRYID0gY3VycmVudFRyYW5zZm9ybS5fMzE7Cisg
ICAgZG91YmxlIG9mZnNldFkgPSBjdXJyZW50VHJhbnNmb3JtLl8zMjsKKworICAgIEJPT0wgb2sg
PSA6OkJpdEJsdChkc3RIZGMsIGRzdFJlY3QueCgpICsgb2Zmc2V0WCwgZHN0UmVjdC55KCkgKyBv
ZmZzZXRZLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksIGhkYywgZHN0UmVjdC54
KCksIGRzdFJlY3QueSgpLCBTUkNDT1BZKTsKKyAgICBBU1NFUlQob2spOworCisgICAgaHIgPSBn
ZGlSZW5kZXJUYXJnZXQtPlJlbGVhc2VEQyhudWxscHRyKTsKKworICAgIGlmICghZGlkQmVnaW5E
cmF3KCkpCisgICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0KCktPkVuZERyYXcoKTsKKworICAg
IDo6RGVsZXRlREMoaGRjKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dz
Qml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293049</attachid>
            <date>2016-10-27 13:31:51 -0700</date>
            <delta_ts>2016-10-27 15:07:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163988-20161027133227.patch</filename>
            <type>text/plain</type>
            <size>2287</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzg0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTEwLTI1ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXVtEaXJlY3QyRF0g
SW1wbGVtZW50IEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTg4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMg
bmVlZGVkIHRvIGRyYXcgbmF0aXZlIGNvbnRyb2xzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KToKKwogMjAxNi0xMC0yNSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5kZXhlZERCIDIu
MDogU3VwcG9ydCBJREJPYmplY3RTdG9yZSBvcGVuS2V5Q3Vyc29yLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDc3ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UoY28KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKIHsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBt
YXlDcmVhdGVCaXRtYXAgJiYgKCFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpKTsKKyAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKKyAgICAgICAgbV9kYXRhLT5yZXN0b3Jl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWhkYyB8fCBkc3RSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzb3VyY2VCaXRtYXAgPSBhZG9w
dEdESU9iamVjdChzdGF0aWNfY2FzdDxIQklUTUFQPig6OkdldEN1cnJlbnRPYmplY3QoaGRjLCBP
QkpfQklUTUFQKSkpOworCisgICAgRElCUGl4ZWxEYXRhIHBpeGVsRGF0YShzb3VyY2VCaXRtYXAu
Z2V0KCkpOworICAgIEFTU0VSVChwaXhlbERhdGEuYml0c1BlclBpeGVsKCkgPT0gMzIpOworCisg
ICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUyBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFw
UHJvcGVydGllcyhEMkQxOjpQaXhlbEZvcm1hdChEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwg
RDJEMV9BTFBIQV9NT0RFX0lHTk9SRSkpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRt
YXA7CisgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dCgpLT5DcmVhdGVCaXRtYXAocGl4
ZWxEYXRhLnNpemUoKSwgcGl4ZWxEYXRhLmJ1ZmZlcigpLCBwaXhlbERhdGEuYnl0ZXNQZXJSb3co
KSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOworCisgICAgaWYgKCFkaWRCZWdpbkRyYXco
KSkKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPkJlZ2luRHJhdygpOworCisgICAgcGxhdGZv
cm1Db250ZXh0KCktPkRyYXdCaXRtYXAoYml0bWFwLmdldCgpLCBkc3RSZWN0KTsKKworICAgIGlm
ICghZGlkQmVnaW5EcmF3KCkpCisgICAgICAgIGhyID0gcGxhdGZvcm1Db250ZXh0KCktPkVuZERy
YXcoKTsKKworICAgIDo6RGVsZXRlREMoaGRjKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQpCg==
</data>
<flag name="review"
          id="315995"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="316006"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>