1c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 2c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon/* 3c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon * Copyright 2014 Google Inc. 4c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon * 5c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon * Use of this source code is governed by a BSD-style license that can be 6c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon * found in the LICENSE file. 7c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon */ 8c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 9c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 10c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon#include "GrResourceCache2.h" 11c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon#include "GrGpuResource.h" 12c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 13c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomonGrResourceCache2::~GrResourceCache2() { 14c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon this->releaseAll(); 15c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon} 16c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 17c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomonvoid GrResourceCache2::insertResource(GrGpuResource* resource) { 1849f085dddff10473b6ebf832a974288300224e60bsalomon SkASSERT(resource); 19c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(!resource->wasDestroyed()); 20169612621f00b3fe9f71014079991287d311751absalomon SkASSERT(!this->isInCache(resource)); 21c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon fResources.addToHead(resource); 22c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon ++fCount; 23744998e666073166307d2522847b2536000a7619bsalomon if (!resource->getScratchKey().isNullScratch()) { 24744998e666073166307d2522847b2536000a7619bsalomon fScratchMap.insert(resource->getScratchKey(), resource); 25744998e666073166307d2522847b2536000a7619bsalomon } 26c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon} 27c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 28c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomonvoid GrResourceCache2::removeResource(GrGpuResource* resource) { 29169612621f00b3fe9f71014079991287d311751absalomon SkASSERT(this->isInCache(resource)); 30744998e666073166307d2522847b2536000a7619bsalomon fResources.remove(resource); 31744998e666073166307d2522847b2536000a7619bsalomon if (!resource->getScratchKey().isNullScratch()) { 32744998e666073166307d2522847b2536000a7619bsalomon fScratchMap.remove(resource->getScratchKey(), resource); 33744998e666073166307d2522847b2536000a7619bsalomon } 34c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon --fCount; 35c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon} 36c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 37c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomonvoid GrResourceCache2::abandonAll() { 38c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon while (GrGpuResource* head = fResources.head()) { 39c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(!head->wasDestroyed()); 40c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon head->abandon(); 41c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon // abandon should have already removed this from the list. 42c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(head != fResources.head()); 43c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon } 44744998e666073166307d2522847b2536000a7619bsalomon SkASSERT(!fScratchMap.count()); 45c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(!fCount); 46c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon} 47c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon 48c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomonvoid GrResourceCache2::releaseAll() { 49c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon while (GrGpuResource* head = fResources.head()) { 50c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(!head->wasDestroyed()); 51c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon head->release(); 52c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon // release should have already removed this from the list. 53c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(head != fResources.head()); 54c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon } 55744998e666073166307d2522847b2536000a7619bsalomon SkASSERT(!fScratchMap.count()); 56c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon SkASSERT(!fCount); 57c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon} 58