Title: [93355] trunk/Tools
Revision
93355
Author
t...@chromium.org
Date
2011-08-18 15:08:28 -0700 (Thu, 18 Aug 2011)

Log Message

add embedded png checksums to WebKitTestRunner
https://bugs.webkit.org/show_bug.cgi?id=66494

Looks like WebKitTestRunner has never supported embedded checksums.  This copies
some code from DRT and adds it to the WebKitTestRunner.

Reviewed by Darin Adler.

* WebKitTestRunner/CyclicRedundancyCheck.cpp: Copied from Tools/DumpRenderTree
* WebKitTestRunner/CyclicRedundancyCheck.h: Copied from Tools/DumpRenderTree
* WebKitTestRunner/GNUmakefile.am: Add new files
* WebKitTestRunner/PixelDumpSupport.cpp: Copied from Tools/DumpRenderTree
* WebKitTestRunner/PixelDumpSupport.h: Copied from Tools/DumpRenderTree
* WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add new files
* WebKitTestRunner/cairo/TestInvocationCairo.cpp:
(WTR::dumpBitmap): Refactor to use PixelDumpSupport.
(WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
* WebKitTestRunner/cg/TestInvocationCG.cpp:
(WTR::dumpBitmap): Refactor to use PixelDumpSupport.
(WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
* WebKitTestRunner/win/WebKitTestRunner.vcproj: Add new files

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (93354 => 93355)


--- trunk/Tools/ChangeLog	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/ChangeLog	2011-08-18 22:08:28 UTC (rev 93355)
@@ -1,3 +1,27 @@
+2011-08-18  Tony Chang  <t...@chromium.org>
+
+        add embedded png checksums to WebKitTestRunner
+        https://bugs.webkit.org/show_bug.cgi?id=66494
+
+        Looks like WebKitTestRunner has never supported embedded checksums.  This copies
+        some code from DRT and adds it to the WebKitTestRunner.
+
+        Reviewed by Darin Adler.
+
+        * WebKitTestRunner/CyclicRedundancyCheck.cpp: Copied from Tools/DumpRenderTree
+        * WebKitTestRunner/CyclicRedundancyCheck.h: Copied from Tools/DumpRenderTree
+        * WebKitTestRunner/GNUmakefile.am: Add new files
+        * WebKitTestRunner/PixelDumpSupport.cpp: Copied from Tools/DumpRenderTree
+        * WebKitTestRunner/PixelDumpSupport.h: Copied from Tools/DumpRenderTree
+        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Add new files
+        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
+        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
+        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
+        * WebKitTestRunner/cg/TestInvocationCG.cpp:
+        (WTR::dumpBitmap): Refactor to use PixelDumpSupport.
+        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
+        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Add new files
+
 2011-08-18  Shawn Singh  <shawnsi...@chromium.org>
 
         https://bugs.webkit.org/show_bug.cgi?id=47240

Modified: trunk/Tools/DumpRenderTree/CyclicRedundancyCheck.cpp (93354 => 93355)


--- trunk/Tools/DumpRenderTree/CyclicRedundancyCheck.cpp	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/DumpRenderTree/CyclicRedundancyCheck.cpp	2011-08-18 22:08:28 UTC (rev 93355)
@@ -56,9 +56,9 @@
         crcTableComputed = true;
     }
 
-    unsigned crc = 0xffffffffL;
+    unsigned crc = 0xffffffffU;
     for (size_t i = 0; i < buffer.size(); ++i)
-        crc = crcTable[(crc ^ buffer[i]) & 0xff] ^ ((crc >> 8) & 0x00ffffffL);
-    return crc ^ 0xffffffffL;
+        crc = crcTable[(crc ^ buffer[i]) & 0xff] ^ ((crc >> 8) & 0x00ffffffU);
+    return crc ^ 0xffffffffU;
 }
 

Copied: trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.cpp (from rev 93354, trunk/Tools/DumpRenderTree/CyclicRedundancyCheck.cpp) (0 => 93355)


--- trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.cpp	                        (rev 0)
+++ trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.cpp	2011-08-18 22:08:28 UTC (rev 93355)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2010, Robert Eisele <rob...@xarg.org> All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+ * OWNER OR 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 "CyclicRedundancyCheck.h"
+
+#include <wtf/Vector.h>
+
+static void makeCrcTable(unsigned crcTable[256])
+{
+    for (unsigned i = 0; i < 256; i++) {
+        unsigned c = i;
+        for (int k = 0; k < 8; k++) {
+            if (c & 1)
+                c = -306674912 ^ ((c >> 1) & 0x7fffffff);
+            else
+                c = c >> 1;
+        }
+        crcTable[i] = c;
+    }
+}
+
+unsigned computeCrc(const Vector<unsigned char>& buffer)
+{
+    static unsigned crcTable[256];
+    static bool crcTableComputed = false;
+    if (!crcTableComputed) {
+        makeCrcTable(crcTable);
+        crcTableComputed = true;
+    }
+
+    unsigned crc = 0xffffffffU;
+    for (size_t i = 0; i < buffer.size(); ++i)
+        crc = crcTable[(crc ^ buffer[i]) & 0xff] ^ ((crc >> 8) & 0x00ffffffU);
+    return crc ^ 0xffffffffU;
+}
+

Copied: trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.h (from rev 93354, trunk/Tools/DumpRenderTree/CyclicRedundancyCheck.cpp) (0 => 93355)


--- trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.h	                        (rev 0)
+++ trunk/Tools/WebKitTestRunner/CyclicRedundancyCheck.h	2011-08-18 22:08:28 UTC (rev 93355)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+ * OWNER OR 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.
+ */
+
+#ifndef CyclicRedundancyCheck_h
+#define CyclicRedundancyCheck_h
+
+#include <wtf/Vector.h>
+
+unsigned computeCrc(const Vector<unsigned char>&);
+
+#endif

Modified: trunk/Tools/WebKitTestRunner/GNUmakefile.am (93354 => 93355)


--- trunk/Tools/WebKitTestRunner/GNUmakefile.am	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/WebKitTestRunner/GNUmakefile.am	2011-08-18 22:08:28 UTC (rev 93355)
@@ -13,6 +13,10 @@
 	Tools/WebKitTestRunner/gtk/PlatformWebViewGtk.cpp \
 	Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp \
 	Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp \
+	Tools/WebKitTestRunner/CyclicRedundancyCheck.cpp \
+	Tools/WebKitTestRunner/CyclicRedundancyCheck.h \
+	Tools/WebKitTestRunner/PixelDumpSupport.cpp \
+	Tools/WebKitTestRunner/PixelDumpSupport.h \
 	Tools/WebKitTestRunner/PlatformWebView.h \
 	Tools/WebKitTestRunner/StringFunctions.h \
 	Tools/WebKitTestRunner/TestController.cpp \

Added: trunk/Tools/WebKitTestRunner/PixelDumpSupport.cpp (0 => 93355)


