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

Side by Side Diff: tests/BitmapHeapTest.cpp

Issue 1930103003: remove SkWriteBuffer::reserve() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: More dead code. Created 4 years, 7 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/core/SkPictureFlat.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
(Empty)
1 /*
2 * Copyright 2012 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
8 #include "SkBitmap.h"
9 #include "SkBitmapHeap.h"
10 #include "SkColor.h"
11 #include "SkFlattenable.h"
12 #include "SkWriteBuffer.h"
13 #include "SkPictureFlat.h"
14 #include "SkRefCnt.h"
15 #include "SkShader.h"
16 #include "Test.h"
17
18 struct SimpleFlatController : public SkFlatController {
19 SimpleFlatController() : SkFlatController() {}
20 ~SimpleFlatController() { fAllocations.freeAll(); }
21 void* allocThrow(size_t bytes) override {
22 fAllocations.push(sk_malloc_throw(bytes));
23 return fAllocations.top();
24 }
25 void unalloc(void*) override { }
26 void setBitmapStorage(SkBitmapHeap* h) { this->setBitmapHeap(h); }
27 private:
28 SkTDArray<void*> fAllocations;
29 };
30
31 struct SkShaderTraits {
32 static void Flatten(SkWriteBuffer& buffer, const SkShader& shader) {
33 buffer.writeFlattenable(&shader);
34 }
35 };
36 typedef SkFlatDictionary<SkShader, SkShaderTraits> FlatDictionary;
37
38 class SkBitmapHeapTester {
39 public:
40 static int32_t GetRefCount(const SkBitmapHeapEntry* entry) {
41 return entry->fRefCount;
42 }
43 };
44
45 DEF_TEST(BitmapHeap, reporter) {
46 // Create a bitmap shader.
47 SkBitmap bm;
48 bm.allocN32Pixels(2, 2);
49 bm.eraseColor(SK_ColorRED);
50 uint32_t* pixel = bm.getAddr32(1,0);
51 *pixel = SK_ColorBLUE;
52
53 auto bitmapShader = SkShader::MakeBitmapShader(bm, SkShader::kRepeat_TileMod e,
54 SkShader::kRepeat_TileMode);
55
56 // Flatten, storing it in the bitmap heap.
57 SkBitmapHeap heap(1, 1);
58 SimpleFlatController controller;
59 controller.setBitmapStorage(&heap);
60 FlatDictionary dictionary(&controller);
61
62 // Dictionary and heap start off empty.
63 REPORTER_ASSERT(reporter, heap.count() == 0);
64 REPORTER_ASSERT(reporter, dictionary.count() == 0);
65
66 heap.deferAddingOwners();
67 int index = dictionary.find(*bitmapShader);
68 heap.endAddingOwnersDeferral(true);
69
70 // The dictionary and heap should now each have one entry.
71 REPORTER_ASSERT(reporter, 1 == index);
72 REPORTER_ASSERT(reporter, heap.count() == 1);
73 REPORTER_ASSERT(reporter, dictionary.count() == 1);
74
75 // The bitmap entry's refcount should be 1, then 0 after release.
76 SkBitmapHeapEntry* entry = heap.getEntry(0);
77 REPORTER_ASSERT(reporter, SkBitmapHeapTester::GetRefCount(entry) == 1);
78
79 entry->releaseRef();
80 REPORTER_ASSERT(reporter, SkBitmapHeapTester::GetRefCount(entry) == 0);
81
82 // Now clear out the heap, after which it should be empty.
83 heap.freeMemoryIfPossible(~0U);
84 REPORTER_ASSERT(reporter, heap.count() == 0);
85
86 // Now attempt to flatten the shader again.
87 heap.deferAddingOwners();
88 index = dictionary.find(*bitmapShader);
89 heap.endAddingOwnersDeferral(false);
90
91 // The bitmap heap should contain the bitmap, but with no references.
92 REPORTER_ASSERT(reporter, heap.count() == 1);
93 REPORTER_ASSERT(reporter, SkBitmapHeapTester::GetRefCount(heap.getEntry(0)) == 0);
94 }
OLDNEW
« no previous file with comments | « src/core/SkPictureFlat.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698