Commit bb7daded authored by Collin Baker's avatar Collin Baker Committed by Commit Bot

Suppress TSan failure in libjpeg-turbo

The failure in init_simd() is benign and won't be fixed; see
https://github.com/libjpeg-turbo/libjpeg-turbo/issues/87.

Bug: 1056011
Change-Id: I2bc3827b4313371e00b46ba3362a9c98499f9450
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2076278Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Collin Baker <collinbaker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745637}
parent b26e93a5
......@@ -134,6 +134,11 @@ char kTSanDefaultSuppressions[] =
// https://crbug.com/977085
"race:vp3_update_thread_context\n"
// Benign data race in libjpeg-turbo, won't fix
// (https://github.com/libjpeg-turbo/libjpeg-turbo/issues/87).
// https://crbug.com/1056011
"race:third_party/libjpeg_turbo/simd/x86_64/jsimd.c\n"
// End of suppressions.
; // Please keep this semicolon.
......
......@@ -6,7 +6,12 @@
#include <stddef.h>
#include <stdint.h>
#include "base/barrier_closure.h"
#include "base/run_loop.h"
#include "base/stl_util.h"
#include "base/task/thread_pool.h"
#include "base/test/bind_test_util.h"
#include "base/test/task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/codec/jpeg_codec.h"
......@@ -178,4 +183,32 @@ TEST(JPEGCodec, InvalidRead) {
JPEGCodec::FORMAT_RGBA, &output, &outw, &outh);
}
// Coverage for data races in JPEG encoding when run with TSan.
// Regression test for crbug.com/1056011.
TEST(JPEGCodec, ParallelEncoding) {
constexpr int kImageSize = 32;
std::vector<unsigned char> image_data;
MakeRGBAImage(kImageSize, kImageSize, &image_data);
SkImageInfo info = SkImageInfo::Make(
kImageSize, kImageSize, kRGBA_8888_SkColorType, kOpaque_SkAlphaType);
SkPixmap src(info, &image_data[0], kImageSize * 4);
base::test::TaskEnvironment task_environment;
base::RunLoop encode_loop;
constexpr int kNumCopies = 100;
base::RepeatingClosure encode_completion_closure =
base::BarrierClosure(kNumCopies, encode_loop.QuitClosure());
for (int i = 0; i < kNumCopies; ++i) {
base::ThreadPool::PostTask(
FROM_HERE, base::BindLambdaForTesting([&] {
std::vector<unsigned char> output;
EXPECT_TRUE(JPEGCodec::Encode(src, jpeg_quality, &output));
encode_completion_closure.Run();
}));
}
encode_loop.Run();
}
} // namespace gfx
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