Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/layers/CanvasRenderer.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef GFX_CANVASRENDERER_H
8
#define GFX_CANVASRENDERER_H
9
10
#include <stdint.h>                     // for uint32_t
11
#include "GLContextTypes.h"             // for GLContext
12
#include "gfxContext.h"                 // for gfxContext, etc
13
#include "gfxTypes.h"
14
#include "gfxPlatform.h"                // for gfxImageFormat
15
#include "mozilla/Assertions.h"         // for MOZ_ASSERT, etc
16
#include "mozilla/Preferences.h"        // for Preferences
17
#include "mozilla/RefPtr.h"             // for RefPtr
18
#include "mozilla/gfx/2D.h"             // for DrawTarget
19
#include "mozilla/mozalloc.h"           // for operator delete, etc
20
#include "nsISupportsImpl.h"            // for MOZ_COUNT_CTOR, etc
21
22
namespace mozilla {
23
namespace layers {
24
25
class AsyncCanvasRenderer;
26
class ClientCanvasRenderer;
27
class CopyableCanvasRenderer;
28
class PersistentBufferProvider;
29
class WebRenderCanvasRendererAsync;
30
31
struct CanvasInitializeData {
32
  CanvasInitializeData()
33
    : mBufferProvider(nullptr)
34
    , mGLContext(nullptr)
35
    , mRenderer(nullptr)
36
    , mPreTransCallback(nullptr)
37
    , mPreTransCallbackData(nullptr)
38
    , mDidTransCallback(nullptr)
39
    , mDidTransCallbackData(nullptr)
40
    , mFrontbufferGLTex(0)
41
    , mSize(0,0)
42
    , mHasAlpha(false)
43
    , mIsGLAlphaPremult(true)
44
0
  { }
45
46
  // One of these three must be specified for Canvas2D, but never more than one
47
  PersistentBufferProvider* mBufferProvider; // A BufferProvider for the Canvas contents
48
  mozilla::gl::GLContext* mGLContext; // or this, for GL.
49
  AsyncCanvasRenderer* mRenderer; // or this, for OffscreenCanvas
50
51
  typedef void (* TransactionCallback)(void* closureData);
52
  TransactionCallback mPreTransCallback;
53
  void* mPreTransCallbackData;
54
  TransactionCallback mDidTransCallback;
55
  void* mDidTransCallbackData;
56
57
  // Frontbuffer override
58
  uint32_t mFrontbufferGLTex;
59
60
  // The size of the canvas content
61
  gfx::IntSize mSize;
62
63
  // Whether the canvas drawingbuffer has an alpha channel.
64
  bool mHasAlpha;
65
66
  // Whether mGLContext contains data that is alpha-premultiplied.
67
  bool mIsGLAlphaPremult;
68
};
69
70
// Based class which used for canvas rendering. There are many derived classes for
71
// different purposes. such as:
72
//
73
// CopyableCanvasRenderer provides a utility which readback canvas content to a
74
// SourceSurface. BasicCanvasLayer uses CopyableCanvasRenderer.
75
//
76
// ShareableCanvasRenderer provides IPC capabilities that allow sending canvas
77
// content over IPC. This is pure virtual class because the IPC handling is
78
// different in different LayerManager. So that we have following classes inherite
79
// ShareableCanvasRenderer.
80
//
81
// ClientCanvasRenderer inherites ShareableCanvasRenderer and be used in
82
// ClientCanvasLayer.
83
// WebRenderCanvasRenderer inherites ShareableCanvasRenderer and provides all
84
// functionality that WebRender uses.
85
// WebRenderCanvasRendererAsync inherites WebRenderCanvasRenderer and be used in
86
// layers-free mode of WebRender.
87
//
88
// class diagram shows below:
89
//
90
//                       +--------------+
91
//                       |CanvasRenderer|
92
//                       +-------+------+
93
//                               ^
94
//                               |
95
//                   +----------------------+
96
//                   |CopyableCanvasRenderer|
97
//                   +----------------------+
98
//                               ^
99
//                               |
100
//                   +-----------+-----------+
101
//                   |ShareableCanvasRenderer|
102
//                   +-----+-----------------+
103
//                         ^      ^
104
//           +-------------+      +-------+
105
//           |                            |
106
// +--------------------+       +---------+-------------+
107
// |ClientCanvasRenderer|       |WebRenderCanvasRenderer|
108
// +--------------------+       +-----------+-----------+
109
//                                          ^
110
//                                          |
111
//                           +-------------+--------------+
112
//                           |WebRenderCanvasRendererAsync|
113
//                           +----------------------------+
114
class CanvasRenderer
115
{
116
public:
117
  CanvasRenderer();
118
  virtual ~CanvasRenderer();
119
120
public:
121
  virtual void Initialize(const CanvasInitializeData& aData);
122
  virtual bool IsDataValid(const CanvasInitializeData& aData) { return true; }
123
124
  virtual void ClearCachedResources() { }
125
  virtual void Destroy() { }
126
127
0
  const gfx::IntSize& GetSize() const { return mSize; }
128
129
  void SetDirty() { mDirty = true; }
130
  void ResetDirty() { mDirty = false; }
131
  bool IsDirty() const { return mDirty; }
132
133
  virtual CopyableCanvasRenderer* AsCopyableCanvasRenderer() { return nullptr; }
134
  virtual ClientCanvasRenderer* AsClientCanvasRenderer() { return nullptr; }
135
  virtual WebRenderCanvasRendererAsync* AsWebRenderCanvasRendererAsync() { return nullptr; }
136
137
protected:
138
  void FirePreTransactionCallback()
139
  {
140
    if (mPreTransCallback) {
141
      mPreTransCallback(mPreTransCallbackData);
142
    }
143
  }
144
145
  void FireDidTransactionCallback()
146
  {
147
    if (mDidTransCallback) {
148
      mDidTransCallback(mDidTransCallbackData);
149
    }
150
  }
151
152
  typedef void (* TransactionCallback)(void* closureData);
153
  TransactionCallback mPreTransCallback;
154
  void* mPreTransCallbackData;
155
  TransactionCallback mDidTransCallback;
156
  void* mDidTransCallbackData;
157
  gfx::IntSize mSize;
158
159
private:
160
  /**
161
   * Set to true in Updated(), cleared during a transaction.
162
   */
163
  bool mDirty;
164
};
165
166
} // namespace layers
167
} // namespace mozilla
168
169
#endif