<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[172871] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/172871">172871</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2014-08-22 13:55:13 -0700 (Fri, 22 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Google Canvas2D maps are too slow and uncontrollable with Safari with full screen mode
https://bugs.webkit.org/show_bug.cgi?id=136168

Reviewed by Tim Horton.

When Google maps are using their 2D &quot;lite&quot; fallback and you're drawing in a huge
window such as fullscreen 4K, we would drop back to unaccelerated mode, thinking
that we'd exceeded the maximum IOSurface size.

Remove the hardcoded limit on IOSurface sizes, and instead ask the system
what it believe the maximum to be. This was significantly higher than our
limit on the systems I tested.

* platform/graphics/cg/ImageBufferCG.cpp:
(WebCore::ImageBuffer::ImageBuffer): Include our IOSurface wrapper, which
has a query for maximum size, and use that instead.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscgImageBufferCGcpp">trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (172870 => 172871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-08-22 20:40:47 UTC (rev 172870)
+++ trunk/Source/WebCore/ChangeLog        2014-08-22 20:55:13 UTC (rev 172871)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2014-08-22  Dean Jackson  &lt;dino@apple.com&gt;
+
+        Google Canvas2D maps are too slow and uncontrollable with Safari with full screen mode
+        https://bugs.webkit.org/show_bug.cgi?id=136168
+
+        Reviewed by Tim Horton.
+
+        When Google maps are using their 2D &quot;lite&quot; fallback and you're drawing in a huge
+        window such as fullscreen 4K, we would drop back to unaccelerated mode, thinking
+        that we'd exceeded the maximum IOSurface size.
+
+        Remove the hardcoded limit on IOSurface sizes, and instead ask the system
+        what it believe the maximum to be. This was significantly higher than our
+        limit on the systems I tested.
+
+        * platform/graphics/cg/ImageBufferCG.cpp:
+        (WebCore::ImageBuffer::ImageBuffer): Include our IOSurface wrapper, which
+        has a query for maximum size, and use that instead.
+
</ins><span class="cx"> 2014-08-22  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Maybe fix Windows.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscgImageBufferCGcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp (172870 => 172871)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp        2014-08-22 20:40:47 UTC (rev 172870)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp        2014-08-22 20:55:13 UTC (rev 172871)
</span><span class="lines">@@ -48,6 +48,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(IOSURFACE_CANVAS_BACKING_STORE)
</span><ins>+#include &quot;IOSurface.h&quot;
</ins><span class="cx"> #include &lt;IOSurface/IOSurface.h&gt;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -57,11 +58,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> #if USE(IOSURFACE_CANVAS_BACKING_STORE)
</span><del>-#if PLATFORM(IOS)
-static const int maxIOSurfaceDimension = 2048;
-#else
-static const int maxIOSurfaceDimension = 4096;
-#endif
</del><span class="cx"> 
</span><span class="cx"> // FIXME: Adopt WebCore::IOSurface.
</span><span class="cx"> static RetainPtr&lt;IOSurfaceRef&gt; createIOSurface(const IntSize&amp; size)
</span><span class="lines">@@ -156,7 +152,8 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx"> #if USE(IOSURFACE_CANVAS_BACKING_STORE)
</span><del>-    if (width.unsafeGet() &gt; maxIOSurfaceDimension || height.unsafeGet() &gt; maxIOSurfaceDimension)
</del><ins>+    IntSize maxSize = IOSurface::maximumSize();
+    if (width.unsafeGet() &gt; maxSize.width() || height.unsafeGet() &gt; maxSize.height())
</ins><span class="cx">         accelerateRendering = false;
</span><span class="cx"> #else
</span><span class="cx">     ASSERT(renderingMode == Unaccelerated);
</span></span></pre>
</div>
</div>

</body>
</html>