Index: cc/resources/texture_compressor_perftest.cc |
diff --git a/cc/resources/texture_compressor_perftest.cc b/cc/resources/texture_compressor_perftest.cc |
index 7d68bd6f5f3d9415e2d14de53de87fd4f860935f..0365e84fd83ed8def20e30ff4e9b75ae6bc50974 100644 |
--- a/cc/resources/texture_compressor_perftest.cc |
+++ b/cc/resources/texture_compressor_perftest.cc |
@@ -17,12 +17,8 @@ const int kTimeCheckInterval = 10; |
const int kImageWidth = 256; |
const int kImageHeight = 256; |
-const int kImageSizeInBytes = kImageWidth * kImageHeight * 4; |
- |
-const TextureCompressor::Quality kQualities[] = { |
- TextureCompressor::kQualityLow, |
- TextureCompressor::kQualityMedium, |
- TextureCompressor::kQualityHigh}; |
+const int kImageChannels = 4; |
+const int kImageSizeInBytes = kImageWidth * kImageHeight * kImageChannels; |
std::string FormatName(TextureCompressor::Format format) { |
switch (format) { |
@@ -49,7 +45,9 @@ std::string QualityName(TextureCompressor::Quality quality) { |
} |
class TextureCompressorPerfTest |
- : public testing::TestWithParam<TextureCompressor::Format> { |
+ : public testing::TestWithParam< |
+ ::testing::tuple<TextureCompressor::Quality, |
+ TextureCompressor::Format>> { |
public: |
TextureCompressorPerfTest() |
: timer_(kWarmupRuns, |
@@ -57,7 +55,8 @@ class TextureCompressorPerfTest |
kTimeCheckInterval) {} |
void SetUp() override { |
- TextureCompressor::Format format = GetParam(); |
+ quality_ = ::testing::get<0>(GetParam()); |
+ TextureCompressor::Format format = ::testing::get<1>(GetParam()); |
compressor_ = TextureCompressor::Create(format); |
} |
@@ -68,36 +67,61 @@ class TextureCompressorPerfTest |
timer_.NextLap(); |
} while (!timer_.HasTimeLimitExpired()); |
- std::string str = FormatName(GetParam()) + " " + QualityName(quality); |
+ std::string str = |
+ FormatName(::testing::get<1>(GetParam())) + " " + QualityName(quality); |
reveman
2015/05/07 14:24:35
nit: please add a TextureCompressor::Format format
radu.velea
2015/05/07 15:53:46
Done.
|
perf_test::PrintResult("Compress256x256", name, str, timer_.MsPerLap(), |
"us", true); |
} |
protected: |
+ TextureCompressor::Quality quality_; |
LapTimer timer_; |
scoped_ptr<TextureCompressor> compressor_; |
uint8_t src_[kImageSizeInBytes]; |
uint8_t dst_[kImageSizeInBytes]; |
}; |
-TEST_P(TextureCompressorPerfTest, Compress256x256Image) { |
+TEST_P(TextureCompressorPerfTest, Compress256x256BlackAndWhiteGradientImage) { |
for (int i = 0; i < kImageSizeInBytes; ++i) |
src_[i] = i % 256; |
- for (auto& quality : kQualities) |
- RunTest("Image", quality); |
+ RunTest("BlackAndWhiteGradientImage", quality_); |
} |
-TEST_P(TextureCompressorPerfTest, Compress256x256SolidImage) { |
+TEST_P(TextureCompressorPerfTest, Compress256x256SolidBlackImage) { |
memset(src_, 0, kImageSizeInBytes); |
- for (auto& quality : kQualities) |
- RunTest("SolidImage", quality); |
+ RunTest("SolidBlackImage", quality_); |
+} |
+ |
+TEST_P(TextureCompressorPerfTest, Compress256x256SolidColorImage) { |
+ for (int i = 0; i < kImageSizeInBytes; ++i) |
+ src_[i] = (4 - i % 4) * 50; |
+ |
+ RunTest("SolidColorImage", quality_); |
+} |
+ |
+TEST_P(TextureCompressorPerfTest, Compress256x256RandomColorImage) { |
+ unsigned int kImageSeed = 1234567890; |
+// On Windows, rand() is threadsafe, and rand_r() is not available. |
+#if defined(OS_WIN) |
reveman
2015/05/07 14:24:35
do we need this ifdef? we use srand and std::rand
radu.velea
2015/05/07 15:53:46
Done.
|
+ srand(kImageSeed); |
+ for (int i = 0; i < kImageSizeInBytes; ++i) |
+ src_[i] = rand() % 256; // NOLINT |
+#else |
+ for (int i = 0; i < kImageSizeInBytes; ++i) |
+ src_[i] = rand_r(&kImageSeed) % 256; |
+#endif |
+ RunTest("RandomColorImage", quality_); |
} |
-INSTANTIATE_TEST_CASE_P(TextureCompressorPerfTests, |
- TextureCompressorPerfTest, |
- ::testing::Values(TextureCompressor::kFormatETC1)); |
+INSTANTIATE_TEST_CASE_P( |
+ TextureCompressorPerfTests, |
+ TextureCompressorPerfTest, |
+ ::testing::Combine(::testing::Values(TextureCompressor::kQualityLow, |
+ TextureCompressor::kQualityMedium, |
+ TextureCompressor::kQualityHigh), |
+ ::testing::Values(TextureCompressor::kFormatETC1))); |
} // namespace |
} // namespace cc |