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 11 static 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 25 static 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 } 41 DEFINE_TESTCLASS_SHORT(android_options_serialization); 42 43 static 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 } 61 DEFINE_TESTCLASS_SHORT(android_options_serialization_reverse); 62 63 static 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 } 79 DEFINE_TESTCLASS_SHORT(android_options_size); 80 81 #endif // SK_BUILD_FOR_ANDROID 82