--- trunk/Tools/WebKitTestRunner/PixelDumpSupport.cpp	                        (rev 0)
+++ trunk/Tools/WebKitTestRunner/PixelDumpSupport.cpp	2011-08-18 22:08:28 UTC (rev 93355)
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2009 Apple, Inc. All rights reserved.
+ *
+ * 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 "PixelDumpSupport.h"
+
+#include "CyclicRedundancyCheck.h"
+
+static void appendIntToVector(unsigned number, Vector<unsigned char>& vector)
+{
+    size_t offset = vector.size();
+    vector.grow(offset + 4);
+    vector[offset] = ((number >> 24) & 0xff);
+    vector[offset + 1] = ((number >> 16) & 0xff);
+    vector[offset + 2] = ((number >> 8) & 0xff);
+    vector[offset + 3] = (number & 0xff);
+}
+
+static void convertChecksumToPNGComment(const char* checksum, Vector<unsigned char>& bytesToAdd)
+{
+    // Chunks of PNG files are <length>, <type>, <data>, <crc>.
+    static const char textCommentPrefix[] = "\x00\x00\x00\x29tEXtchecksum\x00";
+    static const size_t prefixLength = sizeof(textCommentPrefix) - 1; // The -1 is for the null at the end of the char[].
+    static const size_t checksumLength = 32;
+
+    bytesToAdd.append(textCommentPrefix, prefixLength);
+    bytesToAdd.append(checksum, checksumLength);
+
+    Vector<unsigned char> dataToCrc;
+    dataToCrc.append(textCommentPrefix + 4, prefixLength - 4); // Don't include the chunk length in the crc.
+    dataToCrc.append(checksum, checksumLength);
+    unsigned crc32 = computeCrc(dataToCrc);
+
+    appendIntToVector(crc32, bytesToAdd);
+}
+
+static size_t offsetAfterIHDRChunk(const unsigned char* data, const size_t dataLength)
+{
+    const int pngHeaderLength = 8;
+    const int pngIHDRChunkLength = 25; // chunk length + "IHDR" + 13 bytes of data + checksum
+    return pngHeaderLength + pngIHDRChunkLength;
+}
+
+void printPNG(const unsigned char* data, const size_t dataLength, const char* checksum)
+{
+    Vector<unsigned char> bytesToAdd;
+    convertChecksumToPNGComment(checksum, bytesToAdd);
+
+    printf("Content-Type: %s\n", "image/png");
+    printf("Content-Length: %lu\n", static_cast<unsigned long>(dataLength + bytesToAdd.size()));
+
+    size_t insertOffset = offsetAfterIHDRChunk(data, dataLength);
+
+    fwrite(data, 1, insertOffset, stdout);
+    fwrite(bytesToAdd.data(), 1, bytesToAdd.size(), stdout);
+
+    const size_t bytesToWriteInOneChunk = 1 << 15;
+    data += insertOffset;
+    size_t dataRemainingToWrite = dataLength - insertOffset;
+    while (dataRemainingToWrite) {
+        size_t bytesToWriteInThisChunk = std::min(dataRemainingToWrite, bytesToWriteInOneChunk);
+        size_t bytesWritten = fwrite(data, 1, bytesToWriteInThisChunk, stdout);
+        if (bytesWritten != bytesToWriteInThisChunk)
+            break;
+        dataRemainingToWrite -= bytesWritten;
+        data += bytesWritten;
+    }
+}

Added: trunk/Tools/WebKitTestRunner/PixelDumpSupport.h (0 => 93355)


--- trunk/Tools/WebKitTestRunner/PixelDumpSupport.h	                        (rev 0)
+++ trunk/Tools/WebKitTestRunner/PixelDumpSupport.h	2011-08-18 22:08:28 UTC (rev 93355)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef PixelDumpSupport_h
+#define PixelDumpSupport_h
+
+void printPNG(const unsigned char* data, const size_t dataLength, const char* checksum);
+
+#endif // PixelDumpSupport_h

Modified: trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj (93354 => 93355)


--- trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj	2011-08-18 22:08:28 UTC (rev 93355)
@@ -21,6 +21,8 @@
 /* End PBXAggregateTarget section */
 
 /* Begin PBXBuildFile section */
+		5322FB4313FDA0CD0041ABCC /* CyclicRedundancyCheck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5322FB4113FDA0CD0041ABCC /* CyclicRedundancyCheck.cpp */; };
+		5322FB4613FDA0EA0041ABCC /* PixelDumpSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5322FB4413FDA0EA0041ABCC /* PixelDumpSupport.cpp */; };
 		6510A78211EC643800410867 /* AHEM____.TTF in Resources */ = {isa = PBXBuildFile; fileRef = 6510A77711EC643800410867 /* AHEM____.TTF */; };
 		6510A78311EC643800410867 /* ColorBits.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A77811EC643800410867 /* ColorBits.ttf */; };
 		6510A78411EC643800410867 /* WebKitWeightWatcher100.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6510A77911EC643800410867 /* WebKitWeightWatcher100.ttf */; };
