// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/logging.h" #include "cc/debug/lap_timer.h" #include "cc/resources/texture_compressor.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/perf/perf_test.h" namespace cc { namespace { const int kTimeLimitMillis = 2000; const int kWarmupRuns = 5; 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}; std::string FormatName(TextureCompressor::Format format) { switch (format) { case TextureCompressor::kFormatETC1: return "ETC1"; } NOTREACHED(); return ""; } std::string QualityName(TextureCompressor::Quality quality) { switch (quality) { case TextureCompressor::kQualityLow: return "Low"; case TextureCompressor::kQualityMedium: return "Medium"; case TextureCompressor::kQualityHigh: return "High"; } NOTREACHED(); return ""; } class TextureCompressorPerfTest : public testing::TestWithParam { public: TextureCompressorPerfTest() : timer_(kWarmupRuns, base::TimeDelta::FromMilliseconds(kTimeLimitMillis), kTimeCheckInterval) {} void SetUp() override { TextureCompressor::Format format = GetParam(); compressor_ = TextureCompressor::Create(format); } void RunTest(const std::string& name, TextureCompressor::Quality quality) { timer_.Reset(); do { compressor_->Compress(src_, dst_, kImageWidth, kImageHeight, quality); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired()); std::string str = FormatName(GetParam()) + " " + QualityName(quality); perf_test::PrintResult("Compress256x256", name, str, timer_.MsPerLap(), "us", true); } protected: LapTimer timer_; scoped_ptr compressor_; uint8_t src_[kImageSizeInBytes]; uint8_t dst_[kImageSizeInBytes]; }; TEST_P(TextureCompressorPerfTest, Compress256x256Image) { for (int i = 0; i < kImageSizeInBytes; ++i) src_[i] = i % 256; for (auto& quality : kQualities) RunTest("Image", quality); } TEST_P(TextureCompressorPerfTest, Compress256x256SolidImage) { memset(src_, 0, kImageSizeInBytes); for (auto& quality : kQualities) RunTest("SolidImage", quality); } INSTANTIATE_TEST_CASE_P(TextureCompressorPerfTests, TextureCompressorPerfTest, ::testing::Values(TextureCompressor::kFormatETC1)); } // namespace } // namespace cc