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

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

Issue 184443003: Add Gpu Tracing to Ganesh (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Partial version Created 6 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 #ifndef GrInOrderDrawBuffer_DEFINED 8 #ifndef GrInOrderDrawBuffer_DEFINED
9 #define GrInOrderDrawBuffer_DEFINED 9 #define GrInOrderDrawBuffer_DEFINED
10 10
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 bool canIgnoreRect, 74 bool canIgnoreRect,
75 GrRenderTarget* renderTarget = NULL) SK_OVERRIDE; 75 GrRenderTarget* renderTarget = NULL) SK_OVERRIDE;
76 76
77 virtual void initCopySurfaceDstDesc(const GrSurface* src, GrTextureDesc* des c) SK_OVERRIDE; 77 virtual void initCopySurfaceDstDesc(const GrSurface* src, GrTextureDesc* des c) SK_OVERRIDE;
78 78
79 protected: 79 protected:
80 virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE; 80 virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE;
81 81
82 private: 82 private:
83 enum Cmd { 83 enum Cmd {
84 kDraw_Cmd = 1, 84 kDraw_Cmd = 1,
85 kStencilPath_Cmd = 2, 85 kStencilPath_Cmd = 2,
86 kSetState_Cmd = 3, 86 kSetState_Cmd = 3,
87 kSetClip_Cmd = 4, 87 kSetClip_Cmd = 4,
88 kClear_Cmd = 5, 88 kClear_Cmd = 5,
89 kCopySurface_Cmd = 6, 89 kCopySurface_Cmd = 6,
90 kDrawPath_Cmd = 7, 90 kDrawPath_Cmd = 7,
91 }; 91 };
92 92
93 class DrawRecord : public DrawInfo { 93 class DrawRecord : public DrawInfo {
94 public: 94 public:
95 DrawRecord(const DrawInfo& info) : DrawInfo(info) {} 95 DrawRecord(const DrawInfo& info) : DrawInfo(info) {}
96 const GrVertexBuffer* fVertexBuffer; 96 const GrVertexBuffer* fVertexBuffer;
97 const GrIndexBuffer* fIndexBuffer; 97 const GrIndexBuffer* fIndexBuffer;
98 }; 98 };
99 99
100 struct StencilPath : public ::SkNoncopyable { 100 struct StencilPath : public ::SkNoncopyable {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 GrSurface* src, 161 GrSurface* src,
162 const SkIRect& srcRect, 162 const SkIRect& srcRect,
163 const SkIPoint& dstPoint) SK_OVERRIDE; 163 const SkIPoint& dstPoint) SK_OVERRIDE;
164 virtual bool onCanCopySurface(GrSurface* dst, 164 virtual bool onCanCopySurface(GrSurface* dst,
165 GrSurface* src, 165 GrSurface* src,
166 const SkIRect& srcRect, 166 const SkIRect& srcRect,
167 const SkIPoint& dstPoint) SK_OVERRIDE; 167 const SkIPoint& dstPoint) SK_OVERRIDE;
168 168
169 bool quickInsideClip(const SkRect& devBounds); 169 bool quickInsideClip(const SkRect& devBounds);
170 170
171 virtual void onInstantGpuTraceEvent(const char* marker) SK_OVERRIDE; 171 virtual void onAddGpuTraceMarker() SK_OVERRIDE {};
172 virtual void onPushGpuTraceEvent(const char* marker) SK_OVERRIDE; 172 virtual void onRemoveGpuTraceMarker() SK_OVERRIDE {};
173 virtual void onPopGpuTraceEvent() SK_OVERRIDE;
174
175 173
176 // Attempts to concat instances from info onto the previous draw. info must represent an 174 // Attempts to concat instances from info onto the previous draw. info must represent an
177 // instanced draw. The caller must have already recorded a new draw state an d clip if necessary. 175 // instanced draw. The caller must have already recorded a new draw state an d clip if necessary.
178 int concatInstancedDraw(const DrawInfo& info); 176 int concatInstancedDraw(const DrawInfo& info);
179 177
180 // we lazily record state and clip changes in order to skip clips and states that have no 178 // we lazily record state and clip changes in order to skip clips and states that have no
181 // effect. 179 // effect.
182 bool needsNewState() const; 180 bool needsNewState() const;
183 bool needsNewClip() const; 181 bool needsNewClip() const;
184 182
185 // these functions record a command 183 // these functions record a command
186 void recordState(); 184 void recordState();
187 void recordClip(); 185 void recordClip();
188 DrawRecord* recordDraw(const DrawInfo&); 186 DrawRecord* recordDraw(const DrawInfo&);
189 StencilPath* recordStencilPath(); 187 StencilPath* recordStencilPath();
190 DrawPath* recordDrawPath(); 188 DrawPath* recordDrawPath();
191 Clear* recordClear(); 189 Clear* recordClear();
192 CopySurface* recordCopySurface(); 190 CopySurface* recordCopySurface();
191
192 // get name out of trace set
193 const char* getCurrentTraceMarker();
193 194
194 // TODO: Use a single allocator for commands and records 195 // TODO: Use a single allocator for commands and records
195 enum { 196 enum {
196 kCmdPreallocCnt = 32, 197 kCmdPreallocCnt = 32,
197 kDrawPreallocCnt = 8, 198 kDrawPreallocCnt = 8,
198 kStencilPathPreallocCnt = 8, 199 kStencilPathPreallocCnt = 8,
199 kDrawPathPreallocCnt = 8, 200 kDrawPathPreallocCnt = 8,
200 kStatePreallocCnt = 8, 201 kStatePreallocCnt = 8,
201 kClipPreallocCnt = 8, 202 kClipPreallocCnt = 8,
202 kClearPreallocCnt = 4, 203 kClearPreallocCnt = 4,
203 kGeoPoolStatePreAllocCnt = 4, 204 kGeoPoolStatePreAllocCnt = 4,
204 kCopySurfacePreallocCnt = 4, 205 kCopySurfacePreallocCnt = 4,
205 }; 206 };
206 207
207 SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds; 208 SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds;
208 GrSTAllocator<kDrawPreallocCnt, DrawRecord> fDraws; 209 GrSTAllocator<kDrawPreallocCnt, DrawRecord> fDraws;
209 GrSTAllocator<kStatePreallocCnt, StencilPath> fStencilP aths; 210 GrSTAllocator<kStatePreallocCnt, StencilPath> fStencilP aths;
210 GrSTAllocator<kStatePreallocCnt, DrawPath> fDrawPath s; 211 GrSTAllocator<kStatePreallocCnt, DrawPath> fDrawPath s;
211 GrSTAllocator<kStatePreallocCnt, GrDrawState::DeferredState> fStates; 212 GrSTAllocator<kStatePreallocCnt, GrDrawState::DeferredState> fStates;
212 GrSTAllocator<kClearPreallocCnt, Clear> fClears; 213 GrSTAllocator<kClearPreallocCnt, Clear> fClears;
213 GrSTAllocator<kCopySurfacePreallocCnt, CopySurface> fCopySurf aces; 214 GrSTAllocator<kCopySurfacePreallocCnt, CopySurface> fCopySurf aces;
214 GrSTAllocator<kClipPreallocCnt, SkClipStack> fClips; 215 GrSTAllocator<kClipPreallocCnt, SkClipStack> fClips;
215 GrSTAllocator<kClipPreallocCnt, SkIPoint> fClipOrig ins; 216 GrSTAllocator<kClipPreallocCnt, SkIPoint> fClipOrig ins;
217 SkTDArray<GpuTraceMarker> fGpuCmdMa rkers;
218 SkTDArray<int> fNumMarke rsPerCmd;
216 219
217 GrDrawTarget* fDstGpu; 220 GrDrawTarget* fDstGpu;
218 221
219 bool fClipSet; 222 bool fClipSet;
220 223
221 enum ClipProxyState { 224 enum ClipProxyState {
222 kUnknown_ClipProxyState, 225 kUnknown_ClipProxyState,
223 kValid_ClipProxyState, 226 kValid_ClipProxyState,
224 kInvalid_ClipProxyState 227 kInvalid_ClipProxyState
225 }; 228 };
(...skipping 12 matching lines...) Expand all
238 // caller may conservatively over reserve vertices / indices. 241 // caller may conservatively over reserve vertices / indices.
239 // we release unused space back to allocator if possible 242 // we release unused space back to allocator if possible
240 // can only do this if there isn't an intervening pushGeometrySource() 243 // can only do this if there isn't an intervening pushGeometrySource()
241 size_t fUsedPoolVertexBytes; 244 size_t fUsedPoolVertexBytes;
242 size_t fUsedPoolIndexBytes; 245 size_t fUsedPoolIndexBytes;
243 }; 246 };
244 SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack; 247 SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack;
245 248
246 virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; } 249 virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; }
247 250
251 void addToCmdBuffer(uint8_t cmd);
252
253 inline uint8_t addTraceBit(uint8_t cmd) {
254 return cmd | 0x08;
bsalomon 2014/03/17 17:50:38 Can we put these in an enum? e.g. enum { kTra
egdaniel 2014/03/17 19:49:12 yes! On 2014/03/17 17:50:38, bsalomon wrote:
255 }
256
257 inline uint8_t stripTraceBit(uint8_t cmd) {
258 return cmd & 0x07;
bsalomon 2014/03/17 17:50:38 7f?
egdaniel 2014/03/17 19:49:12 Currently the commands we use only go to 7 so I ju
bsalomon 2014/03/19 13:28:44 Yeah, I think it is safer to use 7f. If someone up
egdaniel 2014/03/19 14:27:03 Assert has been added in the newest version On 20
259 }
260
248 bool fFlushing; 261 bool fFlushing;
249 uint32_t fDrawID; 262 uint32_t fDrawID;
250 263
251 typedef GrDrawTarget INHERITED; 264 typedef GrDrawTarget INHERITED;
252 }; 265 };
253 266
254 #endif 267 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698