Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Bitmap_tryAllocPixels_4.cpp
Go to the documentation of this file.
1// Copyright 2019 Google LLC.
2// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
4// HASH=eb6f861ca1839146d26e40d56c2a001c
5REG_FIDDLE(Bitmap_tryAllocPixels_4, 256, 100, false, 0) {
6class LargePixelRef : public SkPixelRef {
7public:
8 LargePixelRef(const SkImageInfo& info, char* storage, size_t rowBytes)
9 : SkPixelRef(info.width(), info.height(), storage, rowBytes) {
10 }
11 ~LargePixelRef() override {
12 delete[] (char* ) this->pixels();
13 }
14};
15class LargeAllocator : public SkBitmap::Allocator {
16public:
17 bool allocPixelRef(SkBitmap* bitmap) override {
18 const SkImageInfo& info = bitmap->info();
19 uint64_t rowBytes = info.minRowBytes64();
20 uint64_t size = info.height() * rowBytes;
21 char* addr = new char[size];
22 if (nullptr == addr) {
23 return false;
24 }
25 sk_sp<SkPixelRef> pr = sk_sp<SkPixelRef>(new LargePixelRef(info, addr, rowBytes));
26 if (!pr) {
27 return false;
28 }
29 bitmap->setPixelRef(std::move(pr), 0, 0);
30 return true;
31 }
32};
33
34void draw(SkCanvas* canvas) {
35 LargeAllocator largeAllocator;
37 int width = 100; // make this 20000
38 int height = 100; // and this 100000 to allocate 8 gigs on a 64-bit platform
40 if (bitmap.tryAllocPixels(&largeAllocator)) {
41 bitmap.eraseColor(0xff55aa33);
42 canvas->drawImage(bitmap.asImage(), 0, 0);
43 }
44}
45} // END FIDDLE
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
@ kOpaque_SkAlphaType
pixel is opaque
Definition SkAlphaType.h:28
static void draw(SkCanvas *canvas, SkRect &target, int x, int y)
Definition aaclip.cpp:27
size_t rowBytes() const
Definition SkBitmap.h:238
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition SkCanvas.h:1528
void * pixels() const
Definition SkPixelRef.h:36
#define REG_FIDDLE(NAME, W, H, TEXT, I)
Definition examples.h:60
int32_t height
int32_t width
static SkImageInfo MakeN32(int width, int height, SkAlphaType at)