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