1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "LazyDecodeBitmap.h" 9#include "SkCommandLineFlags.h" 10#include "SkPicture.h" 11#include "SkPictureRecorder.h" 12#include "SkStream.h" 13 14DEFINE_string2(readFile, r, "", "skp file to process."); 15DEFINE_bool2(quiet, q, false, "quiet"); 16 17// This tool just loads a single skp, replays into a new SkPicture (to 18// regenerate the GPU-specific tracking information) and reports 19// the value of the suitableForGpuRasterization method. 20// Return codes: 21static const int kSuccess = 0; 22static const int kError = 1; 23 24int tool_main(int argc, char** argv); 25int tool_main(int argc, char** argv) { 26#if SK_SUPPORT_GPU 27 SkCommandLineFlags::SetUsage("Reports on an skp file's suitability for GPU rasterization"); 28 SkCommandLineFlags::Parse(argc, argv); 29 30 if (FLAGS_readFile.count() != 1) { 31 if (!FLAGS_quiet) { 32 SkDebugf("Missing input file\n"); 33 } 34 return kError; 35 } 36 37 SkFILEStream inputStream(FLAGS_readFile[0]); 38 if (!inputStream.isValid()) { 39 if (!FLAGS_quiet) { 40 SkDebugf("Couldn't open file\n"); 41 } 42 return kError; 43 } 44 45 SkPicture::InstallPixelRefProc proc = &sk_tools::LazyDecodeBitmap; 46 47 SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream, proc)); 48 if (NULL == picture.get()) { 49 if (!FLAGS_quiet) { 50 SkDebugf("Could not read the SkPicture\n"); 51 } 52 return kError; 53 } 54 55 // The SkPicture tracking information is only generated during recording 56 // an isn't serialized. Replay the picture to regenerated the tracking data. 57 SkPictureRecorder recorder; 58 picture->playback(recorder.beginRecording(picture->cullRect().width(), 59 picture->cullRect().height(), 60 NULL, 0)); 61 SkAutoTUnref<SkPicture> recorded(recorder.endRecording()); 62 63 if (recorded->suitableForGpuRasterization(NULL)) { 64 SkDebugf("suitable\n"); 65 } else { 66 SkDebugf("unsuitable\n"); 67 } 68 69 return kSuccess; 70#else 71 SkDebugf("gpuveto is only useful when GPU rendering is enabled\n"); 72 return kError; 73#endif 74} 75 76#if !defined SK_BUILD_FOR_IOS 77int main(int argc, char * const argv[]) { 78 return tool_main(argc, (char**) argv); 79} 80#endif 81