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 "SkPictureAnalyzer.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 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 sk_sp<SkPicture> picture(SkPicture::MakeFromStream(&inputStream)); 45 if (nullptr == picture) { 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 sk_sp<SkPicture> recorded(recorder.finishRecordingAsPicture()); 59 60 if (SkPictureGpuAnalyzer(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