diff -r 4f2f89ce4247 -r 303757a437d3 WebKitTools/DumpRenderTree/cg/PixelDumpSupportCG.cpp --- a/WebKitTools/DumpRenderTree/cg/PixelDumpSupportCG.cpp Fri Sep 17 09:02:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved. - * (C) 2007 Graham Dennis (graham.dennis@gmail.com) - * (C) 2007 Eric Seidel - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "PixelDumpSupportCG.h" - -#include "DumpRenderTree.h" -#include "PixelDumpSupport.h" -#include -#include -#include -#include -#include -#include -#include - -#if PLATFORM(WIN) -#include "MD5.h" -#elif PLATFORM(MAC) -#include -#define COMMON_DIGEST_FOR_OPENSSL -#include -#endif - -using namespace std; - -#if PLATFORM(WIN) -static const CFStringRef kUTTypePNG = CFSTR("public.png"); -#endif - -static void printPNG(CGImageRef image) -{ - RetainPtr imageData(AdoptCF, CFDataCreateMutable(0, 0)); - RetainPtr imageDest(AdoptCF, CGImageDestinationCreateWithData(imageData.get(), kUTTypePNG, 1, 0)); - CGImageDestinationAddImage(imageDest.get(), image, 0); - CGImageDestinationFinalize(imageDest.get()); - - const UInt8* data = CFDataGetBytePtr(imageData.get()); - CFIndex dataLength = CFDataGetLength(imageData.get()); - - printPNG(static_cast(data), static_cast(dataLength)); -} - -void computeMD5HashStringForBitmapContext(BitmapContext* context, char hashString[33]) -{ - CGContextRef bitmapContext = context->cgContext(); - - ASSERT(CGBitmapContextGetBitsPerPixel(bitmapContext) == 32); // ImageDiff assumes 32 bit RGBA, we must as well. - size_t pixelsHigh = CGBitmapContextGetHeight(bitmapContext); - size_t pixelsWide = CGBitmapContextGetWidth(bitmapContext); - size_t bytesPerRow = CGBitmapContextGetBytesPerRow(bitmapContext); - - // We need to swap the bytes to ensure consistent hashes independently of endianness - MD5_CTX md5Context; - MD5_Init(&md5Context); - unsigned char* bitmapData = static_cast(CGBitmapContextGetData(bitmapContext)); -#if PLATFORM(MAC) - if ((CGBitmapContextGetBitmapInfo(bitmapContext) & kCGBitmapByteOrderMask) == kCGBitmapByteOrder32Big) { - for (unsigned row = 0; row < pixelsHigh; row++) { - uint32_t buffer[pixelsWide]; - for (unsigned column = 0; column < pixelsWide; column++) - buffer[column] = OSReadLittleInt32(bitmapData, 4 * column); - MD5_Update(&md5Context, buffer, 4 * pixelsWide); - bitmapData += bytesPerRow; - } - } else -#endif - { - for (unsigned row = 0; row < pixelsHigh; row++) { - MD5_Update(&md5Context, bitmapData, 4 * pixelsWide); - bitmapData += bytesPerRow; - } - } - unsigned char hash[16]; - MD5_Final(hash, &md5Context); - - hashString[0] = '\0'; - for (int i = 0; i < 16; i++) - snprintf(hashString, 33, "%s%02x", hashString, hash[i]); -} - -void dumpBitmap(BitmapContext* context) -{ - RetainPtr image(AdoptCF, CGBitmapContextCreateImage(context->cgContext())); - printPNG(image.get()); -}