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

Side by Side Diff: src/gpu/GrLayerAtlas.h

Issue 1413483004: Revert of Update Layer Hoisting to store its atlas texture in the resource cache (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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/SkMultiPictureDraw.cpp ('k') | src/gpu/GrLayerAtlas.cpp » ('j') | 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 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef GrLayerAtlas_DEFINED 9 #ifndef GrLayerAtlas_DEFINED
10 #define GrLayerAtlas_DEFINED 10 #define GrLayerAtlas_DEFINED
11 11
12 #include "GrTexture.h" 12 #include "GrTypes.h"
13 13
14 #include "SkPoint.h" 14 #include "SkPoint.h"
15 #include "SkSize.h"
15 #include "SkTDArray.h" 16 #include "SkTDArray.h"
16 #include "SkTInternalLList.h" 17 #include "SkTInternalLList.h"
17 18
18 class GrLayerAtlas; 19 class GrLayerAtlas;
20 class GrTexture;
19 class GrTextureProvider; 21 class GrTextureProvider;
20 class GrRectanizer; 22 class GrRectanizer;
21 23
22 // The backing GrTexture for a GrLayerAtlas is broken into a spatial grid of Plo ts. When 24 // The backing GrTexture for a GrLayerAtlas is broken into a spatial grid of Plo ts. When
23 // the atlas needs space on the texture (i.e., in response to an addToAtlas call ), it 25 // the atlas needs space on the texture (i.e., in response to an addToAtlas call ), it
24 // iterates through the plots in use by the requesting client looking for space and, 26 // iterates through the plots in use by the requesting client looking for space and,
25 // if no space is found, opens up a new Plot for that client. The Plots keep tra ck of 27 // if no space is found, opens up a new Plot for that client. The Plots keep tra ck of
26 // subimage placement via their GrRectanizer. 28 // subimage placement via their GrRectanizer.
27 // 29 //
28 // If all Plots are full, the replacement strategy is up to the client. The Plot ::reset 30 // If all Plots are full, the replacement strategy is up to the client. The Plot ::reset
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 GrLayerAtlas(GrTextureProvider*, GrPixelConfig, GrSurfaceFlags flags, 102 GrLayerAtlas(GrTextureProvider*, GrPixelConfig, GrSurfaceFlags flags,
101 const SkISize& backingTextureSize, 103 const SkISize& backingTextureSize,
102 int numPlotsX, int numPlotsY); 104 int numPlotsX, int numPlotsY);
103 ~GrLayerAtlas(); 105 ~GrLayerAtlas();
104 106
105 // Requests a width x height block in the atlas. Upon success it returns 107 // Requests a width x height block in the atlas. Upon success it returns
106 // the containing Plot and absolute location in the backing texture. 108 // the containing Plot and absolute location in the backing texture.
107 // nullptr is returned if there is no more space in the atlas. 109 // nullptr is returned if there is no more space in the atlas.
108 Plot* addToAtlas(ClientPlotUsage*, int width, int height, SkIPoint16* loc); 110 Plot* addToAtlas(ClientPlotUsage*, int width, int height, SkIPoint16* loc);
109 111
110 GrTexture* getTextureOrNull() const { 112 GrTexture* getTexture() const {
111 return fTexture; 113 return fTexture;
112 } 114 }
113 115
114 GrTexture* getTexture() const {
115 SkASSERT(fTexture);
116 return fTexture;
117 }
118
119 bool reattachBackingTexture();
120
121 void detachBackingTexture() {
122 fTexture.reset(nullptr);
123 }
124
125 void resetPlots();
126
127 enum IterOrder { 116 enum IterOrder {
128 kLRUFirst_IterOrder, 117 kLRUFirst_IterOrder,
129 kMRUFirst_IterOrder 118 kMRUFirst_IterOrder
130 }; 119 };
131 120
132 typedef SkTInternalLList<Plot> PlotList; 121 typedef SkTInternalLList<Plot> PlotList;
133 typedef PlotList::Iter PlotIter; 122 typedef PlotList::Iter PlotIter;
134 Plot* iterInit(PlotIter* iter, IterOrder order) { 123 Plot* iterInit(PlotIter* iter, IterOrder order) {
135 return iter->init(fPlotList, kLRUFirst_IterOrder == order 124 return iter->init(fPlotList, kLRUFirst_IterOrder == order
136 ? PlotList::Iter::kTail_I terStart 125 ? PlotList::Iter::kTail_I terStart
137 : PlotList::Iter::kHead_I terStart); 126 : PlotList::Iter::kHead_I terStart);
138 } 127 }
139 128
140 private: 129 private:
141 void createBackingTexture();
142
143 void makeMRU(Plot* plot); 130 void makeMRU(Plot* plot);
144 131
145 GrTextureProvider* fTexProvider; 132 GrTextureProvider* fTexProvider;
146 GrPixelConfig fPixelConfig; 133 GrPixelConfig fPixelConfig;
147 GrSurfaceFlags fFlags; 134 GrSurfaceFlags fFlags;
148 SkAutoTUnref<GrTexture> fTexture; 135 GrTexture* fTexture;
149 136
150 SkISize fBackingTextureSize; 137 SkISize fBackingTextureSize;
151 138
152 // allocated array of Plots 139 // allocated array of Plots
153 Plot* fPlotArray; 140 Plot* fPlotArray;
154 // LRU list of Plots (MRU at head - LRU at tail) 141 // LRU list of Plots (MRU at head - LRU at tail)
155 PlotList fPlotList; 142 PlotList fPlotList;
156 }; 143 };
157 144
158 #endif 145 #endif
OLDNEW
« no previous file with comments | « src/core/SkMultiPictureDraw.cpp ('k') | src/gpu/GrLayerAtlas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698