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 11static const int kCanvasSize = 1; 12static const int kBitmapSize = 16; 13static const int kScale = 8; 14 15static 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 32DEF_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