From 97ae0c89025dfd791047f5701e57d58da37c125c Mon Sep 17 00:00:00 2001 From: Ethan Nicholas Date: Thu, 12 Jul 2018 14:02:00 -0400 Subject: Revert "Revert "added GrSkSLFP and converted DitherEffect to use it"" This reverts commit f2030783094e502fb74221077a5ee7cb41287fe4. Bug: skia: Change-Id: Icaaa8b3ea652a8f126bfbcc788a360493a7ebe3e Reviewed-on: https://skia-review.googlesource.com/137391 Commit-Queue: Ethan Nicholas Reviewed-by: Brian Salomon --- include/gpu/GrContext.h | 16 +++++++++------ include/private/GrSkSLFPFactoryCache.h | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 include/private/GrSkSLFPFactoryCache.h (limited to 'include') diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index c1804e00ff..116c8bfcd9 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -13,6 +13,7 @@ #include "SkTypes.h" #include "../private/GrAuditTrail.h" #include "../private/GrSingleOwner.h" +#include "../private/GrSkSLFPFactoryCache.h" #include "GrContextOptions.h" // We shouldn't need this but currently Android is relying on this being include transitively. @@ -301,6 +302,7 @@ protected: const GrBackend fBackend; sk_sp fCaps; sk_sp fThreadSafeProxy; + sk_sp fFPFactoryCache; private: sk_sp fGpu; @@ -428,12 +430,14 @@ private: GrContextThreadSafeProxy(sk_sp caps, uint32_t uniqueID, GrBackend backend, - const GrContextOptions& options); - - sk_sp fCaps; - const uint32_t fContextUniqueID; - const GrBackend fBackend; - const GrContextOptions fOptions; + const GrContextOptions& options, + sk_sp cache); + + sk_sp fCaps; + const uint32_t fContextUniqueID; + const GrBackend fBackend; + const GrContextOptions fOptions; + sk_sp fFPFactoryCache; friend class GrDirectContext; // To construct this object friend class GrContextThreadSafeProxyPriv; diff --git a/include/private/GrSkSLFPFactoryCache.h b/include/private/GrSkSLFPFactoryCache.h new file mode 100644 index 0000000000..40e001a672 --- /dev/null +++ b/include/private/GrSkSLFPFactoryCache.h @@ -0,0 +1,37 @@ +/* + * Copyright 2018 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrSkSLFPFactoryCache_DEFINED +#define GrSkSLFPFactoryCache_DEFINED + +#include "SkRefCnt.h" + +#include + +class GrSkSLFPFactory; + +// This is a cache used by GrSkSLFP to retain GrSkSLFPFactory instances, so we don't have to +// re-process the SkSL source code every time we create a GrSkSLFP instance. +// For thread safety, it is important that GrSkSLFP only interact with the cache from methods that +// are only called from within the rendering thread, like onCreateGLSLInstance and +// onGetGLSLProcessorKey. +class GrSkSLFPFactoryCache : public SkNVRefCnt { +public: + // Returns a factory by its numeric index, or null if no such factory exists. Indices are + // allocated by GrSkSLFP::NewIndex(). + sk_sp get(int index); + + // Stores a new factory with the given index. + void set(int index, sk_sp factory); + + ~GrSkSLFPFactoryCache(); + +private: + std::vector fFactories; +}; + +#endif -- cgit v1.2.3