| Index: gm/gmmain.cpp | 
| diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp | 
| index a4ddbcee4789dffc5cc3834899d2e3679d6b372d..773e1e769c72811cf458aac59278b3cd1a3d2c04 100644 | 
| --- a/gm/gmmain.cpp | 
| +++ b/gm/gmmain.cpp | 
| @@ -1014,11 +1014,24 @@ public: | 
| return pict; | 
| } | 
|  | 
| +    static SkData* bitmap_encoder(size_t* pixelRefOffset, const SkBitmap& bm) { | 
| +        SkPixelRef* pr = bm.pixelRef(); | 
| +        if (pr != NULL) { | 
| +            SkData* data = pr->refEncodedData(); | 
| +            if (data != NULL) { | 
| +                *pixelRefOffset = bm.pixelRefOffset(); | 
| +                return data; | 
| +            } | 
| +        } | 
| +        return NULL; | 
| +    } | 
| + | 
| static SkPicture* stream_to_new_picture(const SkPicture& src) { | 
| SkDynamicMemoryWStream storage; | 
| -        src.serialize(&storage); | 
| +        src.serialize(&storage, &bitmap_encoder); | 
| SkAutoTUnref<SkStreamAsset> pictReadback(storage.detachAsStream()); | 
| -        SkPicture* retval = SkPicture::CreateFromStream(pictReadback); | 
| +        SkPicture* retval = SkPicture::CreateFromStream(pictReadback, | 
| +                                                        &SkImageDecoder::DecodeMemory); | 
| return retval; | 
| } | 
|  | 
| @@ -1108,7 +1121,9 @@ public: | 
| SkString renderModeDescriptor("-pipe"); | 
| renderModeDescriptor.append(gPipeWritingFlagCombos[i].name); | 
|  | 
| -            if (gm->getFlags() & GM::kSkipPipe_Flag) { | 
| +            if (gm->getFlags() & GM::kSkipPipe_Flag | 
| +                || (gPipeWritingFlagCombos[i].flags == SkGPipeWriter::kCrossProcess_Flag | 
| +                    && gm->getFlags() & GM::kSkipPipeCrossProcess_Flag)) { | 
| RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePlusConfig, | 
| renderModeDescriptor.c_str()); | 
| errors.add(kIntentionallySkipped_ErrorType); | 
|  |