summaryrefslogtreecommitdiffstats
path: root/content/browser/gpu
diff options
context:
space:
mode:
authorbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-17 22:03:08 +0000
committerbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-17 22:03:08 +0000
commit7fe5831055e00658ef85c81148b557eb628fa425 (patch)
treeae3d45da504c4f39b93ae2882261b401b5280a18 /content/browser/gpu
parent86ec2b3cd92b211b1b20f3bcbc83d79c7acdfbf9 (diff)
downloadchromium_src-7fe5831055e00658ef85c81148b557eb628fa425.zip
chromium_src-7fe5831055e00658ef85c81148b557eb628fa425.tar.gz
chromium_src-7fe5831055e00658ef85c81148b557eb628fa425.tar.bz2
Removed the pixel tests from content_browsertests.
Test has been replaced by a Telemetry-driver equivalent BUG=278398 R=kbr@chromium.org, piman@chromium.org Review URL: https://codereview.chromium.org/26647003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229236 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/gpu')
-rw-r--r--content/browser/gpu/gpu_pixel_browsertest.cc568
1 files changed, 0 insertions, 568 deletions
diff --git a/content/browser/gpu/gpu_pixel_browsertest.cc b/content/browser/gpu/gpu_pixel_browsertest.cc
deleted file mode 100644
index 5726814..0000000
--- a/content/browser/gpu/gpu_pixel_browsertest.cc
+++ /dev/null
@@ -1,568 +0,0 @@
-// Copyright (c) 2013 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/command_line.h"
-#include "base/file_util.h"
-#include "base/files/file_enumerator.h"
-#include "base/files/file_path.h"
-#include "base/path_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/render_widget_host_view.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_paths.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/test/browser_test_utils.h"
-#include "content/shell/browser/shell.h"
-#include "content/test/content_browser_test.h"
-#include "content/test/content_browser_test_utils.h"
-#include "gpu/config/gpu_test_config.h"
-#include "net/base/net_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/size.h"
-#include "ui/gl/gl_switches.h"
-#include "ui/snapshot/snapshot.h"
-
-namespace {
-
-enum ReferenceImageOption {
- kReferenceImageLocal,
- kReferenceImageCheckedIn,
- kReferenceImageNone // Only check a few key pixels.
-};
-
-struct ReferencePixel {
- int x, y;
- unsigned char r, g, b;
-};
-
-// Command line flag for overriding the default location for putting generated
-// test images that do not match references.
-const char kGeneratedDir[] = "generated-dir";
-// Command line flag for overriding the default location for reference images.
-const char kReferenceDir[] = "reference-dir";
-// Command line flag for Chromium build revision.
-const char kBuildRevision[] = "build-revision";
-
-// Reads and decodes a PNG image to a bitmap. Returns true on success. The PNG
-// should have been encoded using |gfx::PNGCodec::Encode|.
-bool ReadPNGFile(const base::FilePath& file_path, SkBitmap* bitmap) {
- DCHECK(bitmap);
- base::FilePath abs_path(base::MakeAbsoluteFilePath(file_path));
- if (abs_path.empty())
- return false;
-
- std::string png_data;
- return base::ReadFileToString(abs_path, &png_data) &&
- gfx::PNGCodec::Decode(reinterpret_cast<unsigned char*>(&png_data[0]),
- png_data.length(),
- bitmap);
-}
-
-// Encodes a bitmap into a PNG and write to disk. Returns true on success. The
-// parent directory does not have to exist.
-bool WritePNGFile(const SkBitmap& bitmap, const base::FilePath& file_path) {
- std::vector<unsigned char> png_data;
- if (gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, true, &png_data) &&
- file_util::CreateDirectory(file_path.DirName())) {
- int bytes_written = file_util::WriteFile(
- file_path, reinterpret_cast<char*>(&png_data[0]), png_data.size());
- if (bytes_written == static_cast<int>(png_data.size()))
- return true;
- }
- return false;
-}
-
-// Write an empty file, whose name indicates the chrome revision when the ref
-// image was generated.
-bool WriteREVFile(const base::FilePath& file_path) {
- if (file_util::CreateDirectory(file_path.DirName())) {
- char one_byte = 0;
- int bytes_written = file_util::WriteFile(file_path, &one_byte, 1);
- if (bytes_written == 1)
- return true;
- }
- return false;
-}
-
-} // namespace anonymous
-
-namespace content {
-
-// Test fixture for GPU image comparison tests.
-// TODO(kkania): Document how to add to/modify these tests.
-class GpuPixelBrowserTest : public ContentBrowserTest {
- public:
- GpuPixelBrowserTest()
- : ref_img_revision_(0),
- ref_img_revision_no_older_than_(0),
- ref_img_option_(kReferenceImageNone) {
- }
-
- virtual void SetUp() {
- // We expect real pixel output for these tests.
- UseRealGLContexts();
-
- ContentBrowserTest::SetUp();
- }
-
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- command_line->AppendSwitchASCII(switches::kTestGLLib,
- "libllvmpipe.so");
- }
-
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
- ContentBrowserTest::SetUpInProcessBrowserTestFixture();
-
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kUseGpuInTests))
- ref_img_option_ = kReferenceImageLocal;
-
- if (command_line->HasSwitch(kBuildRevision))
- build_revision_ = command_line->GetSwitchValueASCII(kBuildRevision);
-
- ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &test_data_dir_));
- test_data_dir_ = test_data_dir_.AppendASCII("gpu");
-
- if (command_line->HasSwitch(kGeneratedDir))
- generated_img_dir_ = command_line->GetSwitchValuePath(kGeneratedDir);
- else
- generated_img_dir_ = test_data_dir_.AppendASCII("generated");
-
- switch (ref_img_option_) {
- case kReferenceImageLocal:
- if (command_line->HasSwitch(kReferenceDir))
- ref_img_dir_ = command_line->GetSwitchValuePath(kReferenceDir);
- else
- ref_img_dir_ = test_data_dir_.AppendASCII("gpu_reference");
- break;
- case kReferenceImageCheckedIn:
- ref_img_dir_ = test_data_dir_.AppendASCII("llvmpipe_reference");
- break;
- default:
- break;
- }
-
- test_name_ = testing::UnitTest::GetInstance()->current_test_info()->name();
- const char* test_status_prefixes[] = {
- "DISABLED_", "FLAKY_", "FAILS_", "MANUAL_"};
- for (size_t i = 0; i < arraysize(test_status_prefixes); ++i) {
- ReplaceFirstSubstringAfterOffset(
- &test_name_, 0, test_status_prefixes[i], std::string());
- }
- }
-
- // If the existing ref image was saved from an revision older than the
- // ref_img_update_revision, refresh the ref image.
- void RunPixelTest(const gfx::Size& tab_container_size,
- const base::FilePath& url,
- int64 ref_img_update_revision,
- const ReferencePixel* ref_pixels,
- size_t ref_pixel_count) {
- if (ref_img_option_ == kReferenceImageLocal) {
- ref_img_revision_no_older_than_ = ref_img_update_revision;
- ObtainLocalRefImageRevision();
- }
-
- DOMMessageQueue message_queue;
- NavigateToURL(shell(), net::FilePathToFileURL(url));
-
- std::string message;
- // Wait for notification that page is loaded.
- ASSERT_TRUE(message_queue.WaitForMessage(&message));
- EXPECT_STREQ("\"SUCCESS\"", message.c_str()) << message;
-
- SkBitmap bitmap;
- ASSERT_TRUE(TabSnapShotToImage(&bitmap, tab_container_size));
- bool same_pixels = true;
- if (ref_img_option_ == kReferenceImageNone && ref_pixels && ref_pixel_count)
- same_pixels = ComparePixels(bitmap, ref_pixels, ref_pixel_count);
- else
- same_pixels = CompareImages(bitmap);
- EXPECT_TRUE(same_pixels);
- }
-
- const base::FilePath& test_data_dir() const {
- return test_data_dir_;
- }
-
- private:
- base::FilePath test_data_dir_;
- base::FilePath generated_img_dir_;
- base::FilePath ref_img_dir_;
- int64 ref_img_revision_;
- std::string build_revision_;
- // The name of the test, with any special prefixes dropped.
- std::string test_name_;
-
- // Any local ref image generated from older revision is ignored.
- int64 ref_img_revision_no_older_than_;
-
- // Whether use locally generated ref images, or checked in ref images, or
- // simply check a few key pixels.
- ReferenceImageOption ref_img_option_;
-
- // Compares the generated bitmap with the appropriate reference image on disk.
- // Returns true iff the images were the same.
- //
- // If no valid reference image exists, save the generated bitmap to the disk.
- // The image format is:
- // <test_name>_<revision>.png
- // E.g.,
- // WebGLTeapot_19762.png
- // The number is the chromium revision that generated the image.
- //
- // On failure or on ref image generation, the image and diff image will be
- // written to disk. The formats are:
- // FAIL_<ref_image_name>, DIFF_<ref_image_name>
- // E.g.,
- // FAIL_WebGLTeapot_19762.png, DIFF_WebGLTeapot_19762.png
- bool CompareImages(const SkBitmap& gen_bmp) {
- SkBitmap ref_bmp_on_disk;
-
- base::FilePath img_path = ref_img_dir_.AppendASCII(test_name_ + ".png");
- bool found_ref_img = ReadPNGFile(img_path, &ref_bmp_on_disk);
-
- if (!found_ref_img && ref_img_option_ == kReferenceImageCheckedIn) {
- LOG(ERROR) << "Couldn't find reference image: "
- << img_path.value();
- // No image to compare to, exit early.
- return false;
- }
-
- const SkBitmap* ref_bmp;
- bool save_gen = false;
- bool save_diff = true;
- bool rt = true;
-
- if ((ref_img_revision_ <= 0 && ref_img_option_ == kReferenceImageLocal) ||
- !found_ref_img) {
- base::FilePath rev_path = ref_img_dir_.AppendASCII(
- test_name_ + "_" + build_revision_ + ".rev");
- if (!WritePNGFile(gen_bmp, img_path)) {
- LOG(ERROR) << "Can't save generated image to: "
- << img_path.value()
- << " as future reference.";
- rt = false;
- } else {
- LOG(INFO) << "Saved reference image to: "
- << img_path.value();
- }
- if (rt) {
- if (!WriteREVFile(rev_path)) {
- LOG(ERROR) << "Can't save revision file to: "
- << rev_path.value();
- rt = false;
- base::DeleteFile(img_path, false);
- } else {
- LOG(INFO) << "Saved revision file to: "
- << rev_path.value();
- }
- }
- if (ref_img_revision_ > 0) {
- LOG(ERROR) << "Can't read the local ref image: "
- << img_path.value()
- << ", reset it.";
- rt = false;
- }
- // If we re-generate the ref image, we save the gen and diff images so
- // the ref image can be uploaded to the server and be viewed later.
- save_gen = true;
- save_diff = true;
- ref_bmp = &gen_bmp;
- } else {
- ref_bmp = &ref_bmp_on_disk;
- }
-
- SkBitmap diff_bmp;
- if (ref_bmp->width() != gen_bmp.width() ||
- ref_bmp->height() != gen_bmp.height()) {
- LOG(ERROR)
- << "Dimensions do not match (Expected) vs (Actual):"
- << "(" << ref_bmp->width() << "x" << ref_bmp->height()
- << ") vs. "
- << "(" << gen_bmp.width() << "x" << gen_bmp.height() << ")";
- if (ref_img_option_ == kReferenceImageLocal)
- save_gen = true;
- rt = false;
- } else {
- // Compare pixels and create a simple diff image.
- int diff_pixels_count = 0;
- diff_bmp.setConfig(SkBitmap::kARGB_8888_Config,
- gen_bmp.width(), gen_bmp.height());
- diff_bmp.allocPixels();
- diff_bmp.eraseColor(SK_ColorWHITE);
- SkAutoLockPixels lock_bmp(gen_bmp);
- SkAutoLockPixels lock_ref_bmp(*ref_bmp);
- SkAutoLockPixels lock_diff_bmp(diff_bmp);
- // The reference images were saved with no alpha channel. Use the mask to
- // set alpha to 0.
- uint32_t kAlphaMask = 0x00FFFFFF;
- for (int x = 0; x < gen_bmp.width(); ++x) {
- for (int y = 0; y < gen_bmp.height(); ++y) {
- if ((*gen_bmp.getAddr32(x, y) & kAlphaMask) !=
- (*ref_bmp->getAddr32(x, y) & kAlphaMask)) {
- ++diff_pixels_count;
- *diff_bmp.getAddr32(x, y) = 192 << 16; // red
- }
- }
- }
- if (diff_pixels_count > 0) {
- LOG(ERROR) << diff_pixels_count
- << " pixels do not match.";
- if (ref_img_option_ == kReferenceImageLocal) {
- save_gen = true;
- save_diff = true;
- }
- rt = false;
- }
- }
-
- std::string ref_img_filename = img_path.BaseName().MaybeAsASCII();
- if (save_gen) {
- base::FilePath img_fail_path = generated_img_dir_.AppendASCII(
- "FAIL_" + ref_img_filename);
- if (!WritePNGFile(gen_bmp, img_fail_path)) {
- LOG(ERROR) << "Can't save generated image to: "
- << img_fail_path.value();
- } else {
- LOG(INFO) << "Saved generated image to: "
- << img_fail_path.value();
- }
- }
- if (save_diff) {
- base::FilePath img_diff_path = generated_img_dir_.AppendASCII(
- "DIFF_" + ref_img_filename);
- if (!WritePNGFile(diff_bmp, img_diff_path)) {
- LOG(ERROR) << "Can't save generated diff image to: "
- << img_diff_path.value();
- } else {
- LOG(INFO) << "Saved difference image to: "
- << img_diff_path.value();
- }
- }
- return rt;
- }
-
- bool ComparePixels(const SkBitmap& gen_bmp,
- const ReferencePixel* ref_pixels,
- size_t ref_pixel_count) {
- SkAutoLockPixels lock_bmp(gen_bmp);
-
- for (size_t i = 0; i < ref_pixel_count; ++i) {
- int x = ref_pixels[i].x;
- int y = ref_pixels[i].y;
- unsigned char r = ref_pixels[i].r;
- unsigned char g = ref_pixels[i].g;
- unsigned char b = ref_pixels[i].b;
-
- DCHECK(x >= 0 && x < gen_bmp.width() && y >= 0 && y < gen_bmp.height());
-
- unsigned char* rgba = reinterpret_cast<unsigned char*>(
- gen_bmp.getAddr32(x, y));
- DCHECK(rgba);
- if (rgba[0] != b || rgba[1] != g || rgba[2] != r) {
- std::string error_message = base::StringPrintf(
- "pixel(%d,%d) expects [%u,%u,%u], but gets [%u,%u,%u] instead",
- x, y, r, g, b, rgba[0], rgba[1], rgba[2]);
- LOG(ERROR) << error_message.c_str();
- return false;
- }
- }
- return true;
- }
-
- // Take snapshot of the tab, encode it as PNG, and save to a SkBitmap.
- bool TabSnapShotToImage(SkBitmap* bitmap, const gfx::Size& size) {
- CHECK(bitmap);
- std::vector<unsigned char> png;
-
- gfx::Rect snapshot_bounds(size);
- RenderViewHost* view_host = shell()->web_contents()->GetRenderViewHost();
- if (!ui::GrabViewSnapshot(view_host->GetView()->GetNativeView(),
- &png, snapshot_bounds)) {
- LOG(ERROR) << "ui::GrabViewSnapShot() failed";
- return false;
- }
-
- if (!gfx::PNGCodec::Decode(reinterpret_cast<unsigned char*>(&*png.begin()),
- png.size(), bitmap)) {
- LOG(ERROR) << "Decode PNG to a SkBitmap failed";
- return false;
- }
- return true;
- }
-
- // If no valid local revision file is located, the ref_img_revision_ is 0.
- void ObtainLocalRefImageRevision() {
- base::FilePath filter;
- filter = filter.AppendASCII(test_name_ + "_*.rev");
- base::FileEnumerator locator(ref_img_dir_,
- false, // non recursive
- base::FileEnumerator::FILES,
- filter.value());
- int64 max_revision = 0;
- std::vector<base::FilePath> outdated_revs;
- for (base::FilePath full_path = locator.Next();
- !full_path.empty();
- full_path = locator.Next()) {
- std::string filename =
- full_path.BaseName().RemoveExtension().MaybeAsASCII();
- std::string revision_string =
- filename.substr(test_name_.length() + 1);
- int64 revision = 0;
- bool converted = base::StringToInt64(revision_string, &revision);
- if (!converted)
- continue;
- if (revision < ref_img_revision_no_older_than_ ||
- revision < max_revision) {
- outdated_revs.push_back(full_path);
- continue;
- }
- max_revision = revision;
- }
- ref_img_revision_ = max_revision;
- for (size_t i = 0; i < outdated_revs.size(); ++i)
- base::DeleteFile(outdated_revs[i], false);
- }
-
- DISALLOW_COPY_AND_ASSIGN(GpuPixelBrowserTest);
-};
-
-IN_PROC_BROWSER_TEST_F(GpuPixelBrowserTest, MANUAL_WebGLGreenTriangle) {
- // If test baseline needs to be updated after a given revision, update the
- // following number. If no revision requirement, then 0.
- const int64 ref_img_revision_update = 123489;
-
- const ReferencePixel ref_pixels[] = {
- // x, y, r, g, b
- {50, 100, 0, 0, 0},
- {100, 100, 0, 255, 0},
- {150, 100, 0, 0, 0},
- {50, 150, 0, 255, 0},
- {100, 150, 0, 255, 0},
- {150, 150, 0, 255, 0}
- };
- const size_t ref_pixel_count = sizeof(ref_pixels) / sizeof(ReferencePixel);
-
- gfx::Size container_size(400, 300);
- base::FilePath url =
- test_data_dir().AppendASCII("pixel_webgl.html");
- RunPixelTest(container_size, url, ref_img_revision_update,
- ref_pixels, ref_pixel_count);
-}
-
-IN_PROC_BROWSER_TEST_F(GpuPixelBrowserTest, MANUAL_CSS3DBlueBox) {
- // If test baseline needs to be updated after a given revision, update the
- // following number. If no revision requirement, then 0.
- const int64 ref_img_revision_update = 226592;
-
- const ReferencePixel ref_pixels[] = {
- // x, y, r, g, b
- {70, 50, 0, 0, 255},
- {150, 50, 0, 0, 0},
- {70, 90, 0, 0, 255},
- {150, 90, 0, 0, 255},
- {70, 125, 0, 0, 255},
- {150, 125, 0, 0, 0}
- };
- const size_t ref_pixel_count = sizeof(ref_pixels) / sizeof(ReferencePixel);
-
- gfx::Size container_size(400, 300);
- base::FilePath url =
- test_data_dir().AppendASCII("pixel_css3d.html");
- RunPixelTest(container_size, url, ref_img_revision_update,
- ref_pixels, ref_pixel_count);
-}
-
-IN_PROC_BROWSER_TEST_F(GpuPixelBrowserTest, MANUAL_Canvas2DRedBoxHD) {
- // If test baseline needs to be updated after a given revision, update the
- // following number. If no revision requirement, then 0.
- const int64 ref_img_revision_update = 224170;
-
- const ReferencePixel ref_pixels[] = {
- // x, y, r, g, b
- {40, 100, 0, 0, 0},
- {60, 100, 127, 0, 0},
- {140, 100, 127, 0, 0},
- {160, 100, 0, 0, 0}
- };
- const size_t ref_pixel_count = sizeof(ref_pixels) / sizeof(ReferencePixel);
-
- gfx::Size container_size(400, 300);
- base::FilePath url =
- test_data_dir().AppendASCII("pixel_canvas2d.html");
- RunPixelTest(container_size, url, ref_img_revision_update,
- ref_pixels, ref_pixel_count);
-}
-
-class GpuPixelTestCanvas2DSD : public GpuPixelBrowserTest {
- public:
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- GpuPixelBrowserTest::SetUpCommandLine(command_line);
- command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
- }
-};
-
-IN_PROC_BROWSER_TEST_F(GpuPixelTestCanvas2DSD, MANUAL_Canvas2DRedBoxSD) {
- // If test baseline needs to be updated after a given revision, update the
- // following number. If no revision requirement, then 0.
- const int64 ref_img_revision_update = 224170;
-
- const ReferencePixel ref_pixels[] = {
- // x, y, r, g, b
- {40, 100, 0, 0, 0},
- {60, 100, 127, 0, 0},
- {140, 100, 127, 0, 0},
- {160, 100, 0, 0, 0}
- };
- const size_t ref_pixel_count = sizeof(ref_pixels) / sizeof(ReferencePixel);
-
- gfx::Size container_size(400, 300);
- base::FilePath url =
- test_data_dir().AppendASCII("pixel_canvas2d.html");
- RunPixelTest(container_size, url, ref_img_revision_update,
- ref_pixels, ref_pixel_count);
-}
-
-class GpuPixelTestBrowserPlugin : public GpuPixelBrowserTest {
- public:
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- GpuPixelBrowserTest::SetUpCommandLine(command_line);
- command_line->AppendSwitch(switches::kEnableBrowserPluginForAllViewTypes);
- }
-};
-
-// TODO(fsamuel): re-enable as MANUAL_BrowserPluginBlueBox: crbug.com/166165
-IN_PROC_BROWSER_TEST_F(GpuPixelTestBrowserPlugin,
- DISABLED_BrowserPluginBlueBox) {
- // If test baseline needs to be updated after a given revision, update the
- // following number. If no revision requirement, then 0.
- const int64 ref_img_revision_update = 209445;
-
- const ReferencePixel ref_pixels[] = {
- // x, y, r, g, b
- {70, 50, 0, 0, 255},
- {150, 50, 0, 0, 0},
- {70, 90, 0, 0, 255},
- {150, 90, 0, 0, 255},
- {70, 125, 0, 0, 255},
- {150, 125, 0, 0, 0}
- };
- const size_t ref_pixel_count = sizeof(ref_pixels) / sizeof(ReferencePixel);
-
- gfx::Size container_size(400, 300);
- base::FilePath url =
- test_data_dir().AppendASCII("pixel_browser_plugin.html");
- RunPixelTest(container_size, url, ref_img_revision_update,
- ref_pixels, ref_pixel_count);
-}
-
-} // namespace content
-