SkData* SkValidatingSerializeFlattenable(SkFlattenable* flattenable) { SkWriteBuffer writer; writer.writeFlattenable(flattenable); size_t size = writer.bytesWritten(); auto data = SkData::MakeUninitialized(size); writer.writeToMemory(data->writable_data()); return data.release(); }
void SkImageFilter::flatten(SkWriteBuffer& buffer) const { buffer.writeInt(fInputCount); for (int i = 0; i < fInputCount; i++) { SkImageFilter* input = this->getInput(i); buffer.writeBool(input != nullptr); if (input != nullptr) { buffer.writeFlattenable(input); } } buffer.writeRect(fCropRect.rect()); buffer.writeUInt(fCropRect.flags()); }
static sk_sp<SkColorFilter> reincarnate_colorfilter(SkFlattenable* obj) { SkWriteBuffer wb; wb.writeFlattenable(obj); size_t size = wb.bytesWritten(); SkAutoSMalloc<1024> storage(size); // make a copy into storage wb.writeToMemory(storage.get()); SkReadBuffer rb(storage.get(), size); return rb.readColorFilter(); }
DEF_TEST(DashPathEffectTest_crbug_348821, r) { SkScalar intervals[] = { 1.76934361e+36f, 2.80259693e-45f }; // Values from bug. const int count = 2; SkScalar phase = SK_ScalarInfinity; // Used to force the bad fInitialDashLength = -1 path. SkAutoTUnref<SkDashPathEffect> dash(SkDashPathEffect::Create(intervals, count, phase)); // nullptr -> refuses to work with flattening framework. REPORTER_ASSERT(r, dash->getFactory() != nullptr); SkWriteBuffer buffer; buffer.writeFlattenable(dash); REPORTER_ASSERT(r, buffer.bytesWritten() > 12); // We'd write 12 if broken, >=40 if not. }
void SkPictureData::flatten(SkWriteBuffer& buffer) const { write_tag_size(buffer, SK_PICT_READER_TAG, fOpData->size()); buffer.writeByteArray(fOpData->bytes(), fOpData->size()); if (fPictureCount > 0) { write_tag_size(buffer, SK_PICT_PICTURE_TAG, fPictureCount); for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i]->flatten(buffer); } } if (fDrawableCount > 0) { write_tag_size(buffer, SK_PICT_DRAWABLE_TAG, fDrawableCount); for (int i = 0; i < fDrawableCount; i++) { buffer.writeFlattenable(fDrawableRefs[i]); } } // Write this picture playback's data into a writebuffer this->flattenToBuffer(buffer); buffer.write32(SK_PICT_EOF_TAG); }
void SkColorFilterShader::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fShader.get()); buffer.writeFlattenable(fFilter.get()); }
void SkColorFilterImageFilter::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeFlattenable(fColorFilter.get()); }
static void Flatten(SkWriteBuffer& buffer, const SkFlattenable& flattenable) { buffer.writeFlattenable(&flattenable); }
void SkComposeShader::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fShaderA.get()); buffer.writeFlattenable(fShaderB.get()); buffer.writeFlattenable(fMode.get()); }
/* Format: [oe0-factory][pe1-factory][pe0-size][pe0-data][pe1-data] */ void SkPairPathEffect::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fPE0); buffer.writeFlattenable(fPE1); }
void flatten(SkWriteBuffer& buffer) const override { buffer.writeFlattenable(fCompoundDrawable.get()); buffer.writeFlattenable(fIntDrawable.get()); buffer.writeFlattenable(fDrawable.get()); }
static void Flatten(SkWriteBuffer& buffer, const SkShader& shader) { buffer.writeFlattenable(&shader); }
/* Format: [oe0-factory][pe1-factory][pe0-size][pe0-data][pe1-data] */ void SkPairPathEffect::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeFlattenable(fPE0); buffer.writeFlattenable(fPE1); }
void SkOpPE::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fOne.get()); buffer.writeFlattenable(fTwo.get()); buffer.write32(fOp); }
void SkNormalMapSourceImpl::flatten(SkWriteBuffer& buf) const { this->INHERITED::flatten(buf); buf.writeFlattenable(fMapShader.get()); buf.writeMatrix(fInvCTM); }
void SkXfermodeImageFilter::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeFlattenable(fMode); }
void flatten(SkWriteBuffer& buffer) const override { buffer.writeFlattenable(fOuter.get()); buffer.writeFlattenable(fInner.get()); }
void SkComposeShader::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeFlattenable(fShaderA); buffer.writeFlattenable(fShaderB); buffer.writeFlattenable(fMode); }
// Generic case for flattenables static void Write(SkWriteBuffer& writer, const T* flattenable) { writer.writeFlattenable(flattenable); }
void SkLocalMatrixShader::flatten(SkWriteBuffer& buffer) const { buffer.writeMatrix(this->getLocalMatrix()); buffer.writeFlattenable(fProxyShader.get()); }
void SkRectShaderImageFilter::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeFlattenable(fShader); }
void SkComposeShader::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fDst.get()); buffer.writeFlattenable(fSrc.get()); buffer.write32((int)fMode); buffer.writeScalar(fLerpT); }