mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Consolidate all the copies of the OpenFixtureAsSkData testing helper function (flutter/engine#47491)
This commit is contained in:
parent
6497399efb
commit
cce2f9ced2
@ -1349,21 +1349,6 @@ TEST_P(AiksTest, CanDrawAnOpenPathThatIsntARect) {
|
||||
ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture()));
|
||||
}
|
||||
|
||||
static sk_sp<SkData> OpenFixtureAsSkData(const char* fixture_name) {
|
||||
auto mapping = flutter::testing::OpenFixtureAsMapping(fixture_name);
|
||||
if (!mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
auto data = SkData::MakeWithProc(
|
||||
mapping->GetMapping(), mapping->GetSize(),
|
||||
[](const void* ptr, void* context) {
|
||||
delete reinterpret_cast<fml::Mapping*>(context);
|
||||
},
|
||||
mapping.get());
|
||||
mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
struct TextRenderOptions {
|
||||
Scalar font_size = 50;
|
||||
Scalar alpha = 1;
|
||||
@ -1385,7 +1370,7 @@ bool RenderTextInCanvasSkia(const std::shared_ptr<Context>& context,
|
||||
Paint{.color = Color::Red().WithAlpha(0.25)});
|
||||
|
||||
// Construct the text blob.
|
||||
auto mapping = OpenFixtureAsSkData(font_fixture.c_str());
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData(font_fixture.c_str());
|
||||
if (!mapping) {
|
||||
return false;
|
||||
}
|
||||
@ -1563,7 +1548,7 @@ TEST_P(AiksTest, CanRenderTextOutsideBoundaries) {
|
||||
canvas.Translate({200, 150});
|
||||
|
||||
// Construct the text blob.
|
||||
auto mapping = OpenFixtureAsSkData("wtf.otf");
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData("wtf.otf");
|
||||
ASSERT_NE(mapping, nullptr);
|
||||
|
||||
Scalar font_size = 80;
|
||||
@ -3372,7 +3357,7 @@ TEST_P(AiksTest, CanDrawPointsWithTextureMap) {
|
||||
// moved into DLDispatching. Path data requires the SkTextBlobs which are not
|
||||
// used in impeller::TextFrames.
|
||||
TEST_P(AiksTest, TextForegroundShaderWithTransform) {
|
||||
auto mapping = OpenFixtureAsSkData("Roboto-Regular.ttf");
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData("Roboto-Regular.ttf");
|
||||
ASSERT_NE(mapping, nullptr);
|
||||
|
||||
Scalar font_size = 100;
|
||||
|
||||
@ -52,24 +52,9 @@ bool DlPlayground::OpenPlaygroundHere(DisplayListPlaygroundCallback callback) {
|
||||
});
|
||||
}
|
||||
|
||||
static sk_sp<SkData> OpenFixtureAsSkData(const char* fixture_name) {
|
||||
auto mapping = flutter::testing::OpenFixtureAsMapping(fixture_name);
|
||||
if (!mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
auto data = SkData::MakeWithProc(
|
||||
mapping->GetMapping(), mapping->GetSize(),
|
||||
[](const void* ptr, void* context) {
|
||||
delete reinterpret_cast<fml::Mapping*>(context);
|
||||
},
|
||||
mapping.get());
|
||||
mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
SkFont DlPlayground::CreateTestFontOfSize(SkScalar scalar) {
|
||||
static constexpr const char* kTestFontFixture = "Roboto-Regular.ttf";
|
||||
auto mapping = OpenFixtureAsSkData(kTestFontFixture);
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData(kTestFontFixture);
|
||||
FML_CHECK(mapping);
|
||||
return SkFont{SkTypeface::MakeFromData(mapping), scalar};
|
||||
}
|
||||
|
||||
@ -86,26 +86,11 @@ TEST_P(TypographerTest, CanCreateGlyphAtlas) {
|
||||
.has_value());
|
||||
}
|
||||
|
||||
static sk_sp<SkData> OpenFixtureAsSkData(const char* fixture_name) {
|
||||
auto mapping = flutter::testing::OpenFixtureAsMapping(fixture_name);
|
||||
if (!mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
auto data = SkData::MakeWithProc(
|
||||
mapping->GetMapping(), mapping->GetSize(),
|
||||
[](const void* ptr, void* context) {
|
||||
delete reinterpret_cast<fml::Mapping*>(context);
|
||||
},
|
||||
mapping.get());
|
||||
mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
TEST_P(TypographerTest, LazyAtlasTracksColor) {
|
||||
#if FML_OS_MACOSX
|
||||
auto mapping = OpenFixtureAsSkData("Apple Color Emoji.ttc");
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData("Apple Color Emoji.ttc");
|
||||
#else
|
||||
auto mapping = OpenFixtureAsSkData("NotoColorEmoji.ttf");
|
||||
auto mapping = flutter::testing::OpenFixtureAsSkData("NotoColorEmoji.ttf");
|
||||
#endif
|
||||
ASSERT_TRUE(mapping);
|
||||
SkFont emoji_font(SkTypeface::MakeFromData(mapping), 50.0);
|
||||
|
||||
@ -73,41 +73,11 @@ float DecodeBGR10(uint32_t x) {
|
||||
return (x * slope) + intercept;
|
||||
}
|
||||
|
||||
sk_sp<SkData> OpenFixtureAsSkData(const char* name) {
|
||||
auto fixtures_directory =
|
||||
fml::OpenDirectory(GetFixturesPath(), false, fml::FilePermission::kRead);
|
||||
if (!fixtures_directory.is_valid()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto fixture_mapping =
|
||||
fml::FileMapping::CreateReadOnly(fixtures_directory, name);
|
||||
|
||||
if (!fixture_mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SkData::ReleaseProc on_release = [](const void* ptr, void* context) -> void {
|
||||
delete reinterpret_cast<fml::FileMapping*>(context);
|
||||
};
|
||||
|
||||
auto data = SkData::MakeWithProc(fixture_mapping->GetMapping(),
|
||||
fixture_mapping->GetSize(), on_release,
|
||||
fixture_mapping.get());
|
||||
|
||||
if (!data) {
|
||||
return nullptr;
|
||||
}
|
||||
// The data is now owned by Skia.
|
||||
fixture_mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
TEST(ImageDecoderNoGLTest, ImpellerWideGamutDisplayP3) {
|
||||
#if defined(OS_FUCHSIA)
|
||||
GTEST_SKIP() << "Fuchsia can't load the test fixtures.";
|
||||
#endif
|
||||
auto data = OpenFixtureAsSkData("DisplayP3Logo.png");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("DisplayP3Logo.png");
|
||||
auto image = SkImages::DeferredFromEncodedData(data);
|
||||
ASSERT_TRUE(image != nullptr);
|
||||
ASSERT_EQ(SkISize::Make(100, 100), image->dimensions());
|
||||
@ -164,7 +134,7 @@ TEST(ImageDecoderNoGLTest, ImpellerWideGamutIndexedPng) {
|
||||
#if defined(OS_FUCHSIA)
|
||||
GTEST_SKIP() << "Fuchsia can't load the test fixtures.";
|
||||
#endif
|
||||
auto data = OpenFixtureAsSkData("WideGamutIndexed.png");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("WideGamutIndexed.png");
|
||||
auto image = SkImages::DeferredFromEncodedData(data);
|
||||
ASSERT_TRUE(image != nullptr);
|
||||
ASSERT_EQ(SkISize::Make(100, 100), image->dimensions());
|
||||
|
||||
@ -96,7 +96,6 @@ namespace testing {
|
||||
|
||||
float HalfToFloat(uint16_t half);
|
||||
float DecodeBGR10(uint32_t x);
|
||||
sk_sp<SkData> OpenFixtureAsSkData(const char* name);
|
||||
|
||||
} // namespace testing
|
||||
} // namespace flutter
|
||||
|
||||
@ -238,7 +238,7 @@ TEST_F(ImageDecoderFixtureTest, InvalidImageResultsError) {
|
||||
manager.GetWeakIOManager(),
|
||||
std::make_shared<fml::SyncSwitch>());
|
||||
|
||||
auto data = OpenFixtureAsSkData("ThisDoesNotExist.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("ThisDoesNotExist.jpg");
|
||||
ASSERT_FALSE(data);
|
||||
|
||||
fml::RefPtr<ImageDescriptor> image_descriptor =
|
||||
@ -279,7 +279,7 @@ TEST_F(ImageDecoderFixtureTest, ValidImageResultsInSuccess) {
|
||||
settings, runners, loop->GetTaskRunner(),
|
||||
io_manager->GetWeakIOManager(), std::make_shared<fml::SyncSwitch>());
|
||||
|
||||
auto data = OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
|
||||
ASSERT_TRUE(data);
|
||||
ASSERT_GE(data->size(), 0u);
|
||||
@ -398,7 +398,7 @@ TEST_F(ImageDecoderFixtureTest, ImpellerPixelConversion32F) {
|
||||
}
|
||||
|
||||
TEST_F(ImageDecoderFixtureTest, ImpellerWideGamutDisplayP3Opaque) {
|
||||
auto data = OpenFixtureAsSkData("DisplayP3Logo.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("DisplayP3Logo.jpg");
|
||||
auto image = SkImages::DeferredFromEncodedData(data);
|
||||
ASSERT_TRUE(image != nullptr);
|
||||
ASSERT_EQ(SkISize::Make(100, 100), image->dimensions());
|
||||
@ -450,7 +450,7 @@ TEST_F(ImageDecoderFixtureTest, ImpellerWideGamutDisplayP3Opaque) {
|
||||
}
|
||||
|
||||
TEST_F(ImageDecoderFixtureTest, ImpellerNonWideGamut) {
|
||||
auto data = OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto image = SkImages::DeferredFromEncodedData(data);
|
||||
ASSERT_TRUE(image != nullptr);
|
||||
ASSERT_EQ(SkISize::Make(600, 200), image->dimensions());
|
||||
@ -501,7 +501,7 @@ TEST_F(ImageDecoderFixtureTest, ExifDataIsRespectedOnDecode) {
|
||||
settings, runners, loop->GetTaskRunner(),
|
||||
io_manager->GetWeakIOManager(), std::make_shared<fml::SyncSwitch>());
|
||||
|
||||
auto data = OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("Horizontal.jpg");
|
||||
|
||||
ASSERT_TRUE(data);
|
||||
ASSERT_GE(data->size(), 0u);
|
||||
@ -562,7 +562,7 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithoutAGPUContext) {
|
||||
settings, runners, loop->GetTaskRunner(),
|
||||
io_manager->GetWeakIOManager(), std::make_shared<fml::SyncSwitch>());
|
||||
|
||||
auto data = OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
|
||||
ASSERT_TRUE(data);
|
||||
ASSERT_GE(data->size(), 0u);
|
||||
@ -597,9 +597,10 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithoutAGPUContext) {
|
||||
}
|
||||
|
||||
TEST_F(ImageDecoderFixtureTest, CanDecodeWithResizes) {
|
||||
const auto image_dimensions = SkImages::DeferredFromEncodedData(
|
||||
OpenFixtureAsSkData("DashInNooglerHat.jpg"))
|
||||
->dimensions();
|
||||
const auto image_dimensions =
|
||||
SkImages::DeferredFromEncodedData(
|
||||
flutter::testing::OpenFixtureAsSkData("DashInNooglerHat.jpg"))
|
||||
->dimensions();
|
||||
|
||||
ASSERT_FALSE(image_dimensions.isEmpty());
|
||||
|
||||
@ -635,7 +636,7 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithResizes) {
|
||||
uint32_t target_height) -> SkISize {
|
||||
SkISize final_size = SkISize::MakeEmpty();
|
||||
runners.GetUITaskRunner()->PostTask([&]() {
|
||||
auto data = OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("DashInNooglerHat.jpg");
|
||||
|
||||
ASSERT_TRUE(data);
|
||||
ASSERT_GE(data->size(), 0u);
|
||||
@ -676,8 +677,9 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithResizes) {
|
||||
// Flutter.
|
||||
TEST(ImageDecoderTest,
|
||||
VerifyCodecRepeatCountsForGifAndWebPAreConsistentWithLoopCounts) {
|
||||
auto gif_mapping = OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto webp_mapping = OpenFixtureAsSkData("hello_loop_2.webp");
|
||||
auto gif_mapping = flutter::testing::OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto webp_mapping =
|
||||
flutter::testing::OpenFixtureAsSkData("hello_loop_2.webp");
|
||||
|
||||
ASSERT_TRUE(gif_mapping);
|
||||
ASSERT_TRUE(webp_mapping);
|
||||
@ -696,7 +698,7 @@ TEST(ImageDecoderTest,
|
||||
}
|
||||
|
||||
TEST(ImageDecoderTest, VerifySimpleDecoding) {
|
||||
auto data = OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto image = SkImages::DeferredFromEncodedData(data);
|
||||
ASSERT_TRUE(image != nullptr);
|
||||
ASSERT_EQ(600, image->width());
|
||||
@ -733,7 +735,7 @@ TEST(ImageDecoderTest, VerifySimpleDecoding) {
|
||||
}
|
||||
|
||||
TEST(ImageDecoderTest, ImagesWithTransparencyArePremulAlpha) {
|
||||
auto data = OpenFixtureAsSkData("heart_end.png");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("heart_end.png");
|
||||
ASSERT_TRUE(data);
|
||||
ImageGeneratorRegistry registry;
|
||||
std::shared_ptr<ImageGenerator> generator =
|
||||
@ -751,7 +753,7 @@ TEST(ImageDecoderTest, ImagesWithTransparencyArePremulAlpha) {
|
||||
}
|
||||
|
||||
TEST(ImageDecoderTest, VerifySubpixelDecodingPreservesExifOrientation) {
|
||||
auto data = OpenFixtureAsSkData("Horizontal.jpg");
|
||||
auto data = flutter::testing::OpenFixtureAsSkData("Horizontal.jpg");
|
||||
|
||||
ImageGeneratorRegistry registry;
|
||||
std::shared_ptr<ImageGenerator> generator =
|
||||
@ -776,7 +778,7 @@ TEST(ImageDecoderTest, VerifySubpixelDecodingPreservesExifOrientation) {
|
||||
fml::tracing::TraceFlow(""));
|
||||
};
|
||||
|
||||
auto expected_data = OpenFixtureAsSkData("Horizontal.png");
|
||||
auto expected_data = flutter::testing::OpenFixtureAsSkData("Horizontal.png");
|
||||
ASSERT_TRUE(expected_data != nullptr);
|
||||
ASSERT_FALSE(expected_data->isEmpty());
|
||||
|
||||
@ -809,7 +811,7 @@ TEST_F(ImageDecoderFixtureTest,
|
||||
auto vm_ref = DartVMRef::Create(settings);
|
||||
auto vm_data = vm_ref.GetVMData();
|
||||
|
||||
auto gif_mapping = OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto gif_mapping = flutter::testing::OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
|
||||
ASSERT_TRUE(gif_mapping);
|
||||
|
||||
@ -878,7 +880,7 @@ TEST_F(ImageDecoderFixtureTest, MultiFrameCodecDidAccessGpuDisabledSyncSwitch) {
|
||||
auto vm_ref = DartVMRef::Create(settings);
|
||||
auto vm_data = vm_ref.GetVMData();
|
||||
|
||||
auto gif_mapping = OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto gif_mapping = flutter::testing::OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
|
||||
ASSERT_TRUE(gif_mapping);
|
||||
|
||||
@ -962,7 +964,7 @@ TEST_F(ImageDecoderFixtureTest,
|
||||
auto vm_ref = DartVMRef::Create(settings);
|
||||
auto vm_data = vm_ref.GetVMData();
|
||||
|
||||
auto gif_mapping = OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto gif_mapping = flutter::testing::OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
|
||||
ASSERT_TRUE(gif_mapping);
|
||||
|
||||
|
||||
@ -16,36 +16,6 @@
|
||||
namespace flutter {
|
||||
namespace testing {
|
||||
|
||||
static sk_sp<SkData> OpenFixtureAsSkData(const char* name) {
|
||||
auto fixtures_directory =
|
||||
fml::OpenDirectory(GetFixturesPath(), false, fml::FilePermission::kRead);
|
||||
if (!fixtures_directory.is_valid()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto fixture_mapping =
|
||||
fml::FileMapping::CreateReadOnly(fixtures_directory, name);
|
||||
|
||||
if (!fixture_mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SkData::ReleaseProc on_release = [](const void* ptr, void* context) -> void {
|
||||
delete reinterpret_cast<fml::FileMapping*>(context);
|
||||
};
|
||||
|
||||
auto data = SkData::MakeWithProc(fixture_mapping->GetMapping(),
|
||||
fixture_mapping->GetSize(), on_release,
|
||||
fixture_mapping.get());
|
||||
|
||||
if (!data) {
|
||||
return nullptr;
|
||||
}
|
||||
// The data is now owned by Skia.
|
||||
fixture_mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
class ShellIOManagerTest : public FixtureTest {};
|
||||
|
||||
// Regression test for https://github.com/flutter/engine/pull/32106.
|
||||
@ -54,7 +24,7 @@ TEST_F(ShellIOManagerTest,
|
||||
auto settings = CreateSettingsForFixture();
|
||||
auto vm_ref = DartVMRef::Create(settings);
|
||||
auto vm_data = vm_ref.GetVMData();
|
||||
auto gif_mapping = OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
auto gif_mapping = flutter::testing::OpenFixtureAsSkData("hello_loop_2.gif");
|
||||
ASSERT_TRUE(gif_mapping);
|
||||
|
||||
ImageGeneratorRegistry registry;
|
||||
|
||||
@ -61,6 +61,21 @@ std::unique_ptr<fml::Mapping> OpenFixtureAsMapping(
|
||||
return fml::FileMapping::CreateReadOnly(OpenFixture(fixture_name));
|
||||
}
|
||||
|
||||
sk_sp<SkData> OpenFixtureAsSkData(const std::string& fixture_name) {
|
||||
auto mapping = flutter::testing::OpenFixtureAsMapping(fixture_name);
|
||||
if (!mapping) {
|
||||
return nullptr;
|
||||
}
|
||||
auto data = SkData::MakeWithProc(
|
||||
mapping->GetMapping(), mapping->GetSize(),
|
||||
[](const void* ptr, void* context) {
|
||||
delete reinterpret_cast<fml::Mapping*>(context);
|
||||
},
|
||||
mapping.get());
|
||||
mapping.release();
|
||||
return data;
|
||||
}
|
||||
|
||||
bool MemsetPatternSetOrCheck(uint8_t* buffer, size_t size, MemsetPatternOp op) {
|
||||
if (buffer == nullptr) {
|
||||
return false;
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#include "flutter/fml/mapping.h"
|
||||
#include "flutter/testing/assertions.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "third_party/skia/include/core/SkData.h"
|
||||
|
||||
namespace flutter {
|
||||
namespace testing {
|
||||
@ -73,6 +74,17 @@ fml::UniqueFD OpenFixture(const std::string& fixture_name);
|
||||
std::unique_ptr<fml::Mapping> OpenFixtureAsMapping(
|
||||
const std::string& fixture_name);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// @brief Opens a fixture of the given file name and returns a Skia SkData
|
||||
/// holding its contents.
|
||||
///
|
||||
/// @param[in] fixture_name The fixture name
|
||||
///
|
||||
/// @return An SkData, or null if the fixture does not exist or its contents
|
||||
/// cannot be mapped in.
|
||||
///
|
||||
sk_sp<SkData> OpenFixtureAsSkData(const std::string& fixture_name);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// @brief Gets the name of the currently running test. This is useful in
|
||||
/// generating logs or assets based on test name.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user