summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-06-01 10:36:58 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-06-01 10:36:58 +0200
commitb1e9e47fa11f608ae16bc07f97a2acf95bf80272 (patch)
treec88c45e80c9c44506e7cdf9a3bb39ebf82a8cd5b /Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
parentbe01689f43cf6882cf670d33df49ead1f570c53a (diff)
downloadqtwebkit-b1e9e47fa11f608ae16bc07f97a2acf95bf80272.tar.gz
Imported WebKit commit 499c84c99aa98e9870fa7eaa57db476c6d160d46 (http://svn.webkit.org/repository/webkit/trunk@119200)
Weekly update :). Particularly relevant changes for Qt are the use of the WebCore image decoders and direct usage of libpng/libjpeg if available in the system.
Diffstat (limited to 'Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm')
-rw-r--r--Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm27
1 files changed, 27 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm b/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
index 649176215..68e2cd314 100644
--- a/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
+++ b/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm
@@ -183,6 +183,28 @@ static const NSTimeInterval DefaultWatchdogTimerInterval = 1;
#pragma mark -
#pragma mark Exposed Interface
+static RetainPtr<CGDataProviderRef> createImageProviderWithCopiedData(CGDataProviderRef sourceProvider)
+{
+ RetainPtr<CFDataRef> data = adoptCF(CGDataProviderCopyData(sourceProvider));
+ return adoptCF(CGDataProviderCreateWithCFData(data.get()));
+}
+
+static RetainPtr<CGImageRef> createImageWithCopiedData(CGImageRef sourceImage)
+{
+ size_t width = CGImageGetWidth(sourceImage);
+ size_t height = CGImageGetHeight(sourceImage);
+ size_t bitsPerComponent = CGImageGetBitsPerComponent(sourceImage);
+ size_t bitsPerPixel = CGImageGetBitsPerPixel(sourceImage);
+ size_t bytesPerRow = CGImageGetBytesPerRow(sourceImage);
+ CGColorSpaceRef colorSpace = CGImageGetColorSpace(sourceImage);
+ CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(sourceImage);
+ RetainPtr<CGDataProviderRef> provider = createImageProviderWithCopiedData(CGImageGetDataProvider(sourceImage));
+ bool shouldInterpolate = CGImageGetShouldInterpolate(sourceImage);
+ CGColorRenderingIntent intent = CGImageGetRenderingIntent(sourceImage);
+
+ return adoptCF(CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider.get(), 0, shouldInterpolate, intent));
+}
+
- (void)enterFullScreen:(NSScreen *)screen
{
if (_isFullScreen)
@@ -204,6 +226,11 @@ static const NSTimeInterval DefaultWatchdogTimerInterval = 1;
CGWindowID windowID = [[_webView window] windowNumber];
RetainPtr<CGImageRef> webViewContents(AdoptCF, CGWindowListCreateImage(NSRectToCGRect(webViewFrame), kCGWindowListOptionIncludingWindow, windowID, kCGWindowImageShouldBeOpaque));
+ // Using the returned CGImage directly would result in calls to the WindowServer every time
+ // the image was painted. Instead, copy the image data into our own process to eliminate that
+ // future overhead.
+ webViewContents = createImageWithCopiedData(webViewContents.get());
+
// Screen updates to be re-enabled in beganEnterFullScreenWithInitialFrame:finalFrame:
NSDisableScreenUpdates();
[[self window] setAutodisplay:NO];