@@ -168,11 +168,15 @@ TEST_F(ImageDecoderFixtureTest, ValidImageResultsInSuccess) {
168168 fml::AutoResetWaitableEvent latch;
169169
170170 std::unique_ptr<IOManager> io_manager;
171- std::unique_ptr<ImageDecoder> image_decoder;
172171
172+ auto release_io_manager = [&]() {
173+ io_manager.reset ();
174+ latch.Signal ();
175+ };
173176 auto decode_image = [&]() {
174- image_decoder = std::make_unique<ImageDecoder>(
175- runners, loop->GetTaskRunner (), io_manager->GetWeakIOManager ());
177+ std::unique_ptr<ImageDecoder> image_decoder =
178+ std::make_unique<ImageDecoder>(runners, loop->GetTaskRunner (),
179+ io_manager->GetWeakIOManager ());
176180
177181 ImageDecoder::ImageDescriptor image_descriptor;
178182 image_descriptor.data = OpenFixtureAsSkData (" DashInNooglerHat.jpg" );
@@ -183,7 +187,7 @@ TEST_F(ImageDecoderFixtureTest, ValidImageResultsInSuccess) {
183187 ImageDecoder::ImageResult callback = [&](SkiaGPUObject<SkImage> image) {
184188 ASSERT_TRUE (runners.GetUITaskRunner ()->RunsTasksOnCurrentThread ());
185189 ASSERT_TRUE (image.get ());
186- latch. Signal ( );
190+ runners. GetIOTaskRunner ()-> PostTask (release_io_manager );
187191 };
188192 image_decoder->Decode (std::move (image_descriptor), callback);
189193 };
@@ -210,12 +214,17 @@ TEST_F(ImageDecoderFixtureTest, ExifDataIsRespectedOnDecode) {
210214 fml::AutoResetWaitableEvent latch;
211215
212216 std::unique_ptr<IOManager> io_manager;
213- std::unique_ptr<ImageDecoder> image_decoder;
217+
218+ auto release_io_manager = [&]() {
219+ io_manager.reset ();
220+ latch.Signal ();
221+ };
214222
215223 SkISize decoded_size = SkISize::MakeEmpty ();
216224 auto decode_image = [&]() {
217- image_decoder = std::make_unique<ImageDecoder>(
218- runners, loop->GetTaskRunner (), io_manager->GetWeakIOManager ());
225+ std::unique_ptr<ImageDecoder> image_decoder =
226+ std::make_unique<ImageDecoder>(runners, loop->GetTaskRunner (),
227+ io_manager->GetWeakIOManager ());
219228
220229 ImageDecoder::ImageDescriptor image_descriptor;
221230 image_descriptor.data = OpenFixtureAsSkData (" Horizontal.jpg" );
@@ -227,7 +236,7 @@ TEST_F(ImageDecoderFixtureTest, ExifDataIsRespectedOnDecode) {
227236 ASSERT_TRUE (runners.GetUITaskRunner ()->RunsTasksOnCurrentThread ());
228237 ASSERT_TRUE (image.get ());
229238 decoded_size = image.get ()->dimensions ();
230- latch. Signal ( );
239+ runners. GetIOTaskRunner ()-> PostTask (release_io_manager );
231240 };
232241 image_decoder->Decode (std::move (image_descriptor), callback);
233242 };
@@ -257,11 +266,16 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithoutAGPUContext) {
257266 fml::AutoResetWaitableEvent latch;
258267
259268 std::unique_ptr<IOManager> io_manager;
260- std::unique_ptr<ImageDecoder> image_decoder;
269+
270+ auto release_io_manager = [&]() {
271+ io_manager.reset ();
272+ latch.Signal ();
273+ };
261274
262275 auto decode_image = [&]() {
263- image_decoder = std::make_unique<ImageDecoder>(
264- runners, loop->GetTaskRunner (), io_manager->GetWeakIOManager ());
276+ std::unique_ptr<ImageDecoder> image_decoder =
277+ std::make_unique<ImageDecoder>(runners, loop->GetTaskRunner (),
278+ io_manager->GetWeakIOManager ());
265279
266280 ImageDecoder::ImageDescriptor image_descriptor;
267281 image_descriptor.data = OpenFixtureAsSkData (" DashInNooglerHat.jpg" );
@@ -272,7 +286,7 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithoutAGPUContext) {
272286 ImageDecoder::ImageResult callback = [&](SkiaGPUObject<SkImage> image) {
273287 ASSERT_TRUE (runners.GetUITaskRunner ()->RunsTasksOnCurrentThread ());
274288 ASSERT_TRUE (image.get ());
275- latch. Signal ( );
289+ runners. GetIOTaskRunner ()-> PostTask (release_io_manager );
276290 };
277291 image_decoder->Decode (std::move (image_descriptor), callback);
278292 };
@@ -355,6 +369,20 @@ TEST_F(ImageDecoderFixtureTest, CanDecodeWithResizes) {
355369 ASSERT_EQ (decoded_size (100 , {}), SkISize::Make (100 , 133 ));
356370 ASSERT_EQ (decoded_size ({}, 100 ), SkISize::Make (75 , 100 ));
357371 ASSERT_EQ (decoded_size (100 , 100 ), SkISize::Make (100 , 100 ));
372+
373+ // Destroy the IO manager
374+ runners.GetIOTaskRunner ()->PostTask ([&]() {
375+ io_manager.reset ();
376+ latch.Signal ();
377+ });
378+ latch.Wait ();
379+
380+ // Destroy the image decoder
381+ runners.GetUITaskRunner ()->PostTask ([&]() {
382+ image_decoder.reset ();
383+ latch.Signal ();
384+ });
385+ latch.Wait ();
358386}
359387
360388TEST_F (ImageDecoderFixtureTest, CanResizeWithoutDecode) {
@@ -441,6 +469,20 @@ TEST_F(ImageDecoderFixtureTest, CanResizeWithoutDecode) {
441469 ASSERT_EQ (decoded_size (100 , {}), SkISize::Make (100 , 133 ));
442470 ASSERT_EQ (decoded_size ({}, 100 ), SkISize::Make (75 , 100 ));
443471 ASSERT_EQ (decoded_size (100 , 100 ), SkISize::Make (100 , 100 ));
472+
473+ // Destroy the IO manager
474+ runners.GetIOTaskRunner ()->PostTask ([&]() {
475+ io_manager.reset ();
476+ latch.Signal ();
477+ });
478+ latch.Wait ();
479+
480+ // Destroy the image decoder
481+ runners.GetUITaskRunner ()->PostTask ([&]() {
482+ image_decoder.reset ();
483+ latch.Signal ();
484+ });
485+ latch.Wait ();
444486}
445487
446488} // namespace testing
0 commit comments