From: commit-bot@chromium.org Date: Fri, 16 Aug 2013 19:18:12 +0000 (+0000) Subject: Fixes for factory GM. X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~11219 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=805df1aa1ddba876e6d18f9d2207d04c09415f9d;p=platform%2Fupstream%2FlibSkiaSharp.git Fixes for factory GM. Skip cross process pipe playback in gm/factory.cpp. Add a new flag to gm.h to skip only this form of pipe playback. In gmmain.cpp, use a bitmap encoder function for serialization that stores the encoded data if present, and use a bitmap decoder on deserialization. This allows gm/factory to work through serialization. Also respect the new pipe skipping flag. BUG=https://code.google.com/p/skia/issues/detail?id=1231 R=borenet@google.com Author: scroggo@google.com Review URL: https://chromiumcodereview.appspot.com/23192004 git-svn-id: http://skia.googlecode.com/svn/trunk@10786 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/gm/factory.cpp b/gm/factory.cpp index a7356a9..6734235 100644 --- a/gm/factory.cpp +++ b/gm/factory.cpp @@ -57,6 +57,11 @@ protected: canvas->drawBitmap(fBitmap, 0, 0); } + // Skip cross process pipe due to https://code.google.com/p/skia/issues/detail?id=1520 + virtual uint32_t onGetFlags() const { + return INHERITED::onGetFlags() | kSkipPipeCrossProcess_Flag; + } + private: SkBitmap fBitmap; diff --git a/gm/gm.h b/gm/gm.h index bb263c7..f806973 100644 --- a/gm/gm.h +++ b/gm/gm.h @@ -34,13 +34,14 @@ namespace skiagm { virtual ~GM(); enum Flags { - kSkipPDF_Flag = 1 << 0, - kSkipPicture_Flag = 1 << 1, - kSkipPipe_Flag = 1 << 2, - kSkipTiled_Flag = 1 << 3, - kSkip565_Flag = 1 << 4, - kSkipScaledReplay_Flag = 1 << 5, - kSkipGPU_Flag = 1 << 6, + kSkipPDF_Flag = 1 << 0, + kSkipPicture_Flag = 1 << 1, + kSkipPipe_Flag = 1 << 2, + kSkipPipeCrossProcess_Flag = 1 << 3, + kSkipTiled_Flag = 1 << 4, + kSkip565_Flag = 1 << 5, + kSkipScaledReplay_Flag = 1 << 6, + kSkipGPU_Flag = 1 << 7, }; void draw(SkCanvas*); diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp index a4ddbce..773e1e7 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 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);