| /* | |
| * Copyright 2014 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "LazyDecodeBitmap.h" | |
| #include "SkCommandLineFlags.h" | |
| #include "SkPicture.h" | |
| #include "SkPictureRecorder.h" | |
| #include "SkStream.h" | |
| DEFINE_string2(readFile, r, "", "skp file to process."); | |
| DEFINE_bool2(quiet, q, false, "quiet"); | |
| // This tool just loads a single skp, replays into a new SkPicture (to | |
| // regenerate the GPU-specific tracking information) and reports | |
| // the value of the suitableForGpuRasterization method. | |
| // Return codes: | |
| static const int kSuccess = 0; | |
| static const int kError = 1; | |
| int tool_main(int argc, char** argv); | |
| int tool_main(int argc, char** argv) { | |
| #if SK_SUPPORT_GPU | |
| SkCommandLineFlags::SetUsage("Reports on an skp file's suitability for GPU rasterization"); | |
| SkCommandLineFlags::Parse(argc, argv); | |
| if (FLAGS_readFile.count() != 1) { | |
| if (!FLAGS_quiet) { | |
| SkDebugf("Missing input file\n"); | |
| } | |
| return kError; | |
| } | |
| SkFILEStream inputStream(FLAGS_readFile[0]); | |
| if (!inputStream.isValid()) { | |
| if (!FLAGS_quiet) { | |
| SkDebugf("Couldn't open file\n"); | |
| } | |
| return kError; | |
| } | |
| SkPicture::InstallPixelRefProc proc = &sk_tools::LazyDecodeBitmap; | |
| SkAutoTUnref<SkPicture> picture(SkPicture::CreateFromStream(&inputStream, proc)); | |
| if (NULL == picture.get()) { | |
| if (!FLAGS_quiet) { | |
| SkDebugf("Could not read the SkPicture\n"); | |
| } | |
| return kError; | |
| } | |
| // The SkPicture tracking information is only generated during recording | |
| // an isn't serialized. Replay the picture to regenerated the tracking data. | |
| SkPictureRecorder recorder; | |
| picture->draw(recorder.beginRecording(picture->width(), picture->height(), NULL, 0)); | |
| SkAutoTUnref<SkPicture> recorded(recorder.endRecording()); | |
| if (recorded->suitableForGpuRasterization(NULL)) { | |
| SkDebugf("suitable\n"); | |
| } else { | |
| SkDebugf("unsuitable\n"); | |
| } | |
| return kSuccess; | |
| #else | |
| SkDebugf("gpuveto is only useful when GPU rendering is enabled\n"); | |
| return kError; | |
| #endif | |
| } | |
| #if !defined SK_BUILD_FOR_IOS | |
| int main(int argc, char * const argv[]) { | |
| return tool_main(argc, (char**) argv); | |
| } | |
| #endif |