1// SkPaints only have an SkPaintOptionsAndroid if SK_BUILD_FOR_ANDROID is true. 2#ifdef SK_BUILD_FOR_ANDROID 3 4#include "SkPaintOptionsAndroid.h" 5#include "SkOrderedReadBuffer.h" 6#include "SkOrderedWriteBuffer.h" 7#include "SkPaint.h" 8#include "Test.h" 9#include "TestClassDef.h" 10 11static size_t Reconstruct(const SkPaint& src, SkPaint* dst) { 12 SkOrderedWriteBuffer writer(64 /*arbitrary*/); 13 src.flatten(writer); 14 15 const size_t size = writer.bytesWritten(); 16 SkAutoMalloc bytes(size); 17 writer.writeToMemory(bytes.get()); 18 19 SkOrderedReadBuffer reader(bytes.get(), size); 20 dst->unflatten(reader); 21 22 return size; 23} 24 25static void android_options_serialization(skiatest::Reporter* reporter) { 26 // We want to make sure that Android's paint options survive a flatten/unflatten round trip. 27 // These are all non-default options. 28 SkPaintOptionsAndroid options; 29 options.setLanguage("ja-JP"); 30 options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant); 31 options.setUseFontFallbacks(true); 32 33 SkPaint paint; 34 paint.setPaintOptionsAndroid(options); 35 36 SkPaint reconstructed; 37 Reconstruct(paint, &reconstructed); 38 39 REPORTER_ASSERT(reporter, options == reconstructed.getPaintOptionsAndroid()); 40} 41DEFINE_TESTCLASS_SHORT(android_options_serialization); 42 43static void android_options_serialization_reverse(skiatest::Reporter* reporter) { 44 // Opposite test of above: make sure the serialized default values of a paint overwrite 45 // non-default values on the paint we're unflattening into. 46 const SkPaint defaultOptions; 47 48 SkPaintOptionsAndroid options; 49 options.setLanguage("ja-JP"); 50 options.setFontVariant(SkPaintOptionsAndroid::kElegant_Variant); 51 options.setUseFontFallbacks(true); 52 SkPaint nonDefaultOptions; 53 nonDefaultOptions.setPaintOptionsAndroid(options); 54 55 Reconstruct(defaultOptions, &nonDefaultOptions); 56 57 REPORTER_ASSERT(reporter, 58 defaultOptions.getPaintOptionsAndroid() == 59 nonDefaultOptions.getPaintOptionsAndroid()); 60} 61DEFINE_TESTCLASS_SHORT(android_options_serialization_reverse); 62 63static void android_options_size(skiatest::Reporter* reporter) { 64 // A paint with default android options should serialize to something smaller than 65 // a paint with non-default android options. 66 67 SkPaint defaultOptions; 68 69 SkPaintOptionsAndroid options; 70 options.setUseFontFallbacks(true); 71 SkPaint nonDefaultOptions; 72 nonDefaultOptions.setPaintOptionsAndroid(options); 73 74 SkPaint dummy; 75 76 REPORTER_ASSERT(reporter, 77 Reconstruct(defaultOptions, &dummy) < Reconstruct(nonDefaultOptions, &dummy)); 78} 79DEFINE_TESTCLASS_SHORT(android_options_size); 80 81#endif // SK_BUILD_FOR_ANDROID 82