| Index: components/wallpaper/wallpaper_color_calculator.cc
|
| diff --git a/components/wallpaper/wallpaper_color_calculator.cc b/components/wallpaper/wallpaper_color_calculator.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0096d5d19161120856ab32d3931036ce9db9d7ad
|
| --- /dev/null
|
| +++ b/components/wallpaper/wallpaper_color_calculator.cc
|
| @@ -0,0 +1,77 @@
|
| +// Copyright 2017 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 "components/wallpaper/wallpaper_color_calculator.h"
|
| +
|
| +#include <string>
|
| +#include <utility>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/metrics/histogram_macros.h"
|
| +#include "base/task_runner.h"
|
| +#include "base/task_runner_util.h"
|
| +
|
| +namespace wallpaper {
|
| +
|
| +WallpaperColorCalculator::WallpaperColorCalculator(
|
| + const gfx::ImageSkia& image,
|
| + color_utils::LumaRange luma,
|
| + color_utils::SaturationRange saturation,
|
| + scoped_refptr<base::TaskRunner> task_runner)
|
| + : image_(image),
|
| + luma_(luma),
|
| + saturation_(saturation),
|
| + task_runner_(std::move(task_runner)),
|
| + weak_ptr_factory_(this) {}
|
| +
|
| +WallpaperColorCalculator::~WallpaperColorCalculator() {}
|
| +
|
| +void WallpaperColorCalculator::AddObserver(
|
| + WallpaperColorCalculatorObserver* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void WallpaperColorCalculator::RemoveObserver(
|
| + WallpaperColorCalculatorObserver* observer) {
|
| + observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| +bool WallpaperColorCalculator::StartCalculation() {
|
| + start_calculation_time_ = base::Time::Now();
|
| +
|
| + image_.MakeThreadSafe();
|
| + if (base::PostTaskAndReplyWithResult(
|
| + task_runner_.get(), FROM_HERE,
|
| + base::Bind(&color_utils::CalculateProminentColorOfBitmap,
|
| + *image_.bitmap(), luma_, saturation_),
|
| + base::Bind(&WallpaperColorCalculator::NotifyCalculationComplete,
|
| + weak_ptr_factory_.GetWeakPtr()))) {
|
| + return true;
|
| + }
|
| +
|
| + LOG(WARNING) << "PostSequencedWorkerTask failed. "
|
| + << "Wallpaper promiment color may not be calculated.";
|
| +
|
| + prominent_color_ = SK_ColorTRANSPARENT;
|
| + return false;
|
| +}
|
| +
|
| +void WallpaperColorCalculator::SetTaskRunnerForTest(
|
| + scoped_refptr<base::TaskRunner> task_runner) {
|
| + task_runner_ = task_runner;
|
| +}
|
| +
|
| +void WallpaperColorCalculator::NotifyCalculationComplete(
|
| + SkColor prominent_color) {
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("Ash.Wallpaper.TimeSpentExtractingColors",
|
| + base::Time::Now() - start_calculation_time_);
|
| +
|
| + prominent_color_ = prominent_color;
|
| + for (auto& observer : observers_)
|
| + observer.OnColorCalculationComplete();
|
| +
|
| + // This could be deleted!
|
| +}
|
| +
|
| +} // namespace wallpaper
|
|
|