| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include "webkit/tools/test_shell/image_decoder_unittest.h" | 7 #include "webkit/tools/test_shell/image_decoder_unittest.h" |
| 8 | 8 |
| 9 #if !defined(OS_WIN) | 9 #if !defined(OS_WIN) |
| 10 #include <unistd.h> | 10 #include <unistd.h> |
| 11 #endif | 11 #endif |
| 12 | 12 |
| 13 #include "PNGImageDecoder.h" | 13 #include "PNGImageDecoder.h" |
| 14 | 14 |
| 15 #include "app/gfx/codec/png_codec.h" | 15 #include "app/gfx/codec/png_codec.h" |
| 16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
| 17 #include "base/file_util.h" | 17 #include "base/file_util.h" |
| 18 #include "base/gfx/gdi_util.h" | |
| 19 #include "base/path_service.h" | 18 #include "base/path_service.h" |
| 20 #include "base/string_util.h" | 19 #include "base/string_util.h" |
| 21 #include "skia/ext/vector_canvas.h" | 20 #include "skia/ext/vector_canvas.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 23 #include "third_party/skia/include/effects/SkDashPathEffect.h" | 22 #include "third_party/skia/include/effects/SkDashPathEffect.h" |
| 24 | 23 |
| 25 namespace skia { | 24 namespace skia { |
| 26 | 25 |
| 27 namespace { | 26 namespace { |
| 28 | 27 |
| 29 const wchar_t* const kGenerateSwitch = L"vector-canvas-generate"; | 28 const wchar_t* const kGenerateSwitch = L"vector-canvas-generate"; |
| 30 | 29 |
| 31 // Lightweight HDC management. | 30 // Lightweight HDC management. |
| 32 class Context { | 31 class Context { |
| 33 public: | 32 public: |
| 34 Context() : context_(CreateCompatibleDC(NULL)) { | 33 Context() : context_(CreateCompatibleDC(NULL)) { |
| 35 EXPECT_TRUE(context_); | 34 EXPECT_TRUE(context_); |
| 36 } | 35 } |
| 37 ~Context() { | 36 ~Context() { |
| 38 DeleteDC(context_); | 37 DeleteDC(context_); |
| 39 } | 38 } |
| 40 | 39 |
| 41 HDC context() const { return context_; } | 40 HDC context() const { return context_; } |
| 42 | 41 |
| 43 private: | 42 private: |
| 44 HDC context_; | 43 HDC context_; |
| 45 | 44 |
| 46 DISALLOW_EVIL_CONSTRUCTORS(Context); | 45 DISALLOW_COPY_AND_ASSIGN(Context); |
| 47 }; | 46 }; |
| 48 | 47 |
| 49 // Lightweight HBITMAP management. | 48 // Lightweight HBITMAP management. |
| 50 class Bitmap { | 49 class Bitmap { |
| 51 public: | 50 public: |
| 52 Bitmap(const Context& context, int x, int y) { | 51 Bitmap(const Context& context, int x, int y) { |
| 53 BITMAPINFOHEADER hdr; | 52 BITMAPINFOHEADER hdr; |
| 54 gfx::CreateBitmapHeader(x, y, &hdr); | 53 hdr.biSize = sizeof(BITMAPINFOHEADER); |
| 54 hdr.biWidth = x; |
| 55 hdr.biHeight = -y; // Minus means top-down bitmap. |
| 56 hdr.biPlanes = 1; |
| 57 hdr.biBitCount = 32; |
| 58 hdr.biCompression = BI_RGB; // No compression. |
| 59 hdr.biSizeImage = 0; |
| 60 hdr.biXPelsPerMeter = 1; |
| 61 hdr.biYPelsPerMeter = 1; |
| 62 hdr.biClrUsed = 0; |
| 63 hdr.biClrImportant = 0; |
| 55 bitmap_ = CreateDIBSection(context.context(), | 64 bitmap_ = CreateDIBSection(context.context(), |
| 56 reinterpret_cast<BITMAPINFO*>(&hdr), 0, | 65 reinterpret_cast<BITMAPINFO*>(&hdr), 0, |
| 57 &data_, NULL, 0); | 66 &data_, NULL, 0); |
| 58 EXPECT_TRUE(bitmap_); | 67 EXPECT_TRUE(bitmap_); |
| 59 EXPECT_TRUE(SelectObject(context.context(), bitmap_)); | 68 EXPECT_TRUE(SelectObject(context.context(), bitmap_)); |
| 60 } | 69 } |
| 61 ~Bitmap() { | 70 ~Bitmap() { |
| 62 EXPECT_TRUE(DeleteObject(bitmap_)); | 71 EXPECT_TRUE(DeleteObject(bitmap_)); |
| 63 } | 72 } |
| 64 | 73 |
| 65 private: | 74 private: |
| 66 HBITMAP bitmap_; | 75 HBITMAP bitmap_; |
| 67 | 76 |
| 68 void* data_; | 77 void* data_; |
| 69 | 78 |
| 70 DISALLOW_EVIL_CONSTRUCTORS(Bitmap); | 79 DISALLOW_COPY_AND_ASSIGN(Bitmap); |
| 71 }; | 80 }; |
| 72 | 81 |
| 73 // Lightweight raw-bitmap management. The image, once initialized, is immuable. | 82 // Lightweight raw-bitmap management. The image, once initialized, is immuable. |
| 74 // It is mainly used for comparison. | 83 // It is mainly used for comparison. |
| 75 class Image { | 84 class Image { |
| 76 public: | 85 public: |
| 77 // Creates the image from the given filename on disk. | 86 // Creates the image from the given filename on disk. |
| 78 Image(const std::wstring& filename) : ignore_alpha_(true) { | 87 Image(const std::wstring& filename) : ignore_alpha_(true) { |
| 79 Vector<char> compressed; | 88 Vector<char> compressed; |
| 80 ReadFileToVector(filename, &compressed); | 89 ReadFileToVector(filename, &compressed); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 // Length of a line in bytes. | 200 // Length of a line in bytes. |
| 192 int row_length_; | 201 int row_length_; |
| 193 | 202 |
| 194 // Actual bitmap data in arrays of RGBAs (so when loaded as uint32, it's | 203 // Actual bitmap data in arrays of RGBAs (so when loaded as uint32, it's |
| 195 // 0xABGR). | 204 // 0xABGR). |
| 196 std::vector<unsigned char> data_; | 205 std::vector<unsigned char> data_; |
| 197 | 206 |
| 198 // Flag to signal if the comparison functions should ignore the alpha channel. | 207 // Flag to signal if the comparison functions should ignore the alpha channel. |
| 199 const bool ignore_alpha_; | 208 const bool ignore_alpha_; |
| 200 | 209 |
| 201 DISALLOW_EVIL_CONSTRUCTORS(Image); | 210 DISALLOW_COPY_AND_ASSIGN(Image); |
| 202 }; | 211 }; |
| 203 | 212 |
| 204 // Base for tests. Capability to process an image. | 213 // Base for tests. Capability to process an image. |
| 205 class ImageTest : public testing::Test { | 214 class ImageTest : public testing::Test { |
| 206 public: | 215 public: |
| 207 // In what state is the test running. | 216 // In what state is the test running. |
| 208 enum ProcessAction { | 217 enum ProcessAction { |
| 209 GENERATE, | 218 GENERATE, |
| 210 COMPARE, | 219 COMPARE, |
| 211 NOOP, | 220 NOOP, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 void SaveImage(const skia::PlatformCanvas& canvas, | 296 void SaveImage(const skia::PlatformCanvas& canvas, |
| 288 const std::wstring& filename) const { | 297 const std::wstring& filename) const { |
| 289 Image(canvas).SaveToFile(test_file(filename)); | 298 Image(canvas).SaveToFile(test_file(filename)); |
| 290 } | 299 } |
| 291 | 300 |
| 292 ProcessAction action_; | 301 ProcessAction action_; |
| 293 | 302 |
| 294 // Path to directory used to contain the test data. | 303 // Path to directory used to contain the test data. |
| 295 std::wstring test_dir_; | 304 std::wstring test_dir_; |
| 296 | 305 |
| 297 DISALLOW_EVIL_CONSTRUCTORS(ImageTest); | 306 DISALLOW_COPY_AND_ASSIGN(ImageTest); |
| 298 }; | 307 }; |
| 299 | 308 |
| 300 // Premultiply the Alpha channel on the R, B and G channels. | 309 // Premultiply the Alpha channel on the R, B and G channels. |
| 301 void Premultiply(SkBitmap bitmap) { | 310 void Premultiply(SkBitmap bitmap) { |
| 302 SkAutoLockPixels lock(bitmap); | 311 SkAutoLockPixels lock(bitmap); |
| 303 for (int x = 0; x < bitmap.width(); ++x) { | 312 for (int x = 0; x < bitmap.width(); ++x) { |
| 304 for (int y = 0; y < bitmap.height(); ++y) { | 313 for (int y = 0; y < bitmap.height(); ++y) { |
| 305 uint32_t* pixel_addr = bitmap.getAddr32(x, y); | 314 uint32_t* pixel_addr = bitmap.getAddr32(x, y); |
| 306 uint32_t color = *pixel_addr; | 315 uint32_t color = *pixel_addr; |
| 307 BYTE alpha = SkColorGetA(color); | 316 BYTE alpha = SkColorGetA(color); |
| (...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 { | 965 { |
| 957 vcanvas_->rotate(67); | 966 vcanvas_->rotate(67); |
| 958 pcanvas_->rotate(67); | 967 pcanvas_->rotate(67); |
| 959 vcanvas_->drawBitmap(bitmap, 20, -50, NULL); | 968 vcanvas_->drawBitmap(bitmap, 20, -50, NULL); |
| 960 pcanvas_->drawBitmap(bitmap, 20, -50, NULL); | 969 pcanvas_->drawBitmap(bitmap, 20, -50, NULL); |
| 961 EXPECT_EQ(0., ProcessImage(L"rotate")); | 970 EXPECT_EQ(0., ProcessImage(L"rotate")); |
| 962 } | 971 } |
| 963 } | 972 } |
| 964 | 973 |
| 965 } // namespace skia | 974 } // namespace skia |
| OLD | NEW |