Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2014 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 #include "Test.h"
      8 #include "SkGraphics.h"
      9 #include "SkCanvas.h"
     10 
     11 static const int kCanvasSize = 1;
     12 static const int kBitmapSize = 16;
     13 static const int kScale = 8;
     14 
     15 static size_t test_scaled_image_cache_useage() {
     16     SkAutoTUnref<SkCanvas> canvas(
     17             SkCanvas::NewRasterN32(kCanvasSize, kCanvasSize));
     18     SkBitmap bitmap;
     19     SkAssertResult(bitmap.allocN32Pixels(kBitmapSize, kBitmapSize));
     20     SkScalar scaledSize = SkIntToScalar(kScale * kBitmapSize);
     21     canvas->clipRect(SkRect::MakeLTRB(0, 0, scaledSize, scaledSize));
     22     SkPaint paint;
     23     paint.setFilterLevel(SkPaint::kHigh_FilterLevel);
     24     size_t bytesUsed = SkGraphics::GetImageCacheBytesUsed();
     25     canvas->drawBitmapRect(bitmap,
     26                            SkRect::MakeLTRB(0, 0, scaledSize, scaledSize),
     27                            &paint);
     28     return SkGraphics::GetImageCacheBytesUsed() - bytesUsed;
     29 }
     30 
     31 // http://crbug.com/389439
     32 DEF_TEST(ScaledImageCache_SingleAllocationByteLimit, reporter) {
     33     size_t originalByteLimit = SkGraphics::GetImageCacheByteLimit();
     34     size_t originalAllocationLimit =
     35         SkGraphics::GetImageCacheSingleAllocationByteLimit();
     36 
     37     size_t size = kBitmapSize * kScale * kBitmapSize * kScale
     38         * SkColorTypeBytesPerPixel(kN32_SkColorType);
     39 
     40     SkGraphics::SetImageCacheByteLimit(0); // clear cache
     41     SkGraphics::SetImageCacheByteLimit(2 * size);
     42     SkGraphics::SetImageCacheSingleAllocationByteLimit(0);
     43 
     44     REPORTER_ASSERT(reporter, size == test_scaled_image_cache_useage());
     45 
     46     SkGraphics::SetImageCacheByteLimit(0); // clear cache
     47     SkGraphics::SetImageCacheByteLimit(2 * size);
     48     SkGraphics::SetImageCacheSingleAllocationByteLimit(size * 2);
     49 
     50     REPORTER_ASSERT(reporter, size == test_scaled_image_cache_useage());
     51 
     52     SkGraphics::SetImageCacheByteLimit(0); // clear cache
     53     SkGraphics::SetImageCacheByteLimit(2 * size);
     54     SkGraphics::SetImageCacheSingleAllocationByteLimit(size / 2);
     55 
     56     REPORTER_ASSERT(reporter, 0 == test_scaled_image_cache_useage());
     57 
     58     SkGraphics::SetImageCacheSingleAllocationByteLimit(originalAllocationLimit);
     59     SkGraphics::SetImageCacheByteLimit(originalByteLimit);
     60 }
     61