Lines Matching defs:buffer
82 static void write_tag_size(SkWriteBuffer& buffer, uint32_t tag, size_t size) {
83 buffer.writeUInt(tag);
84 buffer.writeUInt(SkToU32(size));
143 void SkPictureData::flattenToBuffer(SkWriteBuffer& buffer, bool textBlobsOnly) const {
147 write_tag_size(buffer, SK_PICT_PAINT_BUFFER_TAG, numPaints);
149 buffer.writePaint(paint);
155 write_tag_size(buffer, SK_PICT_PATH_BUFFER_TAG, numPaths);
156 buffer.writeInt(numPaths);
158 buffer.writePath(path);
164 write_tag_size(buffer, SK_PICT_TEXTBLOB_BUFFER_TAG, fTextBlobs.count());
166 SkTextBlobPriv::Flatten(*blob, buffer);
172 write_tag_size(buffer, SK_PICT_VERTICES_BUFFER_TAG, fVertices.count());
174 vert->priv().encode(buffer);
179 write_tag_size(buffer, SK_PICT_IMAGE_BUFFER_TAG, fImages.count());
181 buffer.writeImage(img.get());
215 // factories and typefaces by first serializing to an in-memory write buffer.
216 SkFactorySet factSet; // buffer refs factSet, so factSet must come first.
217 SkBinaryWriteBuffer buffer;
218 buffer.setFactoryRecorder(sk_ref_sp(&factSet));
219 buffer.setSerialProcs(skip_typeface_proc(procs));
220 buffer.setTypefaceRecorder(sk_ref_sp(typefaceSet));
221 this->flattenToBuffer(buffer, textBlobsOnly);
236 // We need to write factories before we write the buffer.
237 // We need to write typefaces before we write the buffer or any sub-picture.
244 // Write the buffer.
245 write_tag_size(stream, SK_PICT_BUFFER_SIZE_TAG, buffer.bytesWritten());
246 buffer.writeToStream(stream);
259 void SkPictureData::flatten(SkWriteBuffer& buffer) const {
260 write_tag_size(buffer, SK_PICT_READER_TAG, fOpData->size());
261 buffer.writeByteArray(fOpData->bytes(), fOpData->size());
264 write_tag_size(buffer, SK_PICT_PICTURE_TAG, fPictures.count());
266 SkPicturePriv::Flatten(pic, buffer);
271 write_tag_size(buffer, SK_PICT_DRAWABLE_TAG, fDrawables.count());
273 buffer.writeFlattenable(draw.get());
278 this->flattenToBuffer(buffer, false);
279 buffer.write32(SK_PICT_EOF_TAG);
346 SkReadBuffer buffer(storage.get(), size);
347 buffer.setVersion(fInfo.getVersion());
352 fFactoryPlayback->setupBuffer(buffer);
353 buffer.setDeserialProcs(procs);
357 fTFPlayback.setupBuffer(buffer);
360 topLevelTFPlayback->setupBuffer(buffer);
363 while (!buffer.eof() && buffer.isValid()) {
364 tag = buffer.readUInt();
365 size = buffer.readUInt();
366 this->parseBufferTag(buffer, tag, size);
368 if (!buffer.isValid()) {
376 static sk_sp<SkImage> create_image_from_buffer(SkReadBuffer& buffer) {
377 return buffer.readImage();
380 static sk_sp<SkDrawable> create_drawable_from_buffer(SkReadBuffer& buffer) {
381 return sk_sp<SkDrawable>((SkDrawable*)buffer.readFlattenable(SkFlattenable::kSkDrawable_Type));
386 bool new_array_from_buffer(SkReadBuffer& buffer, uint32_t inCount,
388 if (!buffer.validate(array.empty() && SkTFitsIn<int>(inCount))) {
396 auto obj = factory(buffer);
398 if (!buffer.validate(obj != nullptr)) {
409 void SkPictureData::parseBufferTag(SkReadBuffer& buffer, uint32_t tag, uint32_t size) {
412 if (!buffer.validate(SkTFitsIn<int>(size))) {
418 fPaints.push_back(buffer.readPaint());
419 if (!buffer.isValid()) {
426 const int count = buffer.readInt();
427 if (!buffer.validate(count >= 0)) {
431 buffer.readPath(&fPaths.push_back());
432 if (!buffer.isValid()) {
438 new_array_from_buffer(buffer, size, fTextBlobs, SkTextBlobPriv::MakeFromBuffer);
441 new_array_from_buffer(buffer, size, fVertices, SkVerticesPriv::Decode);
444 new_array_from_buffer(buffer, size, fImages, create_image_from_buffer);
447 // Preflight check that we can initialize all data from the buffer
449 if (!buffer.validateCanReadN<uint8_t>(size)) {
453 if (!buffer.readByteArray(data->writable_data(), size) ||
454 !buffer.validate(nullptr == fOpData)) {
461 new_array_from_buffer(buffer, size, fPictures, SkPicturePriv::MakeFromBuffer);
464 new_array_from_buffer(buffer, size, fDrawables, create_drawable_from_buffer);
467 buffer.validate(false); // The tag was invalid.
487 SkPictureData* SkPictureData::CreateFromBuffer(SkReadBuffer& buffer,
490 buffer.setVersion(info.getVersion());
492 if (!data->parseBuffer(buffer)) {
517 bool SkPictureData::parseBuffer(SkReadBuffer& buffer) {
518 while (buffer.isValid()) {
519 uint32_t tag = buffer.readUInt();
523 this->parseBufferTag(buffer, tag, buffer.readUInt());
527 if (!buffer.validate(this->opData() != nullptr)) {