diff options
author | mathp <mathp@chromium.org> | 2014-10-08 07:52:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-08 14:53:10 +0000 |
commit | 60143a3967b0a687f05a166db2314f0495d1fe10 (patch) | |
tree | 28977831d167a33330ab30d72cfb6d3d309809fb /components/suggestions | |
parent | 07bbf7c1a14f11ab27eedf76c3c29ca4aa98020d (diff) | |
download | chromium_src-60143a3967b0a687f05a166db2314f0495d1fe10.zip chromium_src-60143a3967b0a687f05a166db2314f0495d1fe10.tar.gz chromium_src-60143a3967b0a687f05a166db2314f0495d1fe10.tar.bz2 |
Revert of [Suggestions] Create ImageEncoder, to abstract away image encode/decode. (patchset #4 id:170001 of https://codereview.chromium.org/630073002/)
Reason for revert:
It is no longer needed, we decided on a different approach.
Original issue's description:
> [Suggestions] Create ImageEncoder, to abstract away image encode/decode.
>
> iOS can't depend on JPEG encoder.
>
> TBR=jam
> BUG=387751,409156
>
> Committed: https://crrev.com/f5e2e2fa7303d699027095cd9b7cfb9462b585f6
> Cr-Commit-Position: refs/heads/master@{#298510}
TBR=huangs@chromium.org,blundell@chromium.org,jam@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=387751,409156
Review URL: https://codereview.chromium.org/634273002
Cr-Commit-Position: refs/heads/master@{#298706}
Diffstat (limited to 'components/suggestions')
-rw-r--r-- | components/suggestions/BUILD.gn | 14 | ||||
-rw-r--r-- | components/suggestions/image_encoder.h | 36 | ||||
-rw-r--r-- | components/suggestions/image_manager.cc | 30 | ||||
-rw-r--r-- | components/suggestions/image_manager.h | 11 | ||||
-rw-r--r-- | components/suggestions/image_manager_unittest.cc | 24 | ||||
-rw-r--r-- | components/suggestions/jpeg/jpeg_image_encoder.cc | 29 | ||||
-rw-r--r-- | components/suggestions/jpeg/jpeg_image_encoder.h | 37 |
7 files changed, 34 insertions, 147 deletions
diff --git a/components/suggestions/BUILD.gn b/components/suggestions/BUILD.gn index 855e028..12c9576 100644 --- a/components/suggestions/BUILD.gn +++ b/components/suggestions/BUILD.gn @@ -6,7 +6,6 @@ static_library("suggestions") { sources = [ "blacklist_store.cc", "blacklist_store.h", - "image_encoder.h", "image_fetcher.h", "image_fetcher_delegate.h", "image_manager.cc", @@ -32,16 +31,3 @@ static_library("suggestions") { "//url", ] } - -static_library("jpeg_image_encoder") { - sources = [ - "jpeg/jpeg_image_encoder.cc", - "jpeg/jpeg_image_encoder.h", - ] - - deps = [ - "//base", - "//ui/gfx", - ":suggestions", - ] -} diff --git a/components/suggestions/image_encoder.h b/components/suggestions/image_encoder.h deleted file mode 100644 index 14e511e..0000000 --- a/components/suggestions/image_encoder.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 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. - -#ifndef COMPONENTS_SUGGESTIONS_IMAGE_ENCODER_H_ -#define COMPONENTS_SUGGESTIONS_IMAGE_ENCODER_H_ - -#include <vector> - -#include "base/macros.h" - -class SkBitmap; - -namespace suggestions { - -// A interface to encode/decode images. -class ImageEncoder { - public: - ImageEncoder() {} - virtual ~ImageEncoder() {} - - // From encoded bytes to SkBitmap. Caller owns the returned pointer. - virtual SkBitmap* DecodeImage( - const std::vector<unsigned char>& encoded_data) = 0; - - // From SkBitmap to the vector of encoded bytes, |dst|. - virtual bool EncodeImage( - const SkBitmap& bitmap, std::vector<unsigned char>* dest) = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(ImageEncoder); -}; - -} // namespace suggestions - -#endif // COMPONENTS_SUGGESTIONS_IMAGE_ENCODER_H_ diff --git a/components/suggestions/image_manager.cc b/components/suggestions/image_manager.cc index b702fed..9e43381 100644 --- a/components/suggestions/image_manager.cc +++ b/components/suggestions/image_manager.cc @@ -5,21 +5,28 @@ #include "components/suggestions/image_manager.h" #include "base/bind.h" -#include "components/suggestions/image_encoder.h" #include "components/suggestions/image_fetcher.h" +#include "ui/gfx/codec/jpeg_codec.h" using leveldb_proto::ProtoDatabase; +namespace { + +// From JPEG-encoded bytes to SkBitmap. +SkBitmap* DecodeImage(const std::vector<unsigned char>& encoded_data) { + return gfx::JPEGCodec::Decode(&encoded_data[0], encoded_data.size()); +} + +} // namespace + namespace suggestions { ImageManager::ImageManager() : weak_ptr_factory_(this) {} ImageManager::ImageManager(scoped_ptr<ImageFetcher> image_fetcher, - scoped_ptr<ImageEncoder> image_encoder, scoped_ptr<ProtoDatabase<ImageData> > database, const base::FilePath& database_dir) : image_fetcher_(image_fetcher.Pass()), - image_encoder_(image_encoder.Pass()), database_(database.Pass()), database_ready_(false), weak_ptr_factory_(this) { @@ -132,7 +139,7 @@ void ImageManager::SaveImage(const GURL& url, const SkBitmap& bitmap) { // Attempt to save a JPEG representation to the database. If not successful, // the fetched bitmap will still be inserted in the cache, above. std::vector<unsigned char> encoded_data; - if (image_encoder_->EncodeImage(bitmap, &encoded_data)) { + if (EncodeImage(bitmap, &encoded_data)) { // Save the resulting bitmap to the database. ImageData data; data.set_url(url.spec()); @@ -187,7 +194,7 @@ void ImageManager::LoadEntriesInCache(scoped_ptr<ImageDataVector> entries) { std::vector<unsigned char> encoded_data(it->data().begin(), it->data().end()); - scoped_ptr<SkBitmap> bitmap(image_encoder_->DecodeImage(encoded_data)); + scoped_ptr<SkBitmap> bitmap(DecodeImage(encoded_data)); if (bitmap.get()) { image_map_.insert(std::make_pair(it->url(), *bitmap)); } @@ -205,4 +212,17 @@ void ImageManager::ServePendingCacheRequests() { } } +// static +bool ImageManager::EncodeImage(const SkBitmap& bitmap, + std::vector<unsigned char>* dest) { + SkAutoLockPixels bitmap_lock(bitmap); + if (!bitmap.readyToDraw() || bitmap.isNull()) { + return false; + } + return gfx::JPEGCodec::Encode( + reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)), + gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(), + bitmap.rowBytes(), 100, dest); +} + } // namespace suggestions diff --git a/components/suggestions/image_manager.h b/components/suggestions/image_manager.h index 76f8a94..02ec268 100644 --- a/components/suggestions/image_manager.h +++ b/components/suggestions/image_manager.h @@ -28,7 +28,6 @@ class URLRequestContextGetter; namespace suggestions { class ImageData; -class ImageEncoder; class ImageFetcher; class SuggestionsProfile; @@ -38,10 +37,7 @@ class ImageManager : public ImageFetcherDelegate { public: typedef std::vector<ImageData> ImageDataVector; - // This class takes ownership of |image_fetcher|, |image_encoder| and - // |database|. ImageManager(scoped_ptr<ImageFetcher> image_fetcher, - scoped_ptr<ImageEncoder> image_encoder, scoped_ptr<leveldb_proto::ProtoDatabase<ImageData> > database, const base::FilePath& database_dir); virtual ~ImageManager(); @@ -123,6 +119,11 @@ class ImageManager : public ImageFetcherDelegate { void ServePendingCacheRequests(); + // From SkBitmap to the vector of JPEG-encoded bytes, |dst|. Visible only for + // testing. + static bool EncodeImage(const SkBitmap& bitmap, + std::vector<unsigned char>* dest); + // Map from URL to image URL. Should be kept up to date when a new // SuggestionsProfile is available. std::map<GURL, GURL> image_url_map_; @@ -136,8 +137,6 @@ class ImageManager : public ImageFetcherDelegate { scoped_ptr<ImageFetcher> image_fetcher_; - scoped_ptr<ImageEncoder> image_encoder_; - scoped_ptr<leveldb_proto::ProtoDatabase<ImageData> > database_; bool database_ready_; diff --git a/components/suggestions/image_manager_unittest.cc b/components/suggestions/image_manager_unittest.cc index cd39176..57dd8bf 100644 --- a/components/suggestions/image_manager_unittest.cc +++ b/components/suggestions/image_manager_unittest.cc @@ -3,17 +3,14 @@ // found in the LICENSE file. #include <string> -#include <vector> #include "base/files/file_path.h" #include "base/run_loop.h" #include "components/leveldb_proto/proto_database.h" #include "components/leveldb_proto/testing/fake_db.h" -#include "components/suggestions/image_encoder.h" #include "components/suggestions/image_fetcher.h" #include "components/suggestions/image_fetcher_delegate.h" #include "components/suggestions/image_manager.h" -#include "components/suggestions/jpeg/jpeg_image_encoder.h" #include "components/suggestions/proto/suggestions.pb.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -49,15 +46,6 @@ class MockImageFetcher : public suggestions::ImageFetcher { MOCK_METHOD1(SetImageFetcherDelegate, void(ImageFetcherDelegate*)); }; -class MockImageEncoder : public suggestions::ImageEncoder { - public: - MockImageEncoder() {} - virtual ~MockImageEncoder() {} - MOCK_METHOD1(DecodeImage, - SkBitmap*(const std::vector<unsigned char>&)); - MOCK_METHOD2(EncodeImage, bool(const SkBitmap&, std::vector<unsigned char>*)); -}; - class ImageManagerTest : public testing::Test { public: ImageManagerTest() @@ -67,8 +55,7 @@ class ImageManagerTest : public testing::Test { virtual void SetUp() override { fake_db_ = new FakeDB<ImageData>(&db_model_); - jpeg_image_encoder_ = new JpegImageEncoder(); - image_manager_.reset(CreateImageManager(fake_db_, jpeg_image_encoder_)); + image_manager_.reset(CreateImageManager(fake_db_)); } virtual void TearDown() override { @@ -105,7 +92,7 @@ class ImageManagerTest : public testing::Test { ImageData data; data.set_url(url); std::vector<unsigned char> encoded; - EXPECT_TRUE(jpeg_image_encoder_->EncodeImage(bm, &encoded)); + EXPECT_TRUE(ImageManager::EncodeImage(bm, &encoded)); data.set_data(std::string(encoded.begin(), encoded.end())); return data; } @@ -120,13 +107,11 @@ class ImageManagerTest : public testing::Test { loop->Quit(); } - ImageManager* CreateImageManager(FakeDB<ImageData>* fake_db, - JpegImageEncoder* jpeg_image_encoder) { + ImageManager* CreateImageManager(FakeDB<ImageData>* fake_db) { mock_image_fetcher_ = new StrictMock<MockImageFetcher>(); EXPECT_CALL(*mock_image_fetcher_, SetImageFetcherDelegate(_)); return new ImageManager( scoped_ptr<ImageFetcher>(mock_image_fetcher_), - scoped_ptr<ImageEncoder>(jpeg_image_encoder), scoped_ptr<leveldb_proto::ProtoDatabase<ImageData> >(fake_db), FakeDB<ImageData>::DirectoryForTestDB()); } @@ -134,7 +119,6 @@ class ImageManagerTest : public testing::Test { EntryMap db_model_; // Owned by the ImageManager under test. FakeDB<ImageData>* fake_db_; - JpegImageEncoder* jpeg_image_encoder_; MockImageFetcher* mock_image_fetcher_; @@ -191,7 +175,7 @@ TEST_F(ImageManagerTest, GetImageForURLNetworkCacheHit) { // Create the ImageManager with an added entry in the database. AddEntry(GetSampleImageData(kTestUrl1), &db_model_); FakeDB<ImageData>* fake_db = new FakeDB<ImageData>(&db_model_); - image_manager_.reset(CreateImageManager(fake_db, new JpegImageEncoder())); + image_manager_.reset(CreateImageManager(fake_db)); image_manager_->Initialize(suggestions_profile); fake_db->InitCallback(true); fake_db->LoadCallback(true); diff --git a/components/suggestions/jpeg/jpeg_image_encoder.cc b/components/suggestions/jpeg/jpeg_image_encoder.cc deleted file mode 100644 index a3a0cf4..0000000 --- a/components/suggestions/jpeg/jpeg_image_encoder.cc +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 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/suggestions/jpeg/jpeg_image_encoder.h" - -#include "ui/gfx/codec/jpeg_codec.h" -#include "ui/gfx/image/image_skia.h" - -namespace suggestions { - -SkBitmap* JpegImageEncoder::DecodeImage( - const std::vector<unsigned char>& encoded_data) { - return gfx::JPEGCodec::Decode(&encoded_data[0], encoded_data.size()); -} - -bool JpegImageEncoder::EncodeImage(const SkBitmap& bitmap, - std::vector<unsigned char>* dest) { - SkAutoLockPixels bitmap_lock(bitmap); - if (!bitmap.readyToDraw() || bitmap.isNull()) { - return false; - } - return gfx::JPEGCodec::Encode( - reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)), - gfx::JPEGCodec::FORMAT_SkBitmap, bitmap.width(), bitmap.height(), - bitmap.rowBytes(), 100, dest); -} - -} // namespace suggestions diff --git a/components/suggestions/jpeg/jpeg_image_encoder.h b/components/suggestions/jpeg/jpeg_image_encoder.h deleted file mode 100644 index 09f3975..0000000 --- a/components/suggestions/jpeg/jpeg_image_encoder.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2014 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. - -#ifndef COMPONENTS_SUGGESTIONS_JPEG_JPEG_IMAGE_ENCODER_H_ -#define COMPONENTS_SUGGESTIONS_JPEG_JPEG_IMAGE_ENCODER_H_ - -#include <vector> - -#include "base/macros.h" -#include "components/suggestions/image_encoder.h" - -class SkBitmap; - -namespace suggestions { - -// A class used to encode/decode images using the JPEG codec. -class JpegImageEncoder : public ImageEncoder { - public: - JpegImageEncoder() {} - virtual ~JpegImageEncoder() {} - - // From encoded bytes to SkBitmap. Caller owns the returned pointer. - virtual SkBitmap* DecodeImage( - const std::vector<unsigned char>& encoded_data) OVERRIDE; - - // From SkBitmap to the vector of encoded bytes, |dst|. - virtual bool EncodeImage(const SkBitmap& bitmap, - std::vector<unsigned char>* dest) OVERRIDE; - - private: - DISALLOW_COPY_AND_ASSIGN(JpegImageEncoder); -}; - -} // namespace suggestions - -#endif // COMPONENTS_SUGGESTIONS_JPEG_JPEG_IMAGE_ENCODER_H_ |