| /* | |
| * Copyright 2022 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "tests/Test.h" | |
| #include "src/core/SkPaintParamsKey.h" | |
| #include "src/core/SkShaderCodeDictionary.h" | |
| #include "experimental/graphite/src/ContextPriv.h" | |
| namespace { | |
| std::unique_ptr<SkPaintParamsKey> create_key(SkShaderCodeDictionary* dict, | |
| int dummySnippetID, | |
| int size) { | |
| SkPaintParamsKeyBuilder builder(dict); | |
| builder.beginBlock(dummySnippetID); | |
| for (int i = 0; i < size; ++i) { | |
| builder.addByte(i % 256); | |
| } | |
| builder.endBlock(); | |
| return builder.snap(); | |
| } | |
| } // anonymous namespace | |
| DEF_GRAPHITE_TEST_FOR_CONTEXTS(KeyTest, reporter, context) { | |
| auto dict = context->priv().shaderCodeDictionary(); | |
| static const int kMaxBlockDataSize = SkPaintParamsKey::kMaxBlockSize - | |
| SkPaintParamsKey::kBlockHeaderSizeInBytes; | |
| std::unique_ptr<SkPaintParamsKey> key; | |
| // invalid code snippet ID | |
| key = create_key(dict, kBuiltInCodeSnippetIDCount, kMaxBlockDataSize); | |
| REPORTER_ASSERT(reporter, key->sizeInBytes() == SkPaintParamsKey::kBlockHeaderSizeInBytes); | |
| int dummySnippetID = dict->addUserDefinedSnippet(); | |
| // _Just_ on the edge of being too big | |
| key = create_key(dict, dummySnippetID, kMaxBlockDataSize); | |
| REPORTER_ASSERT(reporter, key->sizeInBytes() == SkPaintParamsKey::kMaxBlockSize); | |
| // Too big | |
| key = create_key(dict, dummySnippetID, 1024); | |
| REPORTER_ASSERT(reporter, key->sizeInBytes() == SkPaintParamsKey::kBlockHeaderSizeInBytes); | |
| } |