Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: src/core/SkReadBuffer.cpp

Issue 1858323002: Enable flattening/unflattening with custom unflatten procs (Closed) Base URL: https://skia.googlesource.com/skia.git@flattenable
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkErrorInternals.h" 9 #include "SkErrorInternals.h"
10 #include "SkImage.h" 10 #include "SkImage.h"
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 if (0 == index) { 341 if (0 == index) {
342 return nullptr; // writer failed to give us the flattenable 342 return nullptr; // writer failed to give us the flattenable
343 } 343 }
344 index -= 1; // we stored the index-base-1 344 index -= 1; // we stored the index-base-1
345 if ((unsigned)index >= (unsigned)fFactoryCount) { 345 if ((unsigned)index >= (unsigned)fFactoryCount) {
346 this->validate(false); 346 this->validate(false);
347 return nullptr; 347 return nullptr;
348 } 348 }
349 factory = fFactoryArray[index]; 349 factory = fFactoryArray[index];
350 } else { 350 } else {
351 factory = (SkFlattenable::Factory)readFunctionPtr(); 351 SkString name;
352 if (nullptr == factory) { 352 this->readString(&name);
353 return nullptr; // writer failed to give us the flattenable 353
354 // Check if a custom Factory has been specified for this flattenable.
reed1 2016/04/11 15:07:48 Is this order (checking custom first) important? D
msarett 2016/04/19 18:03:50 Yes I think we should check custom first. I've th
355 factory = getCustomFactory(name.c_str());
356 if (!factory) {
357 factory = SkFlattenable::NameToFactory(name.c_str());
358 if (!factory) {
359 return nullptr; // writer failed to give us the flattenable
360 }
354 } 361 }
355 } 362 }
356 363
357 // if we get here, factory may still be null, but if that is the case, the 364 // if we get here, factory may still be null, but if that is the case, the
358 // failure was ours, not the writer. 365 // failure was ours, not the writer.
359 sk_sp<SkFlattenable> obj; 366 sk_sp<SkFlattenable> obj;
360 uint32_t sizeRecorded = fReader.readU32(); 367 uint32_t sizeRecorded = fReader.readU32();
361 if (factory) { 368 if (factory) {
362 size_t offset = fReader.offset(); 369 size_t offset = fReader.offset();
363 obj = (*factory)(*this); 370 obj = (*factory)(*this);
(...skipping 20 matching lines...) Expand all
384 return; 391 return;
385 } 392 }
386 } else { 393 } else {
387 if (nullptr == this->readFunctionPtr()) { 394 if (nullptr == this->readFunctionPtr()) {
388 return; 395 return;
389 } 396 }
390 } 397 }
391 uint32_t sizeRecorded = fReader.readU32(); 398 uint32_t sizeRecorded = fReader.readU32();
392 fReader.skip(sizeRecorded); 399 fReader.skip(sizeRecorded);
393 } 400 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698