1545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org/* 2545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org * Copyright 2014 Google Inc. 3545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org * 4545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org * found in the LICENSE file. 6545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org */ 7545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 8545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include <stdio.h> 9545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 10545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkCommandLineFlags.h" 11545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkGraphics.h" 12545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkPicture.h" 13545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkRecordOpts.h" 14545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkRecorder.h" 15545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#include "SkStream.h" 16545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 1785fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org#include "DumpRecord.h" 1885fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org#include "LazyDecodeBitmap.h" 1985fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org 20545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgDEFINE_string2(skps, r, "", ".SKPs to dump."); 21545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgDEFINE_string(match, "", "The usual filters on file names to dump."); 22545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgDEFINE_bool2(optimize, O, false, "Run SkRecordOptimize before dumping."); 2327f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.orgDEFINE_int32(tile, 1000000000, "Simulated tile size."); 2427f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.orgDEFINE_bool(timeWithCommand, false, "If true, print time next to command, else in first column."); 25545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 2627f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.orgstatic void dump(const char* name, int w, int h, const SkRecord& record) { 2727f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.org SkBitmap bitmap; 2827f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.org bitmap.allocN32Pixels(w, h); 2927f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.org SkCanvas canvas(bitmap); 3085fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org canvas.clipRect(SkRect::MakeWH(SkIntToScalar(FLAGS_tile), 3185fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org SkIntToScalar(FLAGS_tile))); 32545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 33545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org printf("%s %s\n", FLAGS_optimize ? "optimized" : "not-optimized", name); 3427f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.org 3585fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org DumpRecord(record, &canvas, FLAGS_timeWithCommand); 36545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org} 37545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 3885fd1932231e21703fc4e1846a3769b5a5119c77commit-bot@chromium.org 39545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgint tool_main(int argc, char** argv); 40545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgint tool_main(int argc, char** argv) { 41545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkCommandLineFlags::Parse(argc, argv); 42545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkAutoGraphics ag; 43545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 44545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org for (int i = 0; i < FLAGS_skps.count(); i++) { 45545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org if (SkCommandLineFlags::ShouldSkip(FLAGS_match, FLAGS_skps[i])) { 46545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org continue; 47545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org } 48545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 49a1193e4b0e34a7e4e1bd33e9708d7341679f8321scroggo SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(FLAGS_skps[i])); 50545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org if (!stream) { 51545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkDebugf("Could not read %s.\n", FLAGS_skps[i]); 52545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org exit(1); 53545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org } 54545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkAutoTUnref<SkPicture> src( 55545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkPicture::CreateFromStream(stream, sk_tools::LazyDecodeBitmap)); 56545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org if (!src) { 57545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkDebugf("Could not read %s as an SkPicture.\n", FLAGS_skps[i]); 58545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org exit(1); 59545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org } 60a8d7f0b13cd4c6d773fcf055fe17db75d260fa05robertphillips const int w = SkScalarCeilToInt(src->cullRect().width()); 61a8d7f0b13cd4c6d773fcf055fe17db75d260fa05robertphillips const int h = SkScalarCeilToInt(src->cullRect().height()); 62545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 63545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkRecord record; 64a095041f5148dd1e71f38d0546335ed94199104bcommit-bot@chromium.org SkRecorder canvas(&record, w, h); 65c5ba71d2e5cd426def66fa49dcf003e5b2c98dc7robertphillips src->playback(&canvas); 66545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 67545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org if (FLAGS_optimize) { 68545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org SkRecordOptimize(&record); 69545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org } 70545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 7127f6b0d013572184dc980462cce8d0f3caec1c8ecommit-bot@chromium.org dump(FLAGS_skps[i], w, h, record); 72545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org } 73545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 74545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org return 0; 75545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org} 76545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org 77545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#if !defined SK_BUILD_FOR_IOS 78545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.orgint main(int argc, char * const argv[]) { 79545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org return tool_main(argc, (char**) argv); 80545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org} 81545a21a71419edcee015fbf7fecaded6bd1477c1commit-bot@chromium.org#endif 82