Index: components/wallpaper/wallpaper_color_calculator_unittest.cc |
diff --git a/components/wallpaper/wallpaper_color_calculator_unittest.cc b/components/wallpaper/wallpaper_color_calculator_unittest.cc |
index 31268f70e3be1b2f14f7d31586a4dc40d8dfe25e..8c25a02bb470e8318338720c0d326e8d80a6e28a 100644 |
--- a/components/wallpaper/wallpaper_color_calculator_unittest.cc |
+++ b/components/wallpaper/wallpaper_color_calculator_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/macros.h" |
#include "base/memory/ptr_util.h" |
+#include "base/test/histogram_tester.h" |
#include "base/test/null_task_runner.h" |
#include "base/test/test_mock_time_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
@@ -47,10 +48,11 @@ class TestWallpaperColorCalculatorObserver |
} // namespace |
-class WallPaperColorCalculatorTest : public testing::Test { |
+// Test fixture targeting asynchronous color calculations. |
+class WallPaperColorCalculatorAsyncTest : public testing::Test { |
public: |
- WallPaperColorCalculatorTest(); |
- ~WallPaperColorCalculatorTest() override; |
+ WallPaperColorCalculatorAsyncTest(); |
+ ~WallPaperColorCalculatorAsyncTest() override; |
protected: |
void InstallTaskRunner( |
@@ -64,14 +66,16 @@ class WallPaperColorCalculatorTest : public testing::Test { |
TestWallpaperColorCalculatorObserver observer_; |
+ base::HistogramTester histograms_; |
+ |
private: |
// Required by PostTaskAndReplyImpl. |
std::unique_ptr<base::ThreadTaskRunnerHandle> task_runner_handle_; |
- DISALLOW_COPY_AND_ASSIGN(WallPaperColorCalculatorTest); |
+ DISALLOW_COPY_AND_ASSIGN(WallPaperColorCalculatorAsyncTest); |
}; |
-WallPaperColorCalculatorTest::WallPaperColorCalculatorTest() |
+WallPaperColorCalculatorAsyncTest::WallPaperColorCalculatorAsyncTest() |
: task_runner_(new base::TestMockTimeTaskRunner()) { |
// Creates an |image_| that will yield a non-default prominent color. |
const gfx::Size kImageSize(300, 200); |
@@ -92,9 +96,9 @@ WallPaperColorCalculatorTest::WallPaperColorCalculatorTest() |
InstallTaskRunner(task_runner_); |
} |
-WallPaperColorCalculatorTest::~WallPaperColorCalculatorTest() {} |
+WallPaperColorCalculatorAsyncTest::~WallPaperColorCalculatorAsyncTest() {} |
-void WallPaperColorCalculatorTest::InstallTaskRunner( |
+void WallPaperColorCalculatorAsyncTest::InstallTaskRunner( |
scoped_refptr<base::SingleThreadTaskRunner> task_runner) { |
task_runner_handle_.reset(); |
task_runner_handle_ = |
@@ -102,7 +106,50 @@ void WallPaperColorCalculatorTest::InstallTaskRunner( |
calculator_->SetTaskRunnerForTest(task_runner); |
} |
-TEST_F(WallPaperColorCalculatorTest, |
+TEST_F(WallPaperColorCalculatorAsyncTest, |
+ AsynchronousMetricsForSuccessfulExtraction) { |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtractionResult", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 0); |
+ |
+ EXPECT_TRUE(calculator_->StartCalculation()); |
+ task_runner_->RunUntilIdle(); |
+ |
+ histograms_.ExpectUniqueSample("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ false, 1); |
+ histograms_.ExpectUniqueSample("Ash.Wallpaper.ColorExtractionResult", true, |
+ 1); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 1); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 1); |
+} |
+ |
+TEST_F(WallPaperColorCalculatorAsyncTest, |
+ AsynchronousMetricsForFailedExtraction) { |
+ scoped_refptr<base::NullTaskRunner> task_runner = new base::NullTaskRunner(); |
+ InstallTaskRunner(task_runner); |
+ |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtractionResult", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 0); |
+ |
+ EXPECT_FALSE(calculator_->StartCalculation()); |
+ |
+ histograms_.ExpectUniqueSample("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ false, 1); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtractionResult", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 0); |
+} |
+ |
+TEST_F(WallPaperColorCalculatorAsyncTest, |
StartCalculationReturnsFalseWhenPostingTaskFails) { |
scoped_refptr<base::NullTaskRunner> task_runner = new base::NullTaskRunner(); |
InstallTaskRunner(task_runner); |
@@ -112,7 +159,8 @@ TEST_F(WallPaperColorCalculatorTest, |
EXPECT_EQ(kDefaultColor, calculator_->prominent_color()); |
} |
-TEST_F(WallPaperColorCalculatorTest, ObserverNotifiedOnSuccessfulCalculation) { |
+TEST_F(WallPaperColorCalculatorAsyncTest, |
+ ObserverNotifiedOnSuccessfulCalculation) { |
EXPECT_FALSE(observer_.WasNotified()); |
EXPECT_TRUE(calculator_->StartCalculation()); |
@@ -122,7 +170,7 @@ TEST_F(WallPaperColorCalculatorTest, ObserverNotifiedOnSuccessfulCalculation) { |
EXPECT_TRUE(observer_.WasNotified()); |
} |
-TEST_F(WallPaperColorCalculatorTest, ColorUpdatedOnSuccessfulCalculation) { |
+TEST_F(WallPaperColorCalculatorAsyncTest, ColorUpdatedOnSuccessfulCalculation) { |
calculator_->set_prominent_color_for_test(kDefaultColor); |
EXPECT_TRUE(calculator_->StartCalculation()); |
@@ -132,7 +180,7 @@ TEST_F(WallPaperColorCalculatorTest, ColorUpdatedOnSuccessfulCalculation) { |
EXPECT_NE(kDefaultColor, calculator_->prominent_color()); |
} |
-TEST_F(WallPaperColorCalculatorTest, |
+TEST_F(WallPaperColorCalculatorAsyncTest, |
NoCrashWhenCalculatorDestroyedBeforeTaskProcessing) { |
EXPECT_TRUE(calculator_->StartCalculation()); |
calculator_.reset(); |
@@ -144,4 +192,68 @@ TEST_F(WallPaperColorCalculatorTest, |
EXPECT_FALSE(task_runner_->HasPendingTask()); |
} |
+// Test fixture targeting synchronous color calculations. |
+class WallPaperColorCalculatorSyncTest : public testing::Test { |
+ public: |
+ WallPaperColorCalculatorSyncTest(); |
+ ~WallPaperColorCalculatorSyncTest() override; |
+ |
+ protected: |
+ void InstallTaskRunner( |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ |
+ gfx::ImageSkia image_; |
+ |
+ std::unique_ptr<WallpaperColorCalculator> calculator_; |
+ |
+ TestWallpaperColorCalculatorObserver observer_; |
+ |
+ base::HistogramTester histograms_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(WallPaperColorCalculatorSyncTest); |
+}; |
+ |
+WallPaperColorCalculatorSyncTest::WallPaperColorCalculatorSyncTest() { |
+ // Creates an |image_| that will yield a non-default prominent color. |
+ const gfx::Size kImageSize(5, 5); |
+ const SkColor kGray = SkColorSetRGB(10, 10, 10); |
+ const SkColor kVibrantGreen = SkColorSetRGB(25, 200, 25); |
+ |
+ gfx::Canvas canvas(kImageSize, 1.0f, true); |
+ canvas.FillRect(gfx::Rect(kImageSize), kGray); |
+ canvas.FillRect(gfx::Rect(0, 1, 5, 1), kVibrantGreen); |
+ |
+ image_ = gfx::ImageSkia::CreateFrom1xBitmap(canvas.GetBitmap()); |
+ |
+ calculator_ = base::MakeUnique<WallpaperColorCalculator>( |
+ image_, color_utils::LumaRange::NORMAL, |
+ color_utils::SaturationRange::VIBRANT, nullptr); |
+ calculator_->AddObserver(&observer_); |
+ |
+ calculator_->SetTaskRunnerForTest(nullptr); |
+} |
+ |
+WallPaperColorCalculatorSyncTest::~WallPaperColorCalculatorSyncTest() {} |
+ |
+TEST_F(WallPaperColorCalculatorSyncTest, SynchronousMetrics) { |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.ColorExtractionResult", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 0); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 0); |
+ |
+ EXPECT_TRUE(calculator_->StartCalculation()); |
+ |
+ histograms_.ExpectUniqueSample("Ash.Wallpaper.ColorExtraction.ExecutionType", |
+ true, 1); |
+ histograms_.ExpectUniqueSample("Ash.Wallpaper.ColorExtractionResult", true, |
+ 1); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.TimeSpentExtractingColors_v2", 1); |
+ histograms_.ExpectTotalCount("Ash.Wallpaper.AsyncTimeSpentExtractingColors", |
+ 0); |
+ ; |
+} |
+ |
} // namespace wallpaper |