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

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

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