• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 // This is now just a view on a ThreadSafeProxy, that SkImages can attempt to
17 // downcast to a GrDirectContext as a backdoor to some operations. Once we remove the backdoors,
18 // this goes away and SkImages just hold ThreadSafeProxies.
19 class GrImageContext : public GrContext_Base {
20 public:
21     ~GrImageContext() override;
22 
23     // Provides access to functions that aren't part of the public API.
24     GrImageContextPriv priv();
25     const GrImageContextPriv priv() const;  // NOLINT(readability-const-return-type)
26 
27 protected:
28     friend class GrImageContextPriv; // for hidden functions
29 
30     GrImageContext(sk_sp<GrContextThreadSafeProxy>);
31 
32     SK_API virtual void abandonContext();
33     SK_API virtual bool abandoned();
34 
35     /** This is only useful for debug purposes */
singleOwner()36     GrSingleOwner* singleOwner() const { return &fSingleOwner; }
37 
asImageContext()38     GrImageContext* asImageContext() override { return this; }
39 
40 private:
41     // When making promise images, we currently need a placeholder GrImageContext instance to give
42     // to the SkImage that has no real power, just a wrapper around the ThreadSafeProxy.
43     // TODO: De-power SkImage to ThreadSafeProxy or at least figure out a way to share one instance.
44     static sk_sp<GrImageContext> MakeForPromiseImage(sk_sp<GrContextThreadSafeProxy>);
45 
46     // In debug builds we guard against improper thread handling
47     // This guard is passed to the GrDrawingManager and, from there to all the
48     // GrSurfaceDrawContexts.  It is also passed to the GrResourceProvider and SkGpuDevice.
49     // TODO: Move this down to GrRecordingContext.
50     mutable GrSingleOwner            fSingleOwner;
51 
52     using INHERITED = GrContext_Base;
53 };
54 
55 #endif
56