1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6dde0956375e87027df2fdd80d430dd819c217aacreed@google.com */ 7dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 895e3c058ef633782f7549e9e1c2727d60dbc8ee5Hal Canary#include "SkAutoMalloc.h" 9dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com#include "SkRandom.h" 10dde0956375e87027df2fdd80d430dd819c217aacreed@google.com#include "SkReader32.h" 11dde0956375e87027df2fdd80d430dd819c217aacreed@google.com#include "SkWriter32.h" 128f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 13dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 141cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.comstatic void check_contents(skiatest::Reporter* reporter, const SkWriter32& writer, 151cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com const void* expected, size_t size) { 161cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com SkAutoSMalloc<256> storage(size); 171cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com REPORTER_ASSERT(reporter, writer.bytesWritten() == size); 181cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com writer.flatten(storage.get()); 191cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com REPORTER_ASSERT(reporter, !memcmp(storage.get(), expected, size)); 201cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com} 211cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com 228b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com 238b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.comstatic void test_reserve(skiatest::Reporter* reporter) { 248b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com // There used to be a bug where we'd assert your first reservation had to 258b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com // fit in external storage if you used it. This would crash in debug mode. 268b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com uint8_t storage[4]; 2719382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkWriter32 writer(storage, sizeof(storage)); 288b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com writer.reserve(40); 298b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com} 308b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com 3147fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.orgstatic void test_string_null(skiatest::Reporter* reporter) { 3247fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.org uint8_t storage[8]; 3319382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkWriter32 writer(storage, sizeof(storage)); 3447fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.org 3596fcdcc219d2a0d3579719b84b28bede76efba64halcanary // Can we write nullptr? 3696fcdcc219d2a0d3579719b84b28bede76efba64halcanary writer.writeString(nullptr); 370038c12f337b7037ef698e2723099c7e3b19c4camtklein@google.com const int32_t expected[] = { 0x0, 0x0 }; 380038c12f337b7037ef698e2723099c7e3b19c4camtklein@google.com check_contents(reporter, writer, expected, sizeof(expected)); 3947fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.org} 4047fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.org 411cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.comstatic void test_rewind(skiatest::Reporter* reporter) { 4219382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkSWriter32<32> writer; 431cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com int32_t array[3] = { 1, 2, 4 }; 44a27096b4740775ae141fd0abaf456d706065c5eeskia.committer@gmail.com 451cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com REPORTER_ASSERT(reporter, 0 == writer.bytesWritten()); 461cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(array); ++i) { 471cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com writer.writeInt(array[i]); 481cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com } 491cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com check_contents(reporter, writer, array, sizeof(array)); 501cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com 511cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com writer.rewindToOffset(2*sizeof(int32_t)); 521cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com REPORTER_ASSERT(reporter, sizeof(array) - 4 == writer.bytesWritten()); 531cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com writer.writeInt(3); 541cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com REPORTER_ASSERT(reporter, sizeof(array) == writer.bytesWritten()); 551cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com array[2] = 3; 561cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com check_contents(reporter, writer, array, sizeof(array)); 57d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com 58d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com // test rewinding past allocated chunks. This used to crash because we 59d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com // didn't truncate our link-list after freeing trailing blocks 60d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com { 6119382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkWriter32 writer; 62d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com for (int i = 0; i < 100; ++i) { 63d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com writer.writeInt(i); 64d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com } 65d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com REPORTER_ASSERT(reporter, 100*4 == writer.bytesWritten()); 66d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com for (int j = 100*4; j >= 0; j -= 16) { 67d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com writer.rewindToOffset(j); 68d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com } 69d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com REPORTER_ASSERT(reporter, writer.bytesWritten() < 16); 70d7e27822030b5ab7729e32c6d29227210dfe88abreed@google.com } 711cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com} 721cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com 7351c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.comstatic void test_ptr(skiatest::Reporter* reporter) { 7419382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkSWriter32<32> writer; 75d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 7651c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com void* p0 = reporter; 7751c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com void* p1 = &writer; 7851c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 7951c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com // try writing ptrs where at least one of them may be at a non-multiple of 8051c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com // 8 boundary, to confirm this works on 64bit machines. 8151c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 8251c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com writer.writePtr(p0); 8351c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com writer.write8(0x33); 8451c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com writer.writePtr(p1); 8551c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com writer.write8(0x66); 8651c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 874469938e92d779dff05e745559e67907bbf21e78reed@google.com size_t size = writer.bytesWritten(); 8851c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com REPORTER_ASSERT(reporter, 2 * sizeof(void*) + 2 * sizeof(int32_t)); 8951c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 9051c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com char buffer[32]; 9151c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com SkASSERT(sizeof(buffer) >= size); 9251c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com writer.flatten(buffer); 9351c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 9451c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com SkReader32 reader(buffer, size); 9551c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com REPORTER_ASSERT(reporter, reader.readPtr() == p0); 9651c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com REPORTER_ASSERT(reporter, reader.readInt() == 0x33); 9751c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com REPORTER_ASSERT(reporter, reader.readPtr() == p1); 9851c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com REPORTER_ASSERT(reporter, reader.readInt() == 0x66); 9951c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com} 10051c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com 101dde0956375e87027df2fdd80d430dd819c217aacreed@google.comstatic void test1(skiatest::Reporter* reporter, SkWriter32* writer) { 102dde0956375e87027df2fdd80d430dd819c217aacreed@google.com const uint32_t data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 103dde0956375e87027df2fdd80d430dd819c217aacreed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(data); ++i) { 1044469938e92d779dff05e745559e67907bbf21e78reed@google.com REPORTER_ASSERT(reporter, i*4 == writer->bytesWritten()); 105dde0956375e87027df2fdd80d430dd819c217aacreed@google.com writer->write32(data[i]); 106536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, data[i] == writer->readTAt<uint32_t>(i * 4)); 107dde0956375e87027df2fdd80d430dd819c217aacreed@google.com } 108dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 109dde0956375e87027df2fdd80d430dd819c217aacreed@google.com char buffer[sizeof(data)]; 1104469938e92d779dff05e745559e67907bbf21e78reed@google.com REPORTER_ASSERT(reporter, sizeof(buffer) == writer->bytesWritten()); 111dde0956375e87027df2fdd80d430dd819c217aacreed@google.com writer->flatten(buffer); 112dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, !memcmp(data, buffer, sizeof(buffer))); 113dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 114dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 115dde0956375e87027df2fdd80d430dd819c217aacreed@google.comstatic void test2(skiatest::Reporter* reporter, SkWriter32* writer) { 116dde0956375e87027df2fdd80d430dd819c217aacreed@google.com static const char gStr[] = "abcdefghimjklmnopqrstuvwxyz"; 117dde0956375e87027df2fdd80d430dd819c217aacreed@google.com size_t i; 118dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 119dde0956375e87027df2fdd80d430dd819c217aacreed@google.com size_t len = 0; 120dde0956375e87027df2fdd80d430dd819c217aacreed@google.com for (i = 0; i <= 26; ++i) { 121dde0956375e87027df2fdd80d430dd819c217aacreed@google.com len += SkWriter32::WriteStringSize(gStr, i); 122dde0956375e87027df2fdd80d430dd819c217aacreed@google.com writer->writeString(gStr, i); 123dde0956375e87027df2fdd80d430dd819c217aacreed@google.com } 1244469938e92d779dff05e745559e67907bbf21e78reed@google.com REPORTER_ASSERT(reporter, writer->bytesWritten() == len); 125dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 126dde0956375e87027df2fdd80d430dd819c217aacreed@google.com SkAutoMalloc storage(len); 127dde0956375e87027df2fdd80d430dd819c217aacreed@google.com writer->flatten(storage.get()); 128dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 129dde0956375e87027df2fdd80d430dd819c217aacreed@google.com SkReader32 reader; 130dde0956375e87027df2fdd80d430dd819c217aacreed@google.com reader.setMemory(storage.get(), len); 131dde0956375e87027df2fdd80d430dd819c217aacreed@google.com for (i = 0; i <= 26; ++i) { 132dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, !reader.eof()); 133dde0956375e87027df2fdd80d430dd819c217aacreed@google.com const char* str = reader.readString(&len); 134dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, i == len); 135dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, strlen(str) == len); 136dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, !memcmp(str, gStr, len)); 137e9617eb352483bf152dfd3a38083ffb99c4694b9scroggo@google.com // Ensure that the align4 of the string is padded with zeroes. 138e9617eb352483bf152dfd3a38083ffb99c4694b9scroggo@google.com size_t alignedSize = SkAlign4(len + 1); 139e9617eb352483bf152dfd3a38083ffb99c4694b9scroggo@google.com for (size_t j = len; j < alignedSize; j++) { 140e9617eb352483bf152dfd3a38083ffb99c4694b9scroggo@google.com REPORTER_ASSERT(reporter, 0 == str[j]); 141e9617eb352483bf152dfd3a38083ffb99c4694b9scroggo@google.com } 142dde0956375e87027df2fdd80d430dd819c217aacreed@google.com } 143dde0956375e87027df2fdd80d430dd819c217aacreed@google.com REPORTER_ASSERT(reporter, reader.eof()); 144dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 145dde0956375e87027df2fdd80d430dd819c217aacreed@google.com 146dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.comstatic void testWritePad(skiatest::Reporter* reporter, SkWriter32* writer) { 147dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com // Create some random data to write. 148565901db954c231840750ea955ed31b820b9ade8scroggo const size_t dataSize = 10; 149dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 150565901db954c231840750ea955ed31b820b9ade8scroggo SkAutoTMalloc<uint32_t> originalData(dataSize); 151dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com { 152e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand(0); 153565901db954c231840750ea955ed31b820b9ade8scroggo for (size_t i = 0; i < dataSize; i++) { 154565901db954c231840750ea955ed31b820b9ade8scroggo originalData[(int) i] = rand.nextU(); 155dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com } 156dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 157dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com // Write the random data to the writer at different lengths for 158dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com // different alignments. 159dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com for (size_t len = 0; len < dataSize; len++) { 160dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com writer->writePad(originalData.get(), len); 161dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com } 162dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com } 163dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 164fbaace082745a0e301186b2d3b84af62e2fb87ecbsalomon size_t totalBytes = writer->bytesWritten(); 165dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 166dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com SkAutoMalloc readStorage(totalBytes); 167dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com writer->flatten(readStorage.get()); 168dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 169dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com SkReader32 reader; 170dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com reader.setMemory(readStorage.get(), totalBytes); 171dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 172dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com for (size_t len = 0; len < dataSize; len++) { 173dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com const char* readPtr = static_cast<const char*>(reader.skip(len)); 174dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com // Ensure that the data read is the same as what was written. 175dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com REPORTER_ASSERT(reporter, memcmp(readPtr, originalData.get(), len) == 0); 176dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com // Ensure that the rest is padded with zeroes. 177dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com const char* stop = readPtr + SkAlign4(len); 178dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com readPtr += len; 179dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com while (readPtr < stop) { 180dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com REPORTER_ASSERT(reporter, *readPtr++ == 0); 181dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com } 182dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com } 183dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com} 184dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 185536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.orgstatic void testOverwriteT(skiatest::Reporter* reporter, SkWriter32* writer) { 186536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const size_t padding = 64; 187536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 188536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const uint32_t uint1 = 0x12345678; 189536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const uint32_t uint2 = 0x98765432; 190536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const SkScalar scalar1 = 1234.5678f; 191536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const SkScalar scalar2 = 9876.5432f; 192536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const SkRect rect1 = SkRect::MakeXYWH(1, 2, 3, 4); 193536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org const SkRect rect2 = SkRect::MakeXYWH(5, 6, 7, 8); 194536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 195536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org for (size_t i = 0; i < (padding / 4); ++i) { 196536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->write32(0); 197536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org } 198536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 199536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->write32(uint1); 200536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->writeRect(rect1); 201536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->writeScalar(scalar1); 202536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 203536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org for (size_t i = 0; i < (padding / 4); ++i) { 204536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->write32(0); 205536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org } 206536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 207536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<uint32_t>(padding) == uint1); 208536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<SkRect>(padding + sizeof(uint32_t)) == rect1); 209536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<SkScalar>( 210536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org padding + sizeof(uint32_t) + sizeof(SkRect)) == scalar1); 211536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 212536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->overwriteTAt(padding, uint2); 213536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->overwriteTAt(padding + sizeof(uint32_t), rect2); 214536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer->overwriteTAt(padding + sizeof(uint32_t) + sizeof(SkRect), scalar2); 215536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 216536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<uint32_t>(padding) == uint2); 217536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<SkRect>(padding + sizeof(uint32_t)) == rect2); 218536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org REPORTER_ASSERT(reporter, writer->readTAt<SkScalar>( 219536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org padding + sizeof(uint32_t) + sizeof(SkRect)) == scalar2); 220536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org} 221536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 22219382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.orgDEF_TEST(Writer32_dynamic, reporter) { 22319382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkWriter32 writer; 22419382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test1(reporter, &writer); 225d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 22619382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); 22719382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test2(reporter, &writer); 228dd3948899725041bf52e3a4eea922f9961ee0a9bscroggo@google.com 22919382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); 23019382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org testWritePad(reporter, &writer); 231536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 232536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer.reset(); 233536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org testOverwriteT(reporter, &writer); 23419382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org} 235d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 23619382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.orgDEF_TEST(Writer32_small, reporter) { 23719382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkSWriter32<8 * sizeof(intptr_t)> writer; 23819382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test1(reporter, &writer); 23919382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); // should just rewind our storage 24019382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test2(reporter, &writer); 241d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 24219382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); 24319382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org testWritePad(reporter, &writer); 244536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 245536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer.reset(); 246536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org testOverwriteT(reporter, &writer); 24719382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org} 248d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 24919382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.orgDEF_TEST(Writer32_large, reporter) { 25019382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org SkSWriter32<1024 * sizeof(intptr_t)> writer; 25119382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test1(reporter, &writer); 25219382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); // should just rewind our storage 25319382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org test2(reporter, &writer); 254d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 25519382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org writer.reset(); 25619382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org testWritePad(reporter, &writer); 257536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org 258536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org writer.reset(); 259536ac5e20c2ec2008993c0677ba8cbc5ae0f34cfcommit-bot@chromium.org testOverwriteT(reporter, &writer); 26019382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.org} 261d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 26219382421b916aab00be7265815ba4e2690adf2c9commit-bot@chromium.orgDEF_TEST(Writer32_misc, reporter) { 2638b4ba6373559026f7e24de1b8b487d8b72256dc1mtklein@google.com test_reserve(reporter); 26447fa13640b7c8615aa7aee0d5b1d63a7bd6ed44ecommit-bot@chromium.org test_string_null(reporter); 26551c62a6cfadc302bb65bb5a98e358c93223dc73freed@google.com test_ptr(reporter); 2661cf58d03a87e1ff17cd47e9de3da4c678456618dreed@google.com test_rewind(reporter); 267dde0956375e87027df2fdd80d430dd819c217aacreed@google.com} 268c30dcb9b128887c7e16afe32fdf35105cc42380bcommit-bot@chromium.org 269f70b531daaf47db1ee95c70da9843f1dd1f418d3reedDEF_TEST(Writer32_data, reporter) { 270f70b531daaf47db1ee95c70da9843f1dd1f418d3reed const char* str = "0123456789"; 27138d909ec2875f79952de08f36adfaac5680d2c53bungeman sk_sp<SkData> data0(SkData::MakeWithCString(str)); 27238d909ec2875f79952de08f36adfaac5680d2c53bungeman sk_sp<SkData> data1(SkData::MakeEmpty()); 273f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 274f70b531daaf47db1ee95c70da9843f1dd1f418d3reed const size_t sizes[] = { 275f70b531daaf47db1ee95c70da9843f1dd1f418d3reed SkWriter32::WriteDataSize(nullptr), 27638d909ec2875f79952de08f36adfaac5680d2c53bungeman SkWriter32::WriteDataSize(data0.get()), 27738d909ec2875f79952de08f36adfaac5680d2c53bungeman SkWriter32::WriteDataSize(data1.get()), 278f70b531daaf47db1ee95c70da9843f1dd1f418d3reed }; 2799d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 280f70b531daaf47db1ee95c70da9843f1dd1f418d3reed SkSWriter32<1000> writer; 281f70b531daaf47db1ee95c70da9843f1dd1f418d3reed size_t sizeWritten = 0; 282f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 283f70b531daaf47db1ee95c70da9843f1dd1f418d3reed writer.writeData(nullptr); 284f70b531daaf47db1ee95c70da9843f1dd1f418d3reed sizeWritten += sizes[0]; 285f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, sizeWritten == writer.bytesWritten()); 2869d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 28738d909ec2875f79952de08f36adfaac5680d2c53bungeman writer.writeData(data0.get()); 288f70b531daaf47db1ee95c70da9843f1dd1f418d3reed sizeWritten += sizes[1]; 289f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, sizeWritten == writer.bytesWritten()); 290f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 29138d909ec2875f79952de08f36adfaac5680d2c53bungeman writer.writeData(data1.get()); 292f70b531daaf47db1ee95c70da9843f1dd1f418d3reed sizeWritten += sizes[2]; 293f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, sizeWritten == writer.bytesWritten()); 294f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 295fde05114e6c4107b36e1aa571c64d31def40f613reed auto result(writer.snapshotAsData()); 296f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 297f70b531daaf47db1ee95c70da9843f1dd1f418d3reed SkReader32 reader(result->data(), result->size()); 298fde05114e6c4107b36e1aa571c64d31def40f613reed auto d0(reader.readData()), 299fde05114e6c4107b36e1aa571c64d31def40f613reed d1(reader.readData()), 300fde05114e6c4107b36e1aa571c64d31def40f613reed d2(reader.readData()); 301f70b531daaf47db1ee95c70da9843f1dd1f418d3reed 302f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, 0 == d0->size()); 303f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, strlen(str)+1 == d1->size()); 304f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, !memcmp(str, d1->data(), strlen(str)+1)); 305f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, 0 == d2->size()); 3069d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 307f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, reader.offset() == sizeWritten); 308f70b531daaf47db1ee95c70da9843f1dd1f418d3reed REPORTER_ASSERT(reporter, reader.eof()); 309f70b531daaf47db1ee95c70da9843f1dd1f418d3reed} 310