Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
shader_archive_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <sstream>
6#include <string>
7
11#include "impeller/shader_archive/shader_archive_flatbuffers.h"
13
14namespace impeller {
15namespace testing {
16
17static std::shared_ptr<fml::Mapping> CreateMappingFromString(
18 std::string p_string) {
19 auto string = std::make_shared<std::string>(std::move(p_string));
20 return std::make_shared<fml::NonOwnedMapping>(
21 reinterpret_cast<const uint8_t*>(string->data()), string->size(),
22 [string](auto, auto) {});
23}
24
25const std::string CreateStringFromMapping(const fml::Mapping& mapping) {
26 return std::string{reinterpret_cast<const char*>(mapping.GetMapping()),
27 mapping.GetSize()};
28}
29
30TEST(ShaderArchiveTest, CanReadAndWriteBlobs) {
32 ASSERT_TRUE(writer.AddShader(ArchiveShaderType::kVertex, "Hello",
33 CreateMappingFromString("World")));
34 ASSERT_TRUE(writer.AddShader(ArchiveShaderType::kFragment, "Foo",
36 ASSERT_TRUE(writer.AddShader(ArchiveShaderType::kVertex, "Baz",
38 ASSERT_TRUE(writer.AddShader(ArchiveShaderType::kVertex, "Ping",
40 ASSERT_TRUE(writer.AddShader(ArchiveShaderType::kFragment, "Pang",
41 CreateMappingFromString("World")));
42
43 auto mapping = writer.CreateMapping();
44 ASSERT_NE(mapping, nullptr);
45
46 auto library = ShaderArchive::Create(mapping);
47 ASSERT_TRUE(library.ok());
48 ASSERT_EQ(library->GetShaderCount(), 5u);
49
50 // Wrong type.
51 ASSERT_EQ(library->GetMapping(ArchiveShaderType::kFragment, "Hello"),
52 nullptr);
53
54 auto hello_vtx = library->GetMapping(ArchiveShaderType::kVertex, "Hello");
55 ASSERT_NE(hello_vtx, nullptr);
56 ASSERT_EQ(CreateStringFromMapping(*hello_vtx), "World");
57}
58
59TEST(ShaderArchiveTest, ReturnsErrorOnInvalidVersion) {
60 fb::ShaderArchiveT shader_archive;
61 shader_archive.format_version = -1;
62
63 auto builder = std::make_shared<flatbuffers::FlatBufferBuilder>();
64 builder->Finish(fb::ShaderArchive::Pack(*builder.get(), &shader_archive),
65 fb::ShaderArchiveIdentifier());
66 auto mapping = std::make_shared<fml::NonOwnedMapping>(
67 builder->GetBufferPointer(), builder->GetSize(),
68 [builder](auto, auto) {});
69
70 auto library = ShaderArchive::Create(mapping);
71 ASSERT_FALSE(library.ok());
72 ASSERT_EQ(library.status().code(), absl::StatusCode::kInvalidArgument);
73 std::stringstream stream;
74 stream << "Unsupported shader archive format version. Expected: "
75 << static_cast<uint32_t>(fb::ShaderArchiveFormatVersion::kVersion)
76 << ", Got: 4294967295";
77 ASSERT_EQ(library.status().message(), stream.str());
78}
79
80} // namespace testing
81} // namespace impeller
virtual const uint8_t * GetMapping() const =0
virtual size_t GetSize() const =0
static absl::StatusOr< ShaderArchive > Create(std::shared_ptr< fml::Mapping > payload)
bool AddShader(ArchiveShaderType type, std::string name, std::shared_ptr< fml::Mapping > mapping)
std::shared_ptr< fml::Mapping > CreateMapping() const
TEST(FrameTimingsRecorderTest, RecordVsync)
const std::string CreateStringFromMapping(const fml::Mapping &mapping)
static std::shared_ptr< fml::Mapping > CreateMappingFromString(std::string p_string)