skia2/tools/flatten.cpp
bungeman 60e0fee6d4 Remove include of stdlib.h from SkTypes.h.
Unfortunately, immintrin.h (which is also included by SkTypes)
includes xmmintrin.h which includes mm_malloc.h which includes
stdlib.h for malloc even though, from the implementation, it is
difficult to see why.

Fortunately, arm_neon.h does not seem to be involved in such
shenanigans, so building for Android will keep things sane.

TBR=reed@google.com
Doesn't change Skia API, just moves an include.

Review URL: https://codereview.chromium.org/1313203003
2015-08-26 05:15:46 -07:00

52 lines
1.7 KiB
C++

/*
* Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkData.h"
#include "SkForceLinking.h"
#include "SkImageGenerator.h"
#include "SkPicture.h"
#include "SkPictureRecorder.h"
#include "SkStream.h"
#include <stdlib.h>
#include <stdio.h>
__SK_FORCE_IMAGE_DECODER_LINKING;
#define ASSERTF(cond, fmt, ...) if (!(cond)) { fprintf(stderr, fmt"\n", __VA_ARGS__); exit(1); }
static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) {
SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size));
return encoded && SkInstallDiscardablePixelRef(encoded, dst);
}
int main(int argc, char** argv) {
ASSERTF(argc == 3, "usage: %s nested.skp flat.skp", argv[0]);
const char *nestedPath = argv[1],
*flatPath = argv[2];
// Read nested.skp.
SkFILEStream stream(nestedPath);
ASSERTF(stream.isValid(), "Couldn't read %s.", nestedPath);
SkAutoTUnref<const SkPicture> nested(SkPicture::CreateFromStream(&stream, &lazy_decode_bitmap));
ASSERTF(nested, "Couldn't parse %s as a picture.", nestedPath);
// Play it back into a new picture using kPlaybackDrawPicture_RecordFlag.
SkPictureRecorder recorder;
uint32_t flags = SkPictureRecorder::kPlaybackDrawPicture_RecordFlag;
nested->playback(recorder.beginRecording(nested->cullRect(), nullptr, flags));
SkAutoTUnref<const SkPicture> flat(recorder.endRecordingAsPicture());
// Write out that flat.skp
SkFILEWStream wstream(flatPath);
ASSERTF(wstream.isValid(), "Could not open %s.", flatPath);
flat->serialize(&wstream);
wstream.flush();
return 0;
}