@@ -81,6 +83,10 @@
 		378D442213346D00006A777B /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
 		41230E16138C78BF00BCCFCA /* libWebCoreTestSupport.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libWebCoreTestSupport.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		4181731B138AD39D0057AAA4 /* WebCoreTestSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebCoreTestSupport.h; path = WebCoreTestSupport/WebCoreTestSupport.h; sourceTree = BUILT_PRODUCTS_DIR; };
+		5322FB4113FDA0CD0041ABCC /* CyclicRedundancyCheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CyclicRedundancyCheck.cpp; sourceTree = "<group>"; };
+		5322FB4213FDA0CD0041ABCC /* CyclicRedundancyCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CyclicRedundancyCheck.h; sourceTree = "<group>"; };
+		5322FB4413FDA0EA0041ABCC /* PixelDumpSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PixelDumpSupport.cpp; sourceTree = "<group>"; };
+		5322FB4513FDA0EA0041ABCC /* PixelDumpSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PixelDumpSupport.h; sourceTree = "<group>"; };
 		6510A77711EC643800410867 /* AHEM____.TTF */ = {isa = PBXFileReference; lastKnownFileType = file; name = "AHEM____.TTF"; path = "fonts/AHEM____.TTF"; sourceTree = "<group>"; };
 		6510A77811EC643800410867 /* ColorBits.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ColorBits.ttf; path = fonts/ColorBits.ttf; sourceTree = "<group>"; };
 		6510A77911EC643800410867 /* WebKitWeightWatcher100.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = WebKitWeightWatcher100.ttf; path = fonts/WebKitWeightWatcher100.ttf; sourceTree = "<group>"; };
@@ -189,12 +195,16 @@
 			children = (
 				BC9192021333E4CD003011DC /* cg */,
 				BC7933FE118F7C74005EA8E2 /* mac */,
-				BC251A1711D16774002EBC01 /* WebKitTestRunnerPrefix.h */,
+				5322FB4113FDA0CD0041ABCC /* CyclicRedundancyCheck.cpp */,
+				5322FB4213FDA0CD0041ABCC /* CyclicRedundancyCheck.h */,
+				5322FB4413FDA0EA0041ABCC /* PixelDumpSupport.cpp */,
+				5322FB4513FDA0EA0041ABCC /* PixelDumpSupport.h */,
 				BC7934DD119066EC005EA8E2 /* PlatformWebView.h */,
 				BC79342F118F7F19005EA8E2 /* TestController.h */,
 				BC793430118F7F19005EA8E2 /* TestController.cpp */,
 				BCD7D2F611921278006DB7EE /* TestInvocation.h */,
 				BCD7D2F711921278006DB7EE /* TestInvocation.cpp */,
+				BC251A1711D16774002EBC01 /* WebKitTestRunnerPrefix.h */,
 			);
 			name = TestRunner;
 			sourceTree = "<group>";
