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

Side by Side Diff: include/gpu/GrContext.h

Issue 1329313002: Add a mutex to GrContext::readSurfacePixels to protect against multiple CPU raster threads accessin… (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: minor Created 5 years, 3 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
« no previous file with comments | « no previous file | src/gpu/GrContext.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 * 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
11 #include "GrClip.h" 11 #include "GrClip.h"
12 #include "GrColor.h" 12 #include "GrColor.h"
13 #include "GrPaint.h" 13 #include "GrPaint.h"
14 #include "GrPathRendererChain.h" 14 #include "GrPathRendererChain.h"
15 #include "GrRenderTarget.h" 15 #include "GrRenderTarget.h"
16 #include "GrTextureProvider.h" 16 #include "GrTextureProvider.h"
17 #include "SkMatrix.h" 17 #include "SkMatrix.h"
18 #include "SkMutex.h"
18 #include "SkPathEffect.h" 19 #include "SkPathEffect.h"
19 #include "SkTypes.h" 20 #include "SkTypes.h"
20 21
21 struct GrBatchAtlasConfig; 22 struct GrBatchAtlasConfig;
22 class GrBatchFontCache; 23 class GrBatchFontCache;
23 class GrCaps; 24 class GrCaps;
24 struct GrContextOptions; 25 struct GrContextOptions;
25 class GrDrawContext; 26 class GrDrawContext;
26 class GrDrawTarget; 27 class GrDrawTarget;
27 class GrFragmentProcessor; 28 class GrFragmentProcessor;
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 SkAutoTDelete<GrTextBlobCache> fTextBlobCache; 374 SkAutoTDelete<GrTextBlobCache> fTextBlobCache;
374 375
375 GrPathRendererChain* fPathRendererChain; 376 GrPathRendererChain* fPathRendererChain;
376 GrSoftwarePathRenderer* fSoftwarePathRenderer; 377 GrSoftwarePathRenderer* fSoftwarePathRenderer;
377 378
378 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw. 379 // Set by OverbudgetCB() to request that GrContext flush before exiting a dr aw.
379 bool fFlushToReduceCacheSize; 380 bool fFlushToReduceCacheSize;
380 bool fDidTestPMConversions; 381 bool fDidTestPMConversions;
381 int fPMToUPMConversion; 382 int fPMToUPMConversion;
382 int fUPMToPMConversion; 383 int fUPMToPMConversion;
384 // The sw backend may call GrContext::readSurfacePixels on multiple threads
385 // We may transfer the responsibilty for using a mutex to the sw backend
386 // when there are fewer code paths that lead to a readSurfacePixels call
387 // from the sw backend. readSurfacePixels is reentrant in one case - when pe rforming
388 // the PM conversions test. To handle this we do the PM conversions test out side
389 // of fReadPixelsMutex and use a separate mutex to guard it. When it re-ente rs
390 // readSurfacePixels it will grab fReadPixelsMutex and release it before the outer
391 // readSurfacePixels proceeds to grab it.
392 // TODO: Stop pretending to make GrContext thread-safe for sw rasterization and provide
393 // a mechanism to make a SkPicture safe for multithreaded sw rasterization.
394 SkMutex fReadPixelsMutex;
395 SkMutex fTestPMConversionsMutex;
383 396
384 struct CleanUpData { 397 struct CleanUpData {
385 PFCleanUpFunc fFunc; 398 PFCleanUpFunc fFunc;
386 void* fInfo; 399 void* fInfo;
387 }; 400 };
388 401
389 SkTDArray<CleanUpData> fCleanUpData; 402 SkTDArray<CleanUpData> fCleanUpData;
390 403
391 const uint32_t fUniqueID; 404 const uint32_t fUniqueID;
392 405
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 452
440 void initMockContext(); 453 void initMockContext();
441 void initCommon(); 454 void initCommon();
442 455
443 /** 456 /**
444 * These functions create premul <-> unpremul effects if it is possible to g enerate a pair 457 * These functions create premul <-> unpremul effects if it is possible to g enerate a pair
445 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O therwise, they 458 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O therwise, they
446 * return NULL. 459 * return NULL.
447 */ 460 */
448 const GrFragmentProcessor* createPMToUPMEffect(GrProcessorDataManager*, GrTe xture*, 461 const GrFragmentProcessor* createPMToUPMEffect(GrProcessorDataManager*, GrTe xture*,
449 bool swapRAndB, const SkMatri x&); 462 bool swapRAndB, const SkMatri x&) const;
450 const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTe xture*, 463 const GrFragmentProcessor* createUPMToPMEffect(GrProcessorDataManager*, GrTe xture*,
451 bool swapRAndB, const SkMatri x&); 464 bool swapRAndB, const SkMatri x&) const;
465 /** Called before either of the above two functions to determine the appropr iate fragment
466 processors for conversions. This must be called by readSurfacePixels bef or a mutex is taken,
467 since testingvPM conversions itself will call readSurfacePixels */
468 void testPMConversionsIfNecessary(uint32_t flags);
452 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect 469 /** Returns true if we've already determined that createPMtoUPMEffect and cr eateUPMToPMEffect
453 will fail. In such cases fall back to SW conversion. */ 470 will fail. In such cases fall back to SW conversion. */
454 bool didFailPMUPMConversionTest() const; 471 bool didFailPMUPMConversionTest() const;
455 472
456 /** 473 /**
457 * This callback allows the resource cache to callback into the GrContext 474 * This callback allows the resource cache to callback into the GrContext
458 * when the cache is still over budget after a purge. 475 * when the cache is still over budget after a purge.
459 */ 476 */
460 static void OverBudgetCB(void* data); 477 static void OverBudgetCB(void* data);
461 478
462 /** 479 /**
463 * A callback similar to the above for use by the TextBlobCache 480 * A callback similar to the above for use by the TextBlobCache
464 * TODO move textblob draw calls below context so we can use the call above. 481 * TODO move textblob draw calls below context so we can use the call above.
465 */ 482 */
466 static void TextBlobCacheOverBudgetCB(void* data); 483 static void TextBlobCacheOverBudgetCB(void* data);
467 484
468 typedef SkRefCnt INHERITED; 485 typedef SkRefCnt INHERITED;
469 }; 486 };
470 487
471 #endif 488 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698