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

Unified Diff: tests/SwizzlerTest.cpp

Issue 1055743003: Swizzler changes Index8 and 565 (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Create codec before pushing srcs Created 5 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 side-by-side diff with in-line comments
Download patch
« dm/DMSrcSink.cpp ('K') | « src/codec/SkSwizzler.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/SwizzlerTest.cpp
diff --git a/tests/SwizzlerTest.cpp b/tests/SwizzlerTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8cb735f79b55647be7b8653a1c1adc46630f0d4a
--- /dev/null
+++ b/tests/SwizzlerTest.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkSwizzler.h"
+#include "Test.h"
+
+static void check_fill(skiatest::Reporter* r,
+ SkColorType colorType,
+ uint32_t width,
+ uint32_t height,
+ uint32_t row,
scroggo 2015/04/08 17:21:27 nit: startRow?
msarett 2015/04/08 19:35:40 Done.
+ size_t rowBytes,
+ size_t totalBytes,
+ uint32_t input,
scroggo 2015/04/08 17:21:27 Maybe rename this to colorOrIndex? (Same for SkSwi
msarett 2015/04/08 19:35:40 Done.
+ SkPMColor* colorTable) {
+
+ // Create fake image data where every bytes has a value of 0xFF
scroggo 2015/04/08 17:21:27 nit: byte*
msarett 2015/04/08 19:35:40 Done.
+ SkAutoTDelete<uint8_t> imageData((uint8_t*) sk_malloc_throw(totalBytes));
+ memset(imageData.get(), 0xFF, totalBytes);
+
+ // Create fake image info (alpha type does not matter)
+ SkImageInfo imageInfo = SkImageInfo::Make(width, height, colorType, kUnknown_SkAlphaType);
+
+ // Fill image with zeros starting at the indicated row
+ SkSwizzler::Fill(imageData.get(), imageInfo, rowBytes, row, input, colorTable);
+
+ // Ensure that the filled pixels are zero
+ // The bots should catch any memory corruption
+ for (uint32_t y = row; y < height; y++) {
+ uint8_t* indexPtr = imageData.get() + y * rowBytes;
+ uint32_t* colorPtr = (uint32_t*) indexPtr;
+ for (uint32_t x = 0; x < width; x++) {
+ if (kIndex_8_SkColorType == colorType) {
+ REPORTER_ASSERT(r, 0 == indexPtr[x]);
+ } else {
+ REPORTER_ASSERT(r, 0 == colorPtr[x]);
+ }
+ }
+ }
+}
+
+// Each of these tests provide valid, but sometimes strange, values of width, height, and rowBytes.
+// We ensure that Fill() works properly and does not corrupt memory for all of these inputs.
+DEF_TEST(SwizzlerFill, r) {
+
+ // Fill using an index into a color table
+ SkPMColor colorTable[256];
+ colorTable[0] = 0xFFFFFFFF;
scroggo 2015/04/08 17:21:27 Why did you choose these colors? It seems like sin
msarett 2015/04/08 19:35:40 The tests for "an index to a color" always use 1 a
+ colorTable[1] = 0;
scroggo 2015/04/08 17:21:27 Do we ever use values outside of the first two ent
msarett 2015/04/08 19:35:40 I thought it made sense because this is the most l
scroggo 2015/04/08 20:37:37 In this case, my concern is more about clarity tha
msarett 2015/04/09 13:02:47 Makes sense, I'm in agreement.
+ // Zero dimensional cases
+ check_fill(r, kN32_SkColorType, 0, 1, 0, 0, 0, 1, colorTable);
scroggo 2015/04/08 17:21:27 I'm having trouble following all these cases with
msarett 2015/04/08 19:35:40 I agree that this benefits from better organizatio
+ check_fill(r, kN32_SkColorType, 0, 1, 0, 10, 0, 1, colorTable);
scroggo 2015/04/08 17:21:27 Do we ever have a case where the dst is not four b
msarett 2015/04/08 19:35:40 This is implicitly covered by odd numbers of row b
+ // Cases with different row padding
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 40, 400, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 41, 410, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 42, 420, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 43, 430, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 44, 440, 1, colorTable);
+ // Cases that neglect to pad the bottom row
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 41, 409, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 42, 418, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 43, 427, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 44, 436, 1, colorTable);
+ // Cases where we do not fill all of the rows
+ check_fill(r, kN32_SkColorType, 10, 10, 1, 40, 400, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 2, 41, 410, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 4, 42, 420, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 6, 43, 430, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 7, 44, 440, 1, colorTable);
+ check_fill(r, kN32_SkColorType, 10, 10, 9, 41, 409, 1, colorTable);
+
+ // Fill using an index
+ // Zero dimensional cases
+ check_fill(r, kIndex_8_SkColorType, 0, 1, 0, 0, 0, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 0, 1, 0, 10, 0, 0, NULL);
+ // Cases with different row padding
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 10, 100, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 11, 110, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 12, 120, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 13, 130, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 14, 140, 0, NULL);
+ // Cases that neglect to pad the bottom row
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 11, 109, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 12, 118, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 13, 127, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 0, 14, 136, 0, NULL);
+ // Cases where we do not fill all of the rows
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 1, 10, 100, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 2, 11, 110, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 4, 12, 120, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 6, 13, 130, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 7, 14, 140, 0, NULL);
+ check_fill(r, kIndex_8_SkColorType, 10, 10, 9, 11, 109, 0, NULL);
+
+ // Fill using a color
+ // Zero dimensional cases
+ check_fill(r, kN32_SkColorType, 0, 1, 0, 0, 0, 0, NULL);
+ check_fill(r, kN32_SkColorType, 0, 1, 0, 10, 0, 0, NULL);
+ // Cases with different row padding
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 40, 400, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 41, 410, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 42, 420, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 43, 430, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 44, 440, 0, NULL);
+ // Cases that neglect to pad the bottom row
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 41, 409, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 42, 418, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 43, 427, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 0, 44, 436, 0, NULL);
+ // Cases where we do not fill all of the rows
+ check_fill(r, kN32_SkColorType, 10, 10, 1, 40, 400, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 2, 41, 410, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 4, 42, 420, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 6, 43, 430, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 7, 44, 440, 0, NULL);
+ check_fill(r, kN32_SkColorType, 10, 10, 9, 41, 409, 0, NULL);
+}
« dm/DMSrcSink.cpp ('K') | « src/codec/SkSwizzler.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698