Commit 55054d67 authored by Nigel Tao's avatar Nigel Tao Committed by Chromium LUCI CQ

Let getFrameCount stay still during partial decode

This is a test-only change. See crbug.com/1132828 for the rationale.

Bug: 1132828
Change-Id: I8226bdd79012e1fb2cbe85d7a8c188846ace091a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2584204
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: default avatarLeon Scroggins <scroggo@google.com>
Cr-Commit-Position: refs/heads/master@{#837153}
parent c1faea44
...@@ -289,11 +289,6 @@ TEST(GIFImageDecoderTest, randomDecodeAfterClearFrameBufferCache) { ...@@ -289,11 +289,6 @@ TEST(GIFImageDecoderTest, randomDecodeAfterClearFrameBufferCache) {
&CreateDecoder, kWebTestsResourcesDir, "animated-10color.gif"); &CreateDecoder, kWebTestsResourcesDir, "animated-10color.gif");
} }
TEST(GIFImageDecoderTest, resumePartialDecodeAfterClearFrameBufferCache) {
TestResumePartialDecodeAfterClearFrameBufferCache(
&CreateDecoder, kWebTestsResourcesDir, "animated-10color.gif");
}
// The first LZW codes in the image are invalid values that try to create a loop // The first LZW codes in the image are invalid values that try to create a loop
// in the dictionary. Decoding should fail, but not infinitely loop or corrupt // in the dictionary. Decoding should fail, but not infinitely loop or corrupt
// memory. // memory.
......
...@@ -340,39 +340,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode( ...@@ -340,39 +340,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode(
} }
} }
void TestResumePartialDecodeAfterClearFrameBufferCache(
DecoderCreator create_decoder,
SharedBuffer* full_buffer) {
const Vector<char> full_data = full_buffer->CopyAs<Vector<char>>();
Vector<unsigned> baseline_hashes;
CreateDecodingBaseline(create_decoder, full_buffer, &baseline_hashes);
size_t frame_count = baseline_hashes.size();
std::unique_ptr<ImageDecoder> decoder = create_decoder();
// Let frame 0 be partially decoded.
scoped_refptr<SharedBuffer> data = SharedBuffer::Create();
const char* source = full_data.data();
do {
data->Append(source++, 1u);
decoder->SetData(data.get(), false);
} while (!decoder->FrameCount() ||
decoder->DecodeFrameBufferAtIndex(0)->GetStatus() ==
ImageFrame::kFrameEmpty);
// Skip to the last frame and clear.
decoder->SetData(full_buffer, true);
EXPECT_EQ(frame_count, decoder->FrameCount());
ImageFrame* last_frame = decoder->DecodeFrameBufferAtIndex(frame_count - 1);
EXPECT_EQ(baseline_hashes[frame_count - 1], HashBitmap(last_frame->Bitmap()));
decoder->ClearCacheExceptFrame(kNotFound);
// Resume decoding of the first frame.
ImageFrame* first_frame = decoder->DecodeFrameBufferAtIndex(0);
EXPECT_EQ(ImageFrame::kFrameComplete, first_frame->GetStatus());
EXPECT_EQ(baseline_hashes[0], HashBitmap(first_frame->Bitmap()));
}
void TestByteByByteDecode(DecoderCreator create_decoder, void TestByteByByteDecode(DecoderCreator create_decoder,
const char* file, const char* file,
size_t expected_frame_count, size_t expected_frame_count,
...@@ -520,23 +487,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode( ...@@ -520,23 +487,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode(
TestUpdateRequiredPreviousFrameAfterFirstDecode(create_decoder, data.get()); TestUpdateRequiredPreviousFrameAfterFirstDecode(create_decoder, data.get());
} }
void TestResumePartialDecodeAfterClearFrameBufferCache(
DecoderCreator create_decoder,
const char* dir,
const char* file) {
scoped_refptr<SharedBuffer> data = ReadFile(dir, file);
ASSERT_TRUE(data.get());
TestResumePartialDecodeAfterClearFrameBufferCache(create_decoder, data.get());
}
void TestResumePartialDecodeAfterClearFrameBufferCache(
DecoderCreator create_decoder,
const char* file) {
scoped_refptr<SharedBuffer> data = ReadFile(file);
ASSERT_TRUE(data.get());
TestResumePartialDecodeAfterClearFrameBufferCache(create_decoder, data.get());
}
static uint32_t PremultiplyColor(uint32_t c) { static uint32_t PremultiplyColor(uint32_t c) {
return SkPremultiplyARGBInline(SkGetPackedA32(c), SkGetPackedR32(c), return SkPremultiplyARGBInline(SkGetPackedA32(c), SkGetPackedR32(c),
SkGetPackedG32(c), SkGetPackedB32(c)); SkGetPackedG32(c), SkGetPackedB32(c));
......
...@@ -108,12 +108,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode(DecoderCreator, ...@@ -108,12 +108,6 @@ void TestUpdateRequiredPreviousFrameAfterFirstDecode(DecoderCreator,
void TestUpdateRequiredPreviousFrameAfterFirstDecode(DecoderCreator, void TestUpdateRequiredPreviousFrameAfterFirstDecode(DecoderCreator,
const char* file); const char* file);
void TestResumePartialDecodeAfterClearFrameBufferCache(DecoderCreator,
const char* dir,
const char* file);
void TestResumePartialDecodeAfterClearFrameBufferCache(DecoderCreator,
const char* file);
// Verifies that result of alpha blending is similar for AlphaPremultiplied and // Verifies that result of alpha blending is similar for AlphaPremultiplied and
// AlphaNotPremultiplied cases. // AlphaNotPremultiplied cases.
void TestAlphaBlending(DecoderCreatorWithAlpha, const char*); void TestAlphaBlending(DecoderCreatorWithAlpha, const char*);
......
...@@ -397,12 +397,6 @@ TEST(AnimatedWebPTests, randomDecodeAfterClearFrameBufferCache) { ...@@ -397,12 +397,6 @@ TEST(AnimatedWebPTests, randomDecodeAfterClearFrameBufferCache) {
&CreateWEBPDecoder, "/images/resources/webp-animated-icc-xmp.webp"); &CreateWEBPDecoder, "/images/resources/webp-animated-icc-xmp.webp");
} }
TEST(AnimatedWebPTests,
resumePartialDecodeAfterClearFrameBufferCache) {
TestResumePartialDecodeAfterClearFrameBufferCache(
&CreateWEBPDecoder, "/images/resources/webp-animated-large.webp");
}
TEST(AnimatedWebPTests, decodeAfterReallocatingData) { TEST(AnimatedWebPTests, decodeAfterReallocatingData) {
TestDecodeAfterReallocatingData(&CreateWEBPDecoder, TestDecodeAfterReallocatingData(&CreateWEBPDecoder,
"/images/resources/webp-animated.webp"); "/images/resources/webp-animated.webp");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment