Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 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 GrContext_DEFINED | 8 #ifndef GrContext_DEFINED |
| 9 #define GrContext_DEFINED | 9 #define GrContext_DEFINED |
| 10 | 10 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 sk_sp<SkColorSpace> colorSpace, | 191 sk_sp<SkColorSpace> colorSpace, |
| 192 int sampleCnt = 0, | 192 int sampleCnt = 0, |
| 193 GrSurfaceOrigin origin = kDefault_GrSur faceOrigin, | 193 GrSurfaceOrigin origin = kDefault_GrSur faceOrigin, |
| 194 const SkSurfaceProps* surfaceProps = nu llptr, | 194 const SkSurfaceProps* surfaceProps = nu llptr, |
| 195 SkBudgeted = SkBudgeted::kYes); | 195 SkBudgeted = SkBudgeted::kYes); |
| 196 | 196 |
| 197 /////////////////////////////////////////////////////////////////////////// | 197 /////////////////////////////////////////////////////////////////////////// |
| 198 // Misc. | 198 // Misc. |
| 199 | 199 |
| 200 /** | 200 /** |
| 201 * Flags that affect flush() behavior. | |
| 202 */ | |
| 203 enum FlushBits { | |
| 204 /** | |
| 205 * A client may reach a point where it has partially rendered a frame | |
| 206 * through a GrContext that it knows the user will never see. This flag | |
| 207 * causes the flush to skip submission of deferred content to the 3D API | |
| 208 * during the flush. | |
| 209 */ | |
| 210 kDiscard_FlushBit = 0x2, | |
| 211 }; | |
| 212 | |
| 213 /** | |
| 214 * Call to ensure all drawing to the context has been issued to the | 201 * Call to ensure all drawing to the context has been issued to the |
| 215 * underlying 3D API. | 202 * underlying 3D API. |
| 216 * @param flagsBitfield flags that control the flushing behavior. See | |
| 217 * FlushBits. | |
| 218 */ | 203 */ |
| 219 void flush(int flagsBitfield = 0); | 204 void flush(); |
| 220 | |
| 221 void flushIfNecessary() { | |
| 222 if (fFlushToReduceCacheSize || this->caps()->immediateFlush()) { | |
| 223 this->flush(); | |
| 224 } | |
| 225 } | |
| 226 | 205 |
| 227 /** | 206 /** |
| 228 * These flags can be used with the read/write pixels functions below. | 207 * These flags can be used with the read/write pixels functions below. |
| 229 */ | 208 */ |
| 230 enum PixelOpsFlags { | 209 enum PixelOpsFlags { |
| 231 /** The GrContext will not be flushed before the surface read or write. This means that | 210 /** The GrContext will not be flushed before the surface read or write. This means that |
| 232 the read or write may occur before previous draws have executed. */ | 211 the read or write may occur before previous draws have executed. */ |
| 233 kDontFlush_PixelOpsFlag = 0x1, | 212 kDontFlush_PixelOpsFlag = 0x1, |
| 234 /** Any surface writes should be flushed to the backend 3D API after the surface operation | 213 /** Any surface writes should be flushed to the backend 3D API after the surface operation |
| 235 is complete */ | 214 is complete */ |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 union { | 365 union { |
| 387 GrResourceProvider* fResourceProvider; | 366 GrResourceProvider* fResourceProvider; |
| 388 GrTextureProvider* fTextureProvider; | 367 GrTextureProvider* fTextureProvider; |
| 389 }; | 368 }; |
| 390 | 369 |
| 391 SkAutoTUnref<GrContextThreadSafeProxy> fThreadSafeProxy; | 370 SkAutoTUnref<GrContextThreadSafeProxy> fThreadSafeProxy; |
| 392 | 371 |
| 393 GrBatchFontCache* fBatchFontCache; | 372 GrBatchFontCache* fBatchFontCache; |
| 394 SkAutoTDelete<GrTextBlobCache> fTextBlobCache; | 373 SkAutoTDelete<GrTextBlobCache> fTextBlobCache; |
| 395 | 374 |
| 396 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw. | 375 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw. |
|
robertphillips
2016/09/02 16:23:06
Can we remove this too ?
| |
| 397 bool fFlushToReduceCacheSize; | 376 bool fFlushToReduceCacheSize; |
| 398 bool fDidTestPMConversions; | 377 bool fDidTestPMConversions; |
| 399 int fPMToUPMConversion; | 378 int fPMToUPMConversion; |
| 400 int fUPMToPMConversion; | 379 int fUPMToPMConversion; |
| 401 // The sw backend may call GrContext::readSurfacePixels on multiple threads | 380 // The sw backend may call GrContext::readSurfacePixels on multiple threads |
| 402 // We may transfer the responsibilty for using a mutex to the sw backend | 381 // We may transfer the responsibilty for using a mutex to the sw backend |
| 403 // when there are fewer code paths that lead to a readSurfacePixels call | 382 // when there are fewer code paths that lead to a readSurfacePixels call |
| 404 // from the sw backend. readSurfacePixels is reentrant in one case - when pe rforming | 383 // from the sw backend. readSurfacePixels is reentrant in one case - when pe rforming |
| 405 // the PM conversions test. To handle this we do the PM conversions test out side | 384 // the PM conversions test. To handle this we do the PM conversions test out side |
| 406 // of fReadPixelsMutex and use a separate mutex to guard it. When it re-ente rs | 385 // of fReadPixelsMutex and use a separate mutex to guard it. When it re-ente rs |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 449 const SkMatrix&) const; | 428 const SkMatrix&) const; |
| 450 /** Called before either of the above two functions to determine the appropr iate fragment | 429 /** Called before either of the above two functions to determine the appropr iate fragment |
| 451 processors for conversions. This must be called by readSurfacePixels bef ore a mutex is | 430 processors for conversions. This must be called by readSurfacePixels bef ore a mutex is |
| 452 taken, since testingvPM conversions itself will call readSurfacePixels * / | 431 taken, since testingvPM conversions itself will call readSurfacePixels * / |
| 453 void testPMConversionsIfNecessary(uint32_t flags); | 432 void testPMConversionsIfNecessary(uint32_t flags); |
| 454 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect | 433 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect |
| 455 will fail. In such cases fall back to SW conversion. */ | 434 will fail. In such cases fall back to SW conversion. */ |
| 456 bool didFailPMUPMConversionTest() const; | 435 bool didFailPMUPMConversionTest() const; |
| 457 | 436 |
| 458 /** | 437 /** |
| 459 * This callback allows the resource cache to callback into the GrContext | |
| 460 * when the cache is still over budget after a purge. | |
| 461 */ | |
| 462 static void OverBudgetCB(void* data); | |
| 463 | |
| 464 /** | |
| 465 * A callback similar to the above for use by the TextBlobCache | 438 * A callback similar to the above for use by the TextBlobCache |
| 466 * TODO move textblob draw calls below context so we can use the call above. | 439 * TODO move textblob draw calls below context so we can use the call above. |
| 467 */ | 440 */ |
| 468 static void TextBlobCacheOverBudgetCB(void* data); | 441 static void TextBlobCacheOverBudgetCB(void* data); |
| 469 | 442 |
| 470 typedef SkRefCnt INHERITED; | 443 typedef SkRefCnt INHERITED; |
| 471 }; | 444 }; |
| 472 | 445 |
| 473 /** | 446 /** |
| 474 * Can be used to perform actions related to the generating GrContext in a threa d safe manner. The | 447 * Can be used to perform actions related to the generating GrContext in a threa d safe manner. The |
| 475 * proxy does not access the 3D API (e.g. OpenGL) that backs the generating GrCo ntext. | 448 * proxy does not access the 3D API (e.g. OpenGL) that backs the generating GrCo ntext. |
| 476 */ | 449 */ |
| 477 class GrContextThreadSafeProxy : public SkRefCnt { | 450 class GrContextThreadSafeProxy : public SkRefCnt { |
| 478 private: | 451 private: |
| 479 GrContextThreadSafeProxy(const GrCaps* caps, uint32_t uniqueID) | 452 GrContextThreadSafeProxy(const GrCaps* caps, uint32_t uniqueID) |
| 480 : fCaps(SkRef(caps)) | 453 : fCaps(SkRef(caps)) |
| 481 , fContextUniqueID(uniqueID) {} | 454 , fContextUniqueID(uniqueID) {} |
| 482 | 455 |
| 483 SkAutoTUnref<const GrCaps> fCaps; | 456 SkAutoTUnref<const GrCaps> fCaps; |
| 484 uint32_t fContextUniqueID; | 457 uint32_t fContextUniqueID; |
| 485 | 458 |
| 486 friend class GrContext; | 459 friend class GrContext; |
| 487 friend class SkImage; | 460 friend class SkImage; |
| 488 | 461 |
| 489 typedef SkRefCnt INHERITED; | 462 typedef SkRefCnt INHERITED; |
| 490 }; | 463 }; |
| 491 | 464 |
| 492 #endif | 465 #endif |
| OLD | NEW |