create bitmaps from pdf output for comparison purposes (mac only at the moment)



git-svn-id: http://skia.googlecode.com/svn/trunk@1745 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index ca49d19..78c7fe7 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -19,6 +19,13 @@
     #include "SkPDFDocument.h"
 #endif
 
+#ifdef SK_BUILD_FOR_MAC
+    #include "SkCGUtils.h"
+    #define CAN_IMAGE_PDF   true
+#else
+    #define CAN_IMAGE_PDF   false
+#endif
+
 using namespace skiagm;
 
 // need to explicitly declare this, or we get some weird infinite loop llist
@@ -271,10 +278,11 @@
                                   SkDynamicMemoryWStream* pdf) {
     SkString path;
     bool success = false;
-    if (gRec.fBackend != kPDF_Backend) {
+    if (gRec.fBackend != kPDF_Backend || CAN_IMAGE_PDF) {
         path = make_filename(writePath, renderModeDescriptor, name, "png");
         success = write_bitmap(path, bitmap);
-    } else if (pdf) {
+    }
+    if (kPDF_Backend == gRec.fBackend) {
         path = make_filename(writePath, renderModeDescriptor, name, "pdf");
         success = write_pdf(path, *pdf);
     }
@@ -339,8 +347,7 @@
     if (writePath) {
         write_reference_image(gRec, writePath, renderModeDescriptor,
                               name, bitmap, pdf);
-    // TODO: Figure out a way to compare PDFs.
-    } else if (readPath && gRec.fBackend != kPDF_Backend) {
+    } else if (readPath && (gRec.fBackend != kPDF_Backend || CAN_IMAGE_PDF)) {
         return compare_to_reference_image(readPath, name, bitmap,
                                    diffPath, renderModeDescriptor);
     } else if (comparisonBitmap) {
@@ -402,10 +409,13 @@
         if (!generate_image(gm, gRec, context, bitmap)) {
             return true;
         }
-    }
-    // TODO: Figure out a way to compare PDFs.
-    if (gRec.fBackend == kPDF_Backend && writePath) {
+    } else if (gRec.fBackend == kPDF_Backend) {
         generate_pdf(gm, pdf);
+#if CAN_IMAGE_PDF
+        SkAutoDataUnref data(pdf.copyToData());
+        SkMemoryStream stream(data.data(), data.size());
+        SkPDFDocumentToBitmap(&stream, bitmap);
+#endif
     }
     return handle_test_results(gm, gRec, writePath, readPath, diffPath,
                         "", *bitmap, &pdf, NULL);