146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "DMSerializeTask.h" 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "DMUtil.h" 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "DMWriteTask.h" 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "SkCommandLineFlags.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "SkPicture.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "SkPixelRef.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)DEFINE_bool(serialize, true, "If true, run picture serialization tests."); 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace DM { 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)SerializeTask::SerializeTask(const Task& parent, 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) skiagm::GM* gm, 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkBitmap reference) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : CpuTask(parent) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) , fName(UnderJoin(parent.name().c_str(), "serialize")) 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) , fGM(gm) 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) , fReference(reference) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) {} 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void SerializeTask::draw() { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkAutoTUnref<SkPicture> recorded(RecordPicture(fGM.get())); 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkDynamicMemoryWStream wStream; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) recorded->serialize(&wStream, NULL); 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkAutoTUnref<SkStream> rStream(wStream.detachAsStream()); 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkAutoTUnref<SkPicture> reconstructed(SkPicture::CreateFromStream(rStream)); 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkBitmap bitmap; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AllocatePixels(fReference, &bitmap); 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DrawPicture(reconstructed, &bitmap); 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!BitmapsEqual(bitmap, fReference)) { 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->fail(); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool SerializeTask::shouldSkip() const { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return !FLAGS_serialize || fGM->getFlags() & skiagm::GM::kSkipPicture_Flag; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace DM 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)