1 /*
2  * Copyright 2019 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrImageContext_DEFINED
9 #define GrImageContext_DEFINED
10 
11 #include "include/private/GrContext_Base.h"
12 #include "include/private/GrSingleOwner.h"
13 
14 class GrImageContextPriv;
15 class GrProxyProvider;
16 
17 class GrImageContext : public GrContext_Base {
18 public:
19     ~GrImageContext() override;
20 
defaultBackendFormat(SkColorType ct,GrRenderable renderable)21     GrBackendFormat defaultBackendFormat(SkColorType ct, GrRenderable renderable) const {
22         return INHERITED::defaultBackendFormat(ct, renderable);
23     }
24 
25     // Provides access to functions that aren't part of the public API.
26     GrImageContextPriv priv();
27     const GrImageContextPriv priv() const;
28 
29 protected:
30     friend class GrImageContextPriv; // for hidden functions
31 
32     GrImageContext(GrBackendApi, const GrContextOptions&, uint32_t contextID);
33 
34     SK_API virtual void abandonContext();
35     SK_API bool abandoned() const;
36 
proxyProvider()37     GrProxyProvider* proxyProvider() { return fProxyProvider.get(); }
proxyProvider()38     const GrProxyProvider* proxyProvider() const { return fProxyProvider.get(); }
39 
40     /** This is only useful for debug purposes */
singleOwner()41     GrSingleOwner* singleOwner() const { return &fSingleOwner; }
42 
asImageContext()43     GrImageContext* asImageContext() override { return this; }
44 
45 private:
46     std::unique_ptr<GrProxyProvider> fProxyProvider;
47     bool                             fAbandoned = false;
48 
49     // In debug builds we guard against improper thread handling
50     // This guard is passed to the GrDrawingManager and, from there to all the
51     // GrRenderTargetContexts.  It is also passed to the GrResourceProvider and SkGpuDevice.
52     mutable GrSingleOwner            fSingleOwner;
53 
54     typedef GrContext_Base INHERITED;
55 };
56 
57 #endif
58