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 14 DEFINE_string2(readFile, r, "", "skp file to process."); 15 DEFINE_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: 21 static const int kSuccess = 0; 22 static const int kError = 1; 23 24 int tool_main(int argc, char** argv); 25 int 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->draw(recorder.beginRecording(picture->width(), picture->height(), NULL, 0)); 59 SkAutoTUnref<SkPicture> recorded(recorder.endRecording()); 60 61 if (recorded->suitableForGpuRasterization(NULL)) { 62 SkDebugf("suitable\n"); 63 } else { 64 SkDebugf("unsuitable\n"); 65 } 66 67 return kSuccess; 68 #else 69 SkDebugf("gpuveto is only useful when GPU rendering is enabled\n"); 70 return kError; 71 #endif 72 } 73 74 #if !defined SK_BUILD_FOR_IOS 75 int main(int argc, char * const argv[]) { 76 return tool_main(argc, (char**) argv); 77 } 78 #endif 79