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

Side by Side Diff: tests/ResourceCacheTest.cpp

Issue 2307053002: Restructure flushing relationship between GrContext, GrDrawingManager, and GrResourceCache. (Closed)
Patch Set: Fix uninit vars Created 4 years, 3 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/gpu/SkGpuDevice.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 2013 Google Inc. 2 * Copyright 2013 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 here to ensure SK_SUPPORT_GPU is set correctly before it is examined. 8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined.
9 #include "SkTypes.h" 9 #include "SkTypes.h"
10 10
(...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 cache->setLimits(1000000, 1000000, kFlushCount); 1126 cache->setLimits(1000000, 1000000, kFlushCount);
1127 1127
1128 { 1128 {
1129 // Insert a resource and send a flush notification kFlushCount times. 1129 // Insert a resource and send a flush notification kFlushCount times.
1130 for (int i = 0; i < kFlushCount; ++i) { 1130 for (int i = 0; i < kFlushCount; ++i) {
1131 TestResource* r = new TestResource(context->getGpu()); 1131 TestResource* r = new TestResource(context->getGpu());
1132 GrUniqueKey k; 1132 GrUniqueKey k;
1133 make_unique_key<1>(&k, i); 1133 make_unique_key<1>(&k, i);
1134 r->resourcePriv().setUniqueKey(k); 1134 r->resourcePriv().setUniqueKey(k);
1135 r->unref(); 1135 r->unref();
1136 cache->notifyFlushOccurred(); 1136 cache->notifyFlushOccurred(GrResourceCache::kExternal);
1137 } 1137 }
1138 1138
1139 // Send flush notifications to the cache. Each flush should purge the ol dest resource. 1139 // Send flush notifications to the cache. Each flush should purge the ol dest resource.
1140 for (int i = 0; i < kFlushCount - 1; ++i) { 1140 for (int i = 0; i < kFlushCount - 1; ++i) {
1141 // The first resource was purged after the last flush in the initial loop, hence the -1. 1141 // The first resource was purged after the last flush in the initial loop, hence the -1.
1142 REPORTER_ASSERT(reporter, kFlushCount - i - 1 == cache->getResourceC ount()); 1142 REPORTER_ASSERT(reporter, kFlushCount - i - 1 == cache->getResourceC ount());
1143 for (int j = 0; j < i; ++j) { 1143 for (int j = 0; j < i; ++j) {
1144 GrUniqueKey k; 1144 GrUniqueKey k;
1145 make_unique_key<1>(&k, j); 1145 make_unique_key<1>(&k, j);
1146 GrGpuResource* r = cache->findAndRefUniqueResource(k); 1146 GrGpuResource* r = cache->findAndRefUniqueResource(k);
1147 REPORTER_ASSERT(reporter, !SkToBool(r)); 1147 REPORTER_ASSERT(reporter, !SkToBool(r));
1148 SkSafeUnref(r); 1148 SkSafeUnref(r);
1149 } 1149 }
1150 cache->notifyFlushOccurred(); 1150 cache->notifyFlushOccurred(GrResourceCache::kExternal);
1151 } 1151 }
1152 1152
1153 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 1153 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
1154 cache->purgeAllUnlocked(); 1154 cache->purgeAllUnlocked();
1155 } 1155 }
1156 1156
1157 // Do a similar test but where we leave refs on some resources to prevent th em from being 1157 // Do a similar test but where we leave refs on some resources to prevent th em from being
1158 // purged. 1158 // purged.
1159 { 1159 {
1160 GrGpuResource* refedResources[kFlushCount >> 1]; 1160 GrGpuResource* refedResources[kFlushCount >> 1];
1161 for (int i = 0; i < kFlushCount; ++i) { 1161 for (int i = 0; i < kFlushCount; ++i) {
1162 TestResource* r = new TestResource(context->getGpu()); 1162 TestResource* r = new TestResource(context->getGpu());
1163 GrUniqueKey k; 1163 GrUniqueKey k;
1164 make_unique_key<1>(&k, i); 1164 make_unique_key<1>(&k, i);
1165 r->resourcePriv().setUniqueKey(k); 1165 r->resourcePriv().setUniqueKey(k);
1166 // Leave a ref on every other resource, beginning with the first. 1166 // Leave a ref on every other resource, beginning with the first.
1167 if (SkToBool(i & 0x1)) { 1167 if (SkToBool(i & 0x1)) {
1168 refedResources[i/2] = r; 1168 refedResources[i/2] = r;
1169 } else { 1169 } else {
1170 r->unref(); 1170 r->unref();
1171 } 1171 }
1172 cache->notifyFlushOccurred(); 1172 cache->notifyFlushOccurred(GrResourceCache::kExternal);
1173 } 1173 }
1174 1174
1175 for (int i = 0; i < kFlushCount; ++i) { 1175 for (int i = 0; i < kFlushCount; ++i) {
1176 // Should get a resource purged every other flush. 1176 // Should get a resource purged every other flush.
1177 REPORTER_ASSERT(reporter, kFlushCount - i/2 - 1 == cache->getResourc eCount()); 1177 REPORTER_ASSERT(reporter, kFlushCount - i/2 - 1 == cache->getResourc eCount());
1178 cache->notifyFlushOccurred(); 1178 cache->notifyFlushOccurred(GrResourceCache::kExternal);
1179 } 1179 }
1180 1180
1181 // Unref all the resources that we kept refs on in the first loop. 1181 // Unref all the resources that we kept refs on in the first loop.
1182 for (int i = 0; i < kFlushCount >> 1; ++i) { 1182 for (int i = 0; i < kFlushCount >> 1; ++i) {
1183 refedResources[i]->unref(); 1183 refedResources[i]->unref();
1184 } 1184 }
1185 1185
1186 // When we unref'ed them their timestamps got updated. So nothing should be purged until we 1186 // When we unref'ed them their timestamps got updated. So nothing should be purged until we
1187 // get kFlushCount additional flushes. Then everything should be purged. 1187 // get kFlushCount additional flushes. Then everything should be purged.
1188 for (int i = 0; i < kFlushCount; ++i) { 1188 for (int i = 0; i < kFlushCount; ++i) {
1189 REPORTER_ASSERT(reporter, kFlushCount >> 1 == cache->getResourceCoun t()); 1189 REPORTER_ASSERT(reporter, kFlushCount >> 1 == cache->getResourceCoun t());
1190 cache->notifyFlushOccurred(); 1190 cache->notifyFlushOccurred(GrResourceCache::kExternal);
1191 } 1191 }
1192 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 1192 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
1193 1193
1194 cache->purgeAllUnlocked(); 1194 cache->purgeAllUnlocked();
1195 } 1195 }
1196 1196
1197 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 1197 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
1198 1198
1199 // Verify that calling flush() on a GrContext with nothing to do will not tr igger resource 1199 // Verify that calling flush() on a GrContext with nothing to do will not tr igger resource
1200 // eviction. 1200 // eviction.
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 test_cache_chained_purge(reporter); 1328 test_cache_chained_purge(reporter);
1329 test_resource_size_changed(reporter); 1329 test_resource_size_changed(reporter);
1330 test_timestamp_wrap(reporter); 1330 test_timestamp_wrap(reporter);
1331 test_flush(reporter); 1331 test_flush(reporter);
1332 test_large_resource_count(reporter); 1332 test_large_resource_count(reporter);
1333 test_custom_data(reporter); 1333 test_custom_data(reporter);
1334 test_abandoned(reporter); 1334 test_abandoned(reporter);
1335 } 1335 }
1336 1336
1337 #endif 1337 #endif
OLDNEW
« no previous file with comments | « src/gpu/SkGpuDevice.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698