Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: skia/ext/image_operations.cc

Issue 13293004: enable SSE2 in skia/convolver for linux32 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wrapped convolvevertically Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #define _USE_MATH_DEFINES 5 #define _USE_MATH_DEFINES
6 #include <algorithm> 6 #include <algorithm>
7 #include <cmath> 7 #include <cmath>
8 #include <limits> 8 #include <limits>
9 9
10 #include "skia/ext/image_operations.h" 10 #include "skia/ext/image_operations.h"
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // be the center of the filter function since it could get clipped on the 293 // be the center of the filter function since it could get clipped on the
294 // edges, but it doesn't matter enough to worry about that case). 294 // edges, but it doesn't matter enough to worry about that case).
295 int16 leftovers = output->FloatToFixed(1.0f) - fixed_sum; 295 int16 leftovers = output->FloatToFixed(1.0f) - fixed_sum;
296 fixed_filter_values[fixed_filter_values->size() / 2] += leftovers; 296 fixed_filter_values[fixed_filter_values->size() / 2] += leftovers;
297 297
298 // Now it's ready to go. 298 // Now it's ready to go.
299 output->AddFilter(src_begin, &fixed_filter_values[0], 299 output->AddFilter(src_begin, &fixed_filter_values[0],
300 static_cast<int>(fixed_filter_values->size())); 300 static_cast<int>(fixed_filter_values->size()));
301 } 301 }
302 302
303 output->PaddingForSIMD(8); 303 output->PaddingForSIMD();
304 } 304 }
305 305
306 ImageOperations::ResizeMethod ResizeMethodToAlgorithmMethod( 306 ImageOperations::ResizeMethod ResizeMethodToAlgorithmMethod(
307 ImageOperations::ResizeMethod method) { 307 ImageOperations::ResizeMethod method) {
308 // Convert any "Quality Method" into an "Algorithm Method" 308 // Convert any "Quality Method" into an "Algorithm Method"
309 if (method >= ImageOperations::RESIZE_FIRST_ALGORITHM_METHOD && 309 if (method >= ImageOperations::RESIZE_FIRST_ALGORITHM_METHOD &&
310 method <= ImageOperations::RESIZE_LAST_ALGORITHM_METHOD) { 310 method <= ImageOperations::RESIZE_LAST_ALGORITHM_METHOD) {
311 return method; 311 return method;
312 } 312 }
313 // The call to ImageOperationsGtv::Resize() above took care of 313 // The call to ImageOperationsGtv::Resize() above took care of
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 ResizeFilter filter(method, source.width(), source.height(), 502 ResizeFilter filter(method, source.width(), source.height(),
503 dest_width, dest_height, dest_subset); 503 dest_width, dest_height, dest_subset);
504 504
505 // Get a source bitmap encompassing this touched area. We construct the 505 // Get a source bitmap encompassing this touched area. We construct the
506 // offsets and row strides such that it looks like a new bitmap, while 506 // offsets and row strides such that it looks like a new bitmap, while
507 // referring to the old data. 507 // referring to the old data.
508 const uint8* source_subset = 508 const uint8* source_subset =
509 reinterpret_cast<const uint8*>(source.getPixels()); 509 reinterpret_cast<const uint8*>(source.getPixels());
510 510
511 // Convolve into the result. 511 // Convolve into the result.
512 base::CPU cpu;
513 SkBitmap result; 512 SkBitmap result;
514 result.setConfig(SkBitmap::kARGB_8888_Config, 513 result.setConfig(SkBitmap::kARGB_8888_Config,
515 dest_subset.width(), dest_subset.height()); 514 dest_subset.width(), dest_subset.height());
516 result.allocPixels(allocator, NULL); 515 result.allocPixels(allocator, NULL);
517 if (!result.readyToDraw()) 516 if (!result.readyToDraw())
518 return SkBitmap(); 517 return SkBitmap();
519 518
520 BGRAConvolve2D(source_subset, static_cast<int>(source.rowBytes()), 519 BGRAConvolve2D(source_subset, static_cast<int>(source.rowBytes()),
521 !source.isOpaque(), filter.x_filter(), filter.y_filter(), 520 !source.isOpaque(), filter.x_filter(), filter.y_filter(),
522 static_cast<int>(result.rowBytes()), 521 static_cast<int>(result.rowBytes()),
523 static_cast<unsigned char*>(result.getPixels()), 522 static_cast<unsigned char*>(result.getPixels()),
524 cpu.has_sse2()); 523 true);
525 524
526 // Preserve the "opaque" flag for use as an optimization later. 525 // Preserve the "opaque" flag for use as an optimization later.
527 result.setIsOpaque(source.isOpaque()); 526 result.setIsOpaque(source.isOpaque());
528 527
529 base::TimeDelta delta = base::TimeTicks::Now() - resize_start; 528 base::TimeDelta delta = base::TimeTicks::Now() - resize_start;
530 UMA_HISTOGRAM_TIMES("Image.ResampleMS", delta); 529 UMA_HISTOGRAM_TIMES("Image.ResampleMS", delta);
531 530
532 return result; 531 return result;
533 } 532 }
534 533
535 // static 534 // static
536 SkBitmap ImageOperations::Resize(const SkBitmap& source, 535 SkBitmap ImageOperations::Resize(const SkBitmap& source,
537 ResizeMethod method, 536 ResizeMethod method,
538 int dest_width, int dest_height, 537 int dest_width, int dest_height,
539 SkBitmap::Allocator* allocator) { 538 SkBitmap::Allocator* allocator) {
540 SkIRect dest_subset = { 0, 0, dest_width, dest_height }; 539 SkIRect dest_subset = { 0, 0, dest_width, dest_height };
541 return Resize(source, method, dest_width, dest_height, dest_subset, 540 return Resize(source, method, dest_width, dest_height, dest_subset,
542 allocator); 541 allocator);
543 } 542 }
544 543
545 } // namespace skia 544 } // namespace skia
OLDNEW
« skia/ext/convolver.cc ('K') | « skia/ext/convolver_unittest.cc ('k') | skia/skia.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698