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

Side by Side Diff: src/image/SkImage_Raster.cpp

Issue 2222593003: use tmp allocator for images in temp shaders (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 4 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 | « src/image/SkImageShader.cpp ('k') | no next file » | 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 2012 Google Inc. 2 * Copyright 2012 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 "SkImage_Base.h" 8 #include "SkImage_Base.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkBitmapProcShader.h"
10 #include "SkCanvas.h" 11 #include "SkCanvas.h"
11 #include "SkColorTable.h" 12 #include "SkColorTable.h"
12 #include "SkData.h" 13 #include "SkData.h"
13 #include "SkImagePriv.h" 14 #include "SkImagePriv.h"
14 #include "SkPixelRef.h" 15 #include "SkPixelRef.h"
15 #include "SkSurface.h" 16 #include "SkSurface.h"
16 17
17 #if SK_SUPPORT_GPU 18 #if SK_SUPPORT_GPU
18 #include "GrContext.h" 19 #include "GrContext.h"
19 #include "SkGr.h" 20 #include "SkGr.h"
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 248 }
248 249
249 sk_sp<SkImage> SkMakeImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr, 250 sk_sp<SkImage> SkMakeImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
250 const SkIPoint& pixelRefOrigin, size_t ro wBytes) { 251 const SkIPoint& pixelRefOrigin, size_t ro wBytes) {
251 if (!SkImage_Raster::ValidArgs(info, rowBytes, false, nullptr)) { 252 if (!SkImage_Raster::ValidArgs(info, rowBytes, false, nullptr)) {
252 return nullptr; 253 return nullptr;
253 } 254 }
254 return sk_make_sp<SkImage_Raster>(info, pr, pixelRefOrigin, rowBytes); 255 return sk_make_sp<SkImage_Raster>(info, pr, pixelRefOrigin, rowBytes);
255 } 256 }
256 257
257 sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode cpm) { 258 sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode cpm,
259 SkTBlitterAllocator* allocator) {
258 bool hasColorTable = false; 260 bool hasColorTable = false;
259 if (kIndex_8_SkColorType == bm.colorType()) { 261 if (kIndex_8_SkColorType == bm.colorType()) {
260 SkAutoLockPixels autoLockPixels(bm); 262 SkAutoLockPixels autoLockPixels(bm);
261 hasColorTable = bm.getColorTable() != nullptr; 263 hasColorTable = bm.getColorTable() != nullptr;
262 } 264 }
263 265
264 if (!SkImage_Raster::ValidArgs(bm.info(), bm.rowBytes(), hasColorTable, null ptr)) { 266 if (!SkImage_Raster::ValidArgs(bm.info(), bm.rowBytes(), hasColorTable, null ptr)) {
265 return nullptr; 267 return nullptr;
266 } 268 }
267 269
268 sk_sp<SkImage> image; 270 sk_sp<SkImage> image;
269 if (kAlways_SkCopyPixelsMode == cpm || (!bm.isImmutable() && kNever_SkCopyPi xelsMode != cpm)) { 271 if (kAlways_SkCopyPixelsMode == cpm || (!bm.isImmutable() && kNever_SkCopyPi xelsMode != cpm)) {
270 SkBitmap tmp(bm); 272 SkBitmap tmp(bm);
271 tmp.lockPixels(); 273 tmp.lockPixels();
272 SkPixmap pmap; 274 SkPixmap pmap;
273 if (tmp.getPixels() && tmp.peekPixels(&pmap)) { 275 if (tmp.getPixels() && tmp.peekPixels(&pmap)) {
274 image = SkImage::MakeRasterCopy(pmap); 276 image = SkImage::MakeRasterCopy(pmap);
275 } 277 }
276 } else { 278 } else {
277 image = sk_make_sp<SkImage_Raster>(bm, kNever_SkCopyPixelsMode == cpm); 279 if (allocator) {
280 image.reset(allocator->createT<SkImage_Raster>(bm, kNever_SkCopyPixe lsMode == cpm));
281 image.get()->ref(); // account for the allocator being an owner
f(malita) 2016/08/05 21:06:22 nit: image = sk_ref_sp(allocator->createT<>(..
reed1 2016/08/05 21:46:57 Also works, but not sure it reads as clearly (or a
282 } else {
283 image = sk_make_sp<SkImage_Raster>(bm, kNever_SkCopyPixelsMode == cp m);
284 }
278 } 285 }
279 return image; 286 return image;
280 } 287 }
281 288
282 const SkPixelRef* SkBitmapImageGetPixelRef(const SkImage* image) { 289 const SkPixelRef* SkBitmapImageGetPixelRef(const SkImage* image) {
283 return ((const SkImage_Raster*)image)->getPixelRef(); 290 return ((const SkImage_Raster*)image)->getPixelRef();
284 } 291 }
285 292
286 bool SkImage_Raster::isOpaque() const { 293 bool SkImage_Raster::isOpaque() const {
287 return fBitmap.isOpaque(); 294 return fBitmap.isOpaque();
288 } 295 }
289 296
290 bool SkImage_Raster::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) c onst { 297 bool SkImage_Raster::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) c onst {
291 if (kRO_LegacyBitmapMode == mode) { 298 if (kRO_LegacyBitmapMode == mode) {
292 // When we're a snapshot from a surface, our bitmap may not be marked im mutable 299 // When we're a snapshot from a surface, our bitmap may not be marked im mutable
293 // even though logically always we are, but in that case we can't physic ally share our 300 // even though logically always we are, but in that case we can't physic ally share our
294 // pixelref since the caller might call setImmutable() themselves 301 // pixelref since the caller might call setImmutable() themselves
295 // (thus changing our state). 302 // (thus changing our state).
296 if (fBitmap.isImmutable()) { 303 if (fBitmap.isImmutable()) {
297 bitmap->setInfo(fBitmap.info(), fBitmap.rowBytes()); 304 bitmap->setInfo(fBitmap.info(), fBitmap.rowBytes());
298 bitmap->setPixelRef(fBitmap.pixelRef(), fBitmap.pixelRefOrigin()); 305 bitmap->setPixelRef(fBitmap.pixelRef(), fBitmap.pixelRefOrigin());
299 return true; 306 return true;
300 } 307 }
301 } 308 }
302 return this->INHERITED::onAsLegacyBitmap(bitmap, mode); 309 return this->INHERITED::onAsLegacyBitmap(bitmap, mode);
303 } 310 }
OLDNEW
« no previous file with comments | « src/image/SkImageShader.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698