@@ -453,10 +463,12 @@
 			buildActionMask = 2147483647;
 			files = (
 				BC793400118F7C84005EA8E2 /* main.mm in Sources */,
+				5322FB4313FDA0CD0041ABCC /* CyclicRedundancyCheck.cpp in Sources */,
+				5322FB4613FDA0EA0041ABCC /* PixelDumpSupport.cpp in Sources */,
+				BC7934E811906846005EA8E2 /* PlatformWebViewMac.mm in Sources */,
 				BC793431118F7F19005EA8E2 /* TestController.cpp in Sources */,
-				BC7934E811906846005EA8E2 /* PlatformWebViewMac.mm in Sources */,
+				BC8C795C11D2785D004535A1 /* TestControllerMac.mm in Sources */,
 				BCD7D2F811921278006DB7EE /* TestInvocation.cpp in Sources */,
-				BC8C795C11D2785D004535A1 /* TestControllerMac.mm in Sources */,
 				BC9192051333E4F8003011DC /* TestInvocationCG.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

Modified: trunk/Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp (93354 => 93355)


--- trunk/Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/WebKitTestRunner/cairo/TestInvocationCairo.cpp	2011-08-18 22:08:28 UTC (rev 93355)
@@ -28,6 +28,7 @@
 #include "config.h"
 #include "TestInvocation.h"
 
+#include "PixelDumpSupport.h"
 #include <WebKit2/WKImageCairo.h>
 #include <cairo/cairo.h>
 #include <cstdio>
@@ -66,26 +67,14 @@
     return CAIRO_STATUS_SUCCESS;
 }
 
-static void dumpBitmap(cairo_surface_t* surface)
+static void dumpBitmap(cairo_surface_t* surface, const char* checksum)
 {
     Vector<unsigned char> pixelData;
     cairo_surface_write_to_png_stream(surface, writeFunction, &pixelData);
     const size_t dataLength = pixelData.size();
     const unsigned char* data = ""
 
-    printf("Content-Type: %s\n", "image/png");
-    printf("Content-Length: %lu\n", static_cast<unsigned long>(dataLength));
-
-    const size_t bytesToWriteInOneChunk = 1 << 15;
-    size_t dataRemainingToWrite = dataLength;
-    while (dataRemainingToWrite) {
-        size_t bytesToWriteInThisChunk = std::min(dataRemainingToWrite, bytesToWriteInOneChunk);
-        size_t bytesWritten = fwrite(data, 1, bytesToWriteInThisChunk, stdout);
-        if (bytesWritten != bytesToWriteInThisChunk)
-            break;
-        dataRemainingToWrite -= bytesWritten;
-        data += bytesWritten;
-    }
+    printPNG(data, dataLength, checksum);
 }
 
 void TestInvocation::dumpPixelsAndCompareWithExpected(WKImageRef wkImage)
@@ -95,7 +84,7 @@
     char actualHash[33];
     computeMD5HashStringForCairoSurface(surface, actualHash);
     if (!compareActualHashToExpectedAndDumpResults(actualHash))
-        dumpBitmap(surface);
+        dumpBitmap(surface, actualHash);
 
     cairo_surface_destroy(surface);
 }

Modified: trunk/Tools/WebKitTestRunner/cg/TestInvocationCG.cpp (93354 => 93355)


--- trunk/Tools/WebKitTestRunner/cg/TestInvocationCG.cpp	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/WebKitTestRunner/cg/TestInvocationCG.cpp	2011-08-18 22:08:28 UTC (rev 93355)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "TestInvocation.h"
 
+#include "PixelDumpSupport.h"
 #include "PlatformWebView.h"
 #include "TestController.h"
 #include <ImageIO/CGImageDestination.h>
@@ -99,7 +100,7 @@
         snprintf(hashString, 33, "%s%02x", hashString, hash[i]);
 }
 
-static void dumpBitmap(CGContextRef bitmapContext)
+static void dumpBitmap(CGContextRef bitmapContext, const char* checksum)
 {
     RetainPtr<CGImageRef> image(AdoptCF, CGBitmapContextCreateImage(bitmapContext));
     RetainPtr<CFMutableDataRef> imageData(AdoptCF, CFDataCreateMutable(0, 0));
@@ -110,20 +111,7 @@
     const unsigned char* data = ""
     const size_t dataLength = CFDataGetLength(imageData.get());
 
-
-    fprintf(stdout, "Content-Type: %s\n", "image/png");
-    fprintf(stdout, "Content-Length: %lu\n", static_cast<unsigned long>(dataLength));
-    
-    const size_t bytesToWriteInOneChunk = 1 << 15;
-    size_t dataRemainingToWrite = dataLength;
-    while (dataRemainingToWrite) {
-        size_t bytesToWriteInThisChunk = std::min(dataRemainingToWrite, bytesToWriteInOneChunk);
-        size_t bytesWritten = fwrite(data, 1, bytesToWriteInThisChunk, stdout);
-        if (bytesWritten != bytesToWriteInThisChunk)
-            break;
-        dataRemainingToWrite -= bytesWritten;
-        data += bytesWritten;
-    }
+    printPNG(data, dataLength, checksum);
 }
 
 void TestInvocation::dumpPixelsAndCompareWithExpected(WKImageRef image)
@@ -133,7 +121,7 @@
     char actualHash[33];
     computeMD5HashStringForContext(context, actualHash);
     if (!compareActualHashToExpectedAndDumpResults(actualHash))
-        dumpBitmap(context);
+        dumpBitmap(context, actualHash);
 }
 
 } // namespace WTR

Modified: trunk/Tools/WebKitTestRunner/win/WebKitTestRunner.vcproj (93354 => 93355)


--- trunk/Tools/WebKitTestRunner/win/WebKitTestRunner.vcproj	2011-08-18 22:03:11 UTC (rev 93354)
+++ trunk/Tools/WebKitTestRunner/win/WebKitTestRunner.vcproj	2011-08-18 22:08:28 UTC (rev 93355)
@@ -471,6 +471,22 @@
 			</File>
 		</Filter>
 		<File
+			RelativePath="..\CyclicRedundancyCheck.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\CyclicRedundancyCheck.h"
+			>
+		</File>
+		<File
+			RelativePath="..\PixelDumpSupport.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\PixelDumpSupport.h"
+			>
+		</File>
+		<File
 			RelativePath="..\PlatformWebView.h"
 			>
 		</File>
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to