gfx/2d/DrawTargetSkia.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef _MOZILLA_GFX_SOURCESURFACESKIA_H
     7 #define _MOZILLA_GFX_SOURCESURFACESKIA_H
     9 #ifdef USE_SKIA_GPU
    10 #include "skia/GrContext.h"
    11 #include "skia/GrGLInterface.h"
    12 #endif
    14 #include "skia/SkCanvas.h"
    16 #include "2D.h"
    17 #include "Rect.h"
    18 #include "PathSkia.h"
    19 #include <sstream>
    20 #include <vector>
    22 namespace mozilla {
    23 namespace gfx {
    25 class SourceSurfaceSkia;
    27 class DrawTargetSkia : public DrawTarget
    28 {
    29 public:
    30   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DrawTargetSkia)
    31   DrawTargetSkia();
    32   virtual ~DrawTargetSkia();
    34   virtual BackendType GetType() const { return BackendType::SKIA; }
    35   virtual TemporaryRef<SourceSurface> Snapshot();
    36   virtual IntSize GetSize() { return mSize; }
    37   virtual void Flush();
    38   virtual void DrawSurface(SourceSurface *aSurface,
    39                            const Rect &aDest,
    40                            const Rect &aSource,
    41                            const DrawSurfaceOptions &aSurfOptions = DrawSurfaceOptions(),
    42                            const DrawOptions &aOptions = DrawOptions());
    43   virtual void DrawFilter(FilterNode *aNode,
    44                           const Rect &aSourceRect,
    45                           const Point &aDestPoint,
    46                           const DrawOptions &aOptions = DrawOptions());
    47   virtual void DrawSurfaceWithShadow(SourceSurface *aSurface,
    48                                      const Point &aDest,
    49                                      const Color &aColor,
    50                                      const Point &aOffset,
    51                                      Float aSigma,
    52                                      CompositionOp aOperator);
    53   virtual void ClearRect(const Rect &aRect);
    54   virtual void CopySurface(SourceSurface *aSurface,
    55                            const IntRect &aSourceRect,
    56                            const IntPoint &aDestination);
    57   virtual void FillRect(const Rect &aRect,
    58                         const Pattern &aPattern,
    59                         const DrawOptions &aOptions = DrawOptions());
    60   virtual void StrokeRect(const Rect &aRect,
    61                           const Pattern &aPattern,
    62                           const StrokeOptions &aStrokeOptions = StrokeOptions(),
    63                           const DrawOptions &aOptions = DrawOptions());
    64   virtual void StrokeLine(const Point &aStart,
    65                           const Point &aEnd,
    66                           const Pattern &aPattern,
    67                           const StrokeOptions &aStrokeOptions = StrokeOptions(),
    68                           const DrawOptions &aOptions = DrawOptions());
    69   virtual void Stroke(const Path *aPath,
    70                       const Pattern &aPattern,
    71                       const StrokeOptions &aStrokeOptions = StrokeOptions(),
    72                       const DrawOptions &aOptions = DrawOptions());
    73   virtual void Fill(const Path *aPath,
    74                     const Pattern &aPattern,
    75                     const DrawOptions &aOptions = DrawOptions());
    76   virtual void FillGlyphs(ScaledFont *aFont,
    77                           const GlyphBuffer &aBuffer,
    78                           const Pattern &aPattern,
    79                           const DrawOptions &aOptions = DrawOptions(),
    80                           const GlyphRenderingOptions *aRenderingOptions = nullptr);
    81   virtual void Mask(const Pattern &aSource,
    82                     const Pattern &aMask,
    83                     const DrawOptions &aOptions = DrawOptions());
    84   virtual void MaskSurface(const Pattern &aSource,
    85                            SourceSurface *aMask,
    86                            Point aOffset,
    87                            const DrawOptions &aOptions = DrawOptions());
    88   virtual void PushClip(const Path *aPath);
    89   virtual void PushClipRect(const Rect& aRect);
    90   virtual void PopClip();
    91   virtual TemporaryRef<SourceSurface> CreateSourceSurfaceFromData(unsigned char *aData,
    92                                                             const IntSize &aSize,
    93                                                             int32_t aStride,
    94                                                             SurfaceFormat aFormat) const;
    95   virtual TemporaryRef<SourceSurface> OptimizeSourceSurface(SourceSurface *aSurface) const;
    96   virtual TemporaryRef<SourceSurface>
    97     CreateSourceSurfaceFromNativeSurface(const NativeSurface &aSurface) const;
    98   virtual TemporaryRef<DrawTarget>
    99     CreateSimilarDrawTarget(const IntSize &aSize, SurfaceFormat aFormat) const;
   100   virtual TemporaryRef<PathBuilder> CreatePathBuilder(FillRule aFillRule = FillRule::FILL_WINDING) const;
   101   virtual TemporaryRef<GradientStops> CreateGradientStops(GradientStop *aStops, uint32_t aNumStops, ExtendMode aExtendMode = ExtendMode::CLAMP) const;
   102   virtual TemporaryRef<FilterNode> CreateFilter(FilterType aType);
   103   virtual void SetTransform(const Matrix &aTransform);
   104   virtual void *GetNativeSurface(NativeSurfaceType aType);
   106   bool Init(const IntSize &aSize, SurfaceFormat aFormat);
   107   void Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat);
   109 #ifdef USE_SKIA_GPU
   110   bool InitWithGrContext(GrContext* aGrContext,
   111                          const IntSize &aSize,
   112                          SurfaceFormat aFormat) MOZ_OVERRIDE;
   113 #endif
   115   operator std::string() const {
   116     std::stringstream stream;
   117     stream << "DrawTargetSkia(" << this << ")";
   118     return stream.str();
   119   }
   121 private:
   122   friend class SourceSurfaceSkia;
   123   void SnapshotDestroyed();
   125   void MarkChanged();
   127   SkRect SkRectCoveringWholeSurface() const;
   129 #ifdef USE_SKIA_GPU
   130   SkRefPtr<GrContext> mGrContext;
   131   uint32_t mTexture;
   132 #endif
   134   IntSize mSize;
   135   SkRefPtr<SkCanvas> mCanvas;
   136   SourceSurfaceSkia* mSnapshot;
   137 };
   139 }
   140 }
   142 #endif // _MOZILLA_GFX_SOURCESURFACESKIA_H

mercurial