/* * 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 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 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); }