Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Macros | Functions
dump_record.cpp File Reference
#include "include/core/SkBitmap.h"
#include "include/core/SkPicture.h"
#include "include/core/SkPictureRecorder.h"
#include "include/core/SkSerialProcs.h"
#include "include/core/SkStream.h"
#include "include/encode/SkPngEncoder.h"
#include "src/base/SkTime.h"
#include "src/core/SkPicturePriv.h"
#include "src/core/SkRecord.h"
#include "src/core/SkRecordDraw.h"
#include "src/core/SkRecordOpts.h"
#include "src/core/SkRecorder.h"
#include "src/image/SkImage_Base.h"
#include "tools/flags/CommandLineFlags.h"
#include <cstdio>

Go to the source code of this file.

Classes

class  Dumper
 

Macros

#define CASE(U)   case SkRecords::U##_Type: return #U;
 

Functions

static DEFINE_string2 (skps, r, "", ".SKPs to dump.")
 
static DEFINE_string (match, "", "The usual filters on file names to dump.")
 
static DEFINE_bool2 (optimize, O, false, "Run SkRecordOptimize before dumping.")
 
static DEFINE_int (tile, 1000000000, "Simulated tile size.")
 
static DEFINE_bool (timeWithCommand, false, "If true, print time next to command, else in first column.")
 
static DEFINE_string2 (write, w, "", "Write the (optimized) picture to the named file.")
 
int main (int argc, char **argv)
 

Macro Definition Documentation

◆ CASE

#define CASE (   U)    case SkRecords::U##_Type: return #U;

Function Documentation

◆ DEFINE_bool()

static DEFINE_bool ( timeWithCommand  ,
false  ,
"If  true,
print time next to  command,
else in first column."   
)
static

◆ DEFINE_bool2()

static DEFINE_bool2 ( optimize  ,
,
false  ,
"Run SkRecordOptimize before dumping."   
)
static

◆ DEFINE_int()

static DEFINE_int ( tile  ,
1000000000  ,
"Simulated tile size."   
)
static

◆ DEFINE_string()

static DEFINE_string ( match  ,
""  ,
"The usual filters on file names to dump."   
)
static

◆ DEFINE_string2() [1/2]

static DEFINE_string2 ( skps  ,
,
""  ,
".SKPs to dump."   
)
static

◆ DEFINE_string2() [2/2]

static DEFINE_string2 ( write  ,
w  ,
""  ,
"Write the (optimized) picture to the named file."   
)
static

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 146 of file dump_record.cpp.

146 {
147 CommandLineFlags::Parse(argc, argv);
148
149 for (int i = 0; i < FLAGS_skps.size(); i++) {
150 if (CommandLineFlags::ShouldSkip(FLAGS_match, FLAGS_skps[i])) {
151 continue;
152 }
153
154 std::unique_ptr<SkStream> stream = SkStream::MakeFromFile(FLAGS_skps[i]);
155 if (!stream) {
156 SkDebugf("Could not read %s.\n", FLAGS_skps[i]);
157 return 1;
158 }
160 if (!src) {
161 SkDebugf("Could not read %s as an SkPicture.\n", FLAGS_skps[i]);
162 return 1;
163 }
164 const int w = SkScalarCeilToInt(src->cullRect().width());
165 const int h = SkScalarCeilToInt(src->cullRect().height());
166
167 SkRecord record;
168 SkRecorder rec(&record, w, h);
169 src->playback(&rec);
170
171 if (FLAGS_optimize) {
172 SkRecordOptimize(&record);
173 }
174
176 bitmap.allocN32Pixels(w, h);
177 SkCanvas canvas(bitmap);
178 canvas.clipRect(SkRect::MakeWH(SkIntToScalar(FLAGS_tile),
179 SkIntToScalar(FLAGS_tile)));
180
181 printf("%s %s\n", FLAGS_optimize ? "optimized" : "not-optimized", FLAGS_skps[i]);
182
183 Dumper dumper(&canvas, record.count());
184 for (int j = 0; j < record.count(); j++) {
185 record.visit(j, dumper);
186 }
187
188 if (FLAGS_write.size() > 0) {
190 SkRecordDraw(record,
192 nullptr,
193 nullptr,
194 0,
195 nullptr,
196 nullptr);
198 SkFILEWStream ostream(FLAGS_write[0]);
199 SkSerialProcs sProcs;
200 sProcs.fImageProc = [](SkImage* img, void*) -> sk_sp<SkData> {
201 return SkPngEncoder::Encode(nullptr, img, SkPngEncoder::Options{});
202 };
203 dst->serialize(&ostream, &sProcs);
204 }
205 }
206
207 return 0;
208}
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
void SkRecordDraw(const SkRecord &record, SkCanvas *canvas, SkPicture const *const drawablePicts[], SkDrawable *const drawables[], int drawableCount, const SkBBoxHierarchy *bbh, SkPicture::AbortCallback *callback)
void SkRecordOptimize(SkRecord *record)
#define SkScalarCeilToInt(x)
Definition SkScalar.h:36
#define SkIntToScalar(x)
Definition SkScalar.h:57
static bool ShouldSkip(const SkTDArray< const char * > &strings, const char *name)
static void Parse(int argc, const char *const *argv)
SkCanvas * beginRecording(const SkRect &bounds, sk_sp< SkBBoxHierarchy > bbh)
sk_sp< SkPicture > finishRecordingAsPicture()
static sk_sp< SkPicture > MakeFromStream(SkStream *stream, const SkDeserialProcs *procs=nullptr)
auto visit(int i, F &&f) const -> decltype(f(SkRecords::NoOp()))
Definition SkRecord.h:45
int count() const
Definition SkRecord.h:38
static std::unique_ptr< SkStreamAsset > MakeFromFile(const char path[])
Definition SkStream.cpp:922
SK_API bool Encode(SkWStream *dst, const SkPixmap &src, const Options &options)
std::string printf(const char *fmt,...) SK_PRINTF_LIKE(1
dst
Definition cp.py:12
SkScalar w
SkScalar h
static SkRect MakeIWH(int w, int h)
Definition SkRect.h:623
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609
SkSerialImageProc fImageProc