Chromium Code Reviews

Side by Side Diff: chrome/browser/chromeos/login/screenshot_testing/screenshot_tester.cc

Issue 2650903003: Revert of [devtools] Support different encodings for Page.CaptureScreenshot. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/chromeos/login/screenshot_testing/screenshot_tester.h" 5 #include "chrome/browser/chromeos/login/screenshot_testing/screenshot_tester.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "ash/shell.h" 10 #include "ash/shell.h"
(...skipping 169 matching lines...)
180 PNGFile png_data) { 180 PNGFile png_data) {
181 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 181 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
182 if (!png_data.get()) { 182 if (!png_data.get()) {
183 LOG(ERROR) << "There is no png data"; 183 LOG(ERROR) << "There is no png data";
184 return false; 184 return false;
185 } 185 }
186 if (!base::CreateDirectory(image_path.DirName())) { 186 if (!base::CreateDirectory(image_path.DirName())) {
187 LOG(ERROR) << "Can't create directory" << image_path.DirName().value(); 187 LOG(ERROR) << "Can't create directory" << image_path.DirName().value();
188 return false; 188 return false;
189 } 189 }
190 if (static_cast<size_t>(base::WriteFile( 190 if (static_cast<size_t>(
191 image_path, reinterpret_cast<const char*>(png_data->front()), 191 base::WriteFile(image_path,
192 png_data->size())) != png_data->size()) { 192 reinterpret_cast<char*>(&(png_data->data()[0])),
193 png_data->size())) != png_data->size()) {
193 LOG(ERROR) << "Can't save screenshot " << image_path.BaseName().value() 194 LOG(ERROR) << "Can't save screenshot " << image_path.BaseName().value()
194 << "."; 195 << ".";
195 return false; 196 return false;
196 } 197 }
197 VLOG(0) << "Screenshot " << image_path.BaseName().value() << " saved to " 198 VLOG(0) << "Screenshot " << image_path.BaseName().value() << " saved to "
198 << image_path.DirName().value() << "."; 199 << image_path.DirName().value() << ".";
199 return true; 200 return true;
200 } 201 }
201 202
202 void ScreenshotTester::ReturnScreenshot(PNGFile* screenshot, PNGFile png_data) { 203 void ScreenshotTester::ReturnScreenshot(const PNGFile& screenshot,
204 PNGFile png_data) {
203 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 205 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
204 *screenshot = png_data; 206 screenshot->data() = png_data->data();
205 content::BrowserThread::PostTask( 207 content::BrowserThread::PostTask(
206 content::BrowserThread::UI, FROM_HERE, run_loop_quitter_); 208 content::BrowserThread::UI, FROM_HERE, run_loop_quitter_);
207 } 209 }
208 210
209 ScreenshotTester::PNGFile ScreenshotTester::TakeScreenshot() { 211 ScreenshotTester::PNGFile ScreenshotTester::TakeScreenshot() {
210 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 212 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
211 aura::Window* primary_window = ash::Shell::GetPrimaryRootWindow(); 213 aura::Window* primary_window = ash::Shell::GetPrimaryRootWindow();
212 gfx::Rect rect = primary_window->bounds(); 214 gfx::Rect rect = primary_window->bounds();
213 PNGFile screenshot; 215 PNGFile screenshot = new base::RefCountedBytes;
214 ui::GrabWindowSnapshotAsyncPNG( 216 ui::GrabWindowSnapshotAsync(primary_window,
215 primary_window, rect, content::BrowserThread::GetBlockingPool(), 217 rect,
216 base::Bind(&ScreenshotTester::ReturnScreenshot, 218 content::BrowserThread::GetBlockingPool(),
217 weak_factory_.GetWeakPtr(), &screenshot)); 219 base::Bind(&ScreenshotTester::ReturnScreenshot,
220 weak_factory_.GetWeakPtr(),
221 screenshot));
218 base::RunLoop run_loop; 222 base::RunLoop run_loop;
219 run_loop_quitter_ = run_loop.QuitClosure(); 223 run_loop_quitter_ = run_loop.QuitClosure();
220 run_loop.Run(); 224 run_loop.Run();
221 return screenshot; 225 return screenshot;
222 } 226 }
223 227
224 ScreenshotTester::PNGFile ScreenshotTester::LoadGoldenScreenshot( 228 ScreenshotTester::PNGFile ScreenshotTester::LoadGoldenScreenshot(
225 base::FilePath image_path) { 229 base::FilePath image_path) {
226 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 230 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
227 231
228 if (!base::PathExists(image_path)) { 232 if (!base::PathExists(image_path)) {
229 LOG(WARNING) << "Can't find a golden screenshot for this test"; 233 LOG(WARNING) << "Can't find a golden screenshot for this test";
230 return 0; 234 return 0;
231 } 235 }
232 236
233 int64_t golden_screenshot_size; 237 int64_t golden_screenshot_size;
234 base::GetFileSize(image_path, &golden_screenshot_size); 238 base::GetFileSize(image_path, &golden_screenshot_size);
235 239
236 if (golden_screenshot_size == -1) { 240 if (golden_screenshot_size == -1) {
237 CHECK(false) << "Can't get golden screenshot size"; 241 CHECK(false) << "Can't get golden screenshot size";
238 } 242 }
239 scoped_refptr<base::RefCountedBytes> png_data = new base::RefCountedBytes; 243 PNGFile png_data = new base::RefCountedBytes;
240 png_data->data().resize(golden_screenshot_size); 244 png_data->data().resize(golden_screenshot_size);
241 base::ReadFile(image_path, 245 base::ReadFile(image_path,
242 reinterpret_cast<char*>(&(png_data->data()[0])), 246 reinterpret_cast<char*>(&(png_data->data()[0])),
243 golden_screenshot_size); 247 golden_screenshot_size);
244 248
245 return png_data; 249 return png_data;
246 } 250 }
247 251
248 SkBitmap ScreenshotTester::ProcessImageForComparison(const PNGFile& image) { 252 SkBitmap ScreenshotTester::ProcessImageForComparison(const PNGFile& image) {
249 CHECK(image.get()); 253 CHECK(image.get());
250 SkBitmap current_bitmap; 254 SkBitmap current_bitmap;
251 gfx::PNGCodec::Decode(image->front(), image->size(), &current_bitmap); 255 gfx::PNGCodec::Decode(reinterpret_cast<unsigned char*>(&(image->data()[0])),
256 image->data().size(),
257 &current_bitmap);
252 EraseIgnoredAreas(current_bitmap); 258 EraseIgnoredAreas(current_bitmap);
253 return current_bitmap; 259 return current_bitmap;
254 } 260 }
255 261
256 ScreenshotTester::Result ScreenshotTester::CompareScreenshots( 262 ScreenshotTester::Result ScreenshotTester::CompareScreenshots(
257 const PNGFile& model, 263 const PNGFile& model,
258 const PNGFile& sample) { 264 const PNGFile& sample) {
259 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 265 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
260 266
261 SkBitmap model_bitmap; 267 SkBitmap model_bitmap;
(...skipping 54 matching lines...)
316 Result testing_result; 322 Result testing_result;
317 323
318 testing_result.screenshots_match = 324 testing_result.screenshots_match =
319 (result.result >= kPrecision && 325 (result.result >= kPrecision &&
320 result.maxRedDiff <= kMaxAllowedColorDifference && 326 result.maxRedDiff <= kMaxAllowedColorDifference &&
321 result.maxGreenDiff <= kMaxAllowedColorDifference && 327 result.maxGreenDiff <= kMaxAllowedColorDifference &&
322 result.maxBlueDiff <= kMaxAllowedColorDifference); 328 result.maxBlueDiff <= kMaxAllowedColorDifference);
323 329
324 testing_result.similarity = result.result; 330 testing_result.similarity = result.result;
325 331
326 scoped_refptr<base::RefCountedBytes> diff_image(new base::RefCountedBytes); 332 testing_result.diff_image = new base::RefCountedBytes;
327 diff_image->data().resize(result.rgbDiffBitmap.getSize()); 333 testing_result.diff_image->data().resize(result.rgbDiffBitmap.getSize());
328 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(result.rgbDiffBitmap, false, 334 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(
329 &diff_image->data())) 335 result.rgbDiffBitmap, false, &testing_result.diff_image->data()))
330 << "Could not encode difference to PNG"; 336 << "Could not encode difference to PNG";
331 testing_result.diff_image = diff_image;
332 337
333 return testing_result; 338 return testing_result;
334 } 339 }
335 340
336 ScreenshotTester::Result ScreenshotTester::CompareScreenshotsPerceptually( 341 ScreenshotTester::Result ScreenshotTester::CompareScreenshotsPerceptually(
337 SkBitmap model_bitmap, 342 SkBitmap model_bitmap,
338 SkBitmap sample_bitmap) { 343 SkBitmap sample_bitmap) {
339 SkPMetric differ; 344 SkPMetric differ;
340 SkImageDiffer::BitmapsToCreate diff_parameters; 345 SkImageDiffer::BitmapsToCreate diff_parameters;
341 SkImageDiffer::Result result; 346 SkImageDiffer::Result result;
342 347
343 differ.diff(&model_bitmap, &sample_bitmap, diff_parameters, &result); 348 differ.diff(&model_bitmap, &sample_bitmap, diff_parameters, &result);
344 349
345 ScreenshotTester::Result testing_result; 350 ScreenshotTester::Result testing_result;
346 testing_result.similarity = result.result; 351 testing_result.similarity = result.result;
347 testing_result.screenshots_match = 352 testing_result.screenshots_match =
348 (result.result == SkImageDiffer::RESULT_CORRECT); 353 (result.result == SkImageDiffer::RESULT_CORRECT);
349 354
350 return testing_result; 355 return testing_result;
351 } 356 }
352 357
353 } // namespace chromeos 358 } // namespace chromeos
OLDNEW

Powered by Google App Engine