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

Side by Side Diff: src/gpu/SkGpuDevice.cpp

Issue 1405383002: Remove check for whole image in the cache in SkGpuDevice::shouldTileImage (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove unused function Created 5 years, 2 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
« no previous file with comments | « no previous file | src/gpu/SkGr.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "GrBlurUtils.h" 10 #include "GrBlurUtils.h"
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 int* tileSize, 751 int* tileSize,
752 SkIRect* clippedSubset) const { 752 SkIRect* clippedSubset) const {
753 // if it's larger than the max tile size, then we have no choice but tiling. 753 // if it's larger than the max tile size, then we have no choice but tiling.
754 if (imageRect.width() > maxTileSize || imageRect.height() > maxTileSize) { 754 if (imageRect.width() > maxTileSize || imageRect.height() > maxTileSize) {
755 determine_clipped_src_rect(fRenderTarget, fClip, viewMatrix, imageRect.s ize(), 755 determine_clipped_src_rect(fRenderTarget, fClip, viewMatrix, imageRect.s ize(),
756 srcRectPtr, clippedSubset); 756 srcRectPtr, clippedSubset);
757 *tileSize = determine_tile_size(*clippedSubset, maxTileSize); 757 *tileSize = determine_tile_size(*clippedSubset, maxTileSize);
758 return true; 758 return true;
759 } 759 }
760 760
761 // If the image would only produce 4 tiles of the smaller size, don't bother tiling it.
761 const size_t area = imageRect.width() * imageRect.height(); 762 const size_t area = imageRect.width() * imageRect.height();
762 if (area < 4 * kBmpSmallTileSize * kBmpSmallTileSize) { 763 if (area < 4 * kBmpSmallTileSize * kBmpSmallTileSize) {
763 return false; 764 return false;
764 } 765 }
765 766
766 // if the entire image/bitmap is already in our cache then no reason to tile it
767 if (GrIsImageInCache(fContext, imageID, imageRect, nullptr, params)) {
768 return false;
769 }
770
771 // At this point we know we could do the draw by uploading the entire bitmap 767 // At this point we know we could do the draw by uploading the entire bitmap
772 // as a texture. However, if the texture would be large compared to the 768 // as a texture. However, if the texture would be large compared to the
773 // cache size and we don't require most of it for this draw then tile to 769 // cache size and we don't require most of it for this draw then tile to
774 // reduce the amount of upload and cache spill. 770 // reduce the amount of upload and cache spill.
775 771
776 // assumption here is that sw bitmap size is a good proxy for its size as 772 // assumption here is that sw bitmap size is a good proxy for its size as
777 // a texture 773 // a texture
778 size_t bmpSize = area * sizeof(SkPMColor); // assume 32bit pixels 774 size_t bmpSize = area * sizeof(SkPMColor); // assume 32bit pixels
779 size_t cacheSize; 775 size_t cacheSize;
780 fContext->getResourceCacheLimits(nullptr, &cacheSize); 776 fContext->getResourceCacheLimits(nullptr, &cacheSize);
781 if (bmpSize < cacheSize / 2) { 777 if (bmpSize < cacheSize / 2) {
782 return false; 778 return false;
783 } 779 }
784 780
785 // Figure out how much of the src we will need based on the src rect and cli pping. 781 // Figure out how much of the src we will need based on the src rect and cli pping. Reject if
782 // tiling memory savings would be < 50%.
786 determine_clipped_src_rect(fRenderTarget, fClip, viewMatrix, imageRect.size( ), srcRectPtr, 783 determine_clipped_src_rect(fRenderTarget, fClip, viewMatrix, imageRect.size( ), srcRectPtr,
787 clippedSubset); 784 clippedSubset);
788 *tileSize = kBmpSmallTileSize; // already know whole bitmap fits in one max sized tile. 785 *tileSize = kBmpSmallTileSize; // already know whole bitmap fits in one max sized tile.
789 size_t usedTileBytes = get_tile_count(*clippedSubset, kBmpSmallTileSize) * 786 size_t usedTileBytes = get_tile_count(*clippedSubset, kBmpSmallTileSize) *
790 kBmpSmallTileSize * kBmpSmallTileSize; 787 kBmpSmallTileSize * kBmpSmallTileSize;
791 788
792 return usedTileBytes < 2 * bmpSize; 789 return usedTileBytes < 2 * bmpSize;
793 } 790 }
794 791
795 bool SkGpuDevice::shouldTileBitmap(const SkBitmap& bitmap, 792 bool SkGpuDevice::shouldTileBitmap(const SkBitmap& bitmap,
(...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 #endif 2016 #endif
2020 } 2017 }
2021 2018
2022 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 2019 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
2023 // We always return a transient cache, so it is freed after each 2020 // We always return a transient cache, so it is freed after each
2024 // filter traversal. 2021 // filter traversal.
2025 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 2022 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
2026 } 2023 }
2027 2024
2028 #endif 2025 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/SkGr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698