Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/image/SurfacePipe.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
/**
8
 * A SurfacePipe is a pipeline that consists of a series of SurfaceFilters
9
 * terminating in a SurfaceSink. Each SurfaceFilter transforms the image data in
10
 * some way before the SurfaceSink ultimately writes it to the surface. This
11
 * design allows for each transformation to be tested independently, for the
12
 * transformations to be combined as needed to meet the needs of different
13
 * situations, and for all image decoders to share the same code for these
14
 * transformations.
15
 *
16
 * Writing to the SurfacePipe is done using lambdas that act as generator
17
 * functions. Because the SurfacePipe machinery controls where the writes take
18
 * place, a bug in an image decoder cannot cause a buffer overflow of the
19
 * underlying surface.
20
 */
21
22
#ifndef mozilla_image_SurfacePipe_h
23
#define mozilla_image_SurfacePipe_h
24
25
#include <stdint.h>
26
27
#include "nsDebug.h"
28
29
#include "mozilla/Likely.h"
30
#include "mozilla/Maybe.h"
31
#include "mozilla/Move.h"
32
#include "mozilla/Tuple.h"
33
#include "mozilla/UniquePtr.h"
34
#include "mozilla/Unused.h"
35
#include "mozilla/Variant.h"
36
#include "mozilla/gfx/2D.h"
37
38
#include "AnimationParams.h"
39
40
namespace mozilla {
41
namespace image {
42
43
class Decoder;
44
45
/**
46
 * An invalid rect for a surface. Results are given both in the space of the
47
 * input image (i.e., before any SurfaceFilters are applied) and in the space
48
 * of the output surface (after all SurfaceFilters).
49
 */
50
struct SurfaceInvalidRect
51
{
52
  gfx::IntRect mInputSpaceRect;   /// The invalid rect in pre-SurfacePipe space.
53
  gfx::IntRect mOutputSpaceRect;  /// The invalid rect in post-SurfacePipe space.
54
};
55
56
/**
57
 * An enum used to allow the lambdas passed to WritePixels() to communicate
58
 * their state to the caller.
59
 */
60
enum class WriteState : uint8_t
61
{
62
  NEED_MORE_DATA,  /// The lambda ran out of data.
63
64
  FINISHED,        /// The lambda is done writing to the surface; future writes
65
                   /// will fail.
66
67
  FAILURE          /// The lambda encountered an error. The caller may recover
68
                   /// if possible and continue to write. (This never indicates
69
                   /// an error in the SurfacePipe machinery itself; it's only
70
                   /// generated by the lambdas.)
71
};
72
73
/**
74
 * A template alias used to make the return value of WritePixels() lambdas
75
 * (which may return either a pixel value or a WriteState) easier to specify.
76
 */
77
template <typename PixelType>
78
using NextPixel = Variant<PixelType, WriteState>;
79
80
/**
81
 * SurfaceFilter is the abstract superclass of SurfacePipe pipeline stages.  It
82
 * implements the the code that actually writes to the surface - WritePixels()
83
 * and the other Write*() methods - which are non-virtual for efficiency.
84
 *
85
 * SurfaceFilter's API is nonpublic; only SurfacePipe and other SurfaceFilters
86
 * should use it. Non-SurfacePipe code should use the methods on SurfacePipe.
87
 *
88
 * To implement a SurfaceFilter, it's necessary to subclass SurfaceFilter and
89
 * implement, at a minimum, the pure virtual methods. It's also necessary to
90
 * define a Config struct with a Filter typedef member that identifies the
91
 * matching SurfaceFilter class, and a Configure() template method. See an
92
 * existing SurfaceFilter subclass, such as RemoveFrameRectFilter, for an
93
 * example of how the Configure() method must be implemented. It takes a list of
94
 * Config structs, passes the tail of the list to the next filter in the chain's
95
 * Configure() method, and then uses the head of the list to configure itself. A
96
 * SurfaceFilter's Configure() method must also call
97
 * SurfaceFilter::ConfigureFilter() to provide the Write*() methods with the
98
 * information they need to do their jobs.
99
 */
100
class SurfaceFilter
101
{
102
public:
103
  SurfaceFilter()
104
    : mRowPointer(nullptr)
105
    , mCol(0)
106
    , mPixelSize(0)
107
0
  { }
108
109
0
  virtual ~SurfaceFilter() { }
110
111
  /**
112
   * Reset this surface to the first row. It's legal for this filter to throw
113
   * away any previously written data at this point, as all rows must be written
114
   * to on every pass.
115
   *
116
   * @return a pointer to the buffer for the first row.
117
   */
118
  uint8_t* ResetToFirstRow()
119
0
  {
120
0
    mCol = 0;
121
0
    mRowPointer = DoResetToFirstRow();
122
0
    return mRowPointer;
123
0
  }
124
125
  /**
126
   * Called by WritePixels() to advance this filter to the next row.
127
   *
128
   * @return a pointer to the buffer for the next row, or nullptr to indicate
129
   *         that we've finished the entire surface.
130
   */
131
  uint8_t* AdvanceRow()
132
0
  {
133
0
    mCol = 0;
134
0
    mRowPointer = DoAdvanceRow();
135
0
    return mRowPointer;
136
0
  }
137
138
  /// @return a pointer to the buffer for the current row.
139
0
  uint8_t* CurrentRowPointer() const { return mRowPointer; }
140
141
  /// @return true if we've finished writing to the surface.
142
0
  bool IsSurfaceFinished() const { return mRowPointer == nullptr; }
143
144
  /// @return the input size this filter expects.
145
0
  gfx::IntSize InputSize() const { return mInputSize; }
146
147
  /**
148
   * Write pixels to the surface one at a time by repeatedly calling a lambda
149
   * that yields pixels. WritePixels() is completely memory safe.
150
   *
151
   * Writing continues until every pixel in the surface has been written to
152
   * (i.e., IsSurfaceFinished() returns true) or the lambda returns a WriteState
153
   * which WritePixels() will return to the caller.
154
   *
155
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
156
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
157
   * size passed to ConfigureFilter().
158
   *
159
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
160
   * which means we can remove the PixelType template parameter from this
161
   * method.
162
   *
163
   * @param aFunc A lambda that functions as a generator, yielding the next
164
   *              pixel in the surface each time it's called. The lambda must
165
   *              return a NextPixel<PixelType> value.
166
   *
167
   * @return A WriteState value indicating the lambda generator's state.
168
   *         WritePixels() itself will return WriteState::FINISHED if writing
169
   *         has finished, regardless of the lambda's internal state.
170
   */
171
  template <typename PixelType, typename Func>
172
  WriteState WritePixels(Func aFunc)
173
0
  {
174
0
    Maybe<WriteState> result;
175
0
    while (!(result = DoWritePixelsToRow<PixelType>(std::forward<Func>(aFunc)))) { }
176
0
177
0
    return *result;
178
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()::{lambda()#1}>(void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()::{lambda()#1}>(void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6>(mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_85::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_85::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_86::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_86::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_87::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_87::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_0>(mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_0)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_1>(mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_1)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_2>(mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_2)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_3>(mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_14::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_14::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_15::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_15::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_16::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_16::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_18::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_18::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_19::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_19::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_20::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_20::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_21::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_21::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_22::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_22::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_23::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_23::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_24::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_24::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_25::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_25::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageBlendAnimationFilter_PartialOverlapFrameRect_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_PartialOverlapFrameRect_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDeinterlacingFilter_WritePixelsNonProgressiveOutput51_52_Test::TestBody()::$_41::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsNonProgressiveOutput51_52_Test::TestBody()::$_41::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput20_20_Test::TestBody()::$_42::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput20_20_Test::TestBody()::$_42::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput7_7_Test::TestBody()::$_43::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput7_7_Test::TestBody()::$_43::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput3_3_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput3_3_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput1_1_Test::TestBody()::$_45::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput1_1_Test::TestBody()::$_45::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, WriteRowAndCheckInterlacerOutput(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::image::BGRAColor, mozilla::image::WriteState, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits>, unsigned int, unsigned int)::$_46>(WriteRowAndCheckInterlacerOutput(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::image::BGRAColor, mozilla::image::WriteState, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits>, unsigned int, unsigned int)::$_46)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDownscalingFilter_WritePixelsOutput100_100to20_20_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDownscalingFilter_WritePixelsOutput100_100to20_20_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageDownscalingFilter_WritePixelsOutput100_100to10_20_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDownscalingFilter_WritePixelsOutput100_100to10_20_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0>(CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1>(CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkWriteEmptyRow_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWriteEmptyRow_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#4}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#4})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#5}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#5})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#6}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#6})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixels<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWriteEmptyRow_Test::TestBody()::$_53::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWriteEmptyRow_Test::TestBody()::$_53::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
179
180
  /**
181
   * Write pixels to the surface by calling a lambda which may write as many
182
   * pixels as there is remaining to complete the row. It is not completely
183
   * memory safe as it trusts the underlying decoder not to overrun the given
184
   * buffer, however it is an acceptable tradeoff for performance.
185
   *
186
   * Writing continues until every pixel in the surface has been written to
187
   * (i.e., IsSurfaceFinished() returns true) or the lambda returns a WriteState
188
   * which WritePixelBlocks() will return to the caller.
189
   *
190
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
191
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
192
   * size passed to ConfigureFilter().
193
   *
194
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
195
   * which means we can remove the PixelType template parameter from this
196
   * method.
197
   *
198
   * @param aFunc A lambda that functions as a generator, yielding at most the
199
   *              maximum number of pixels requested. The lambda must accept a
200
   *              pointer argument to the first pixel to write, a maximum
201
   *              number of pixels to write as part of the block, and return a
202
   *              NextPixel<PixelType> value.
203
   *
204
   * @return A WriteState value indicating the lambda generator's state.
205
   *         WritePixelBlocks() itself will return WriteState::FINISHED if
206
   *         writing has finished, regardless of the lambda's internal state.
207
   */
208
  template <typename PixelType, typename Func>
209
  WriteState WritePixelBlocks(Func aFunc)
210
0
  {
211
0
    Maybe<WriteState> result;
212
0
    while (!(result = DoWritePixelBlockToRow<PixelType>(std::forward<Func>(aFunc)))) { }
213
0
214
0
    return *result;
215
0
  }
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned char, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelBlocks<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#3}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#3})
216
217
  /**
218
   * A variant of WritePixels() that writes a single row of pixels to the
219
   * surface one at a time by repeatedly calling a lambda that yields pixels.
220
   * WritePixelsToRow() is completely memory safe.
221
   *
222
   * Writing continues until every pixel in the row has been written to. If the
223
   * surface is complete at that pointer, WriteState::FINISHED is returned;
224
   * otherwise, WritePixelsToRow() returns WriteState::NEED_MORE_DATA. The
225
   * lambda can terminate writing early by returning a WriteState itself, which
226
   * WritePixelsToRow() will return to the caller.
227
   *
228
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
229
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
230
   * size passed to ConfigureFilter().
231
   *
232
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
233
   * which means we can remove the PixelType template parameter from this
234
   * method.
235
   *
236
   * @param aFunc A lambda that functions as a generator, yielding the next
237
   *              pixel in the surface each time it's called. The lambda must
238
   *              return a NextPixel<PixelType> value.
239
   *
240
   * @return A WriteState value indicating the lambda generator's state.
241
   *         WritePixels() itself will return WriteState::FINISHED if writing
242
   *         the entire surface has finished, or WriteState::NEED_MORE_DATA if
243
   *         writing the row has finished, regardless of the lambda's internal
244
   *         state.
245
   */
246
  template <typename PixelType, typename Func>
247
  WriteState WritePixelsToRow(Func aFunc)
248
0
  {
249
0
    return DoWritePixelsToRow<PixelType>(std::forward<Func>(aFunc))
250
0
           .valueOr(WriteState::NEED_MORE_DATA);
251
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::BlendAnimationFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::BlendAnimationFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::SurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::SurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, WriteUninterpolatedPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_6>(WriteUninterpolatedPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_6)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, WriteRowColorPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_8>(WriteRowColorPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_8)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::PalettedSurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::PalettedSurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
252
253
  /**
254
   * Write a row to the surface by copying from a buffer. This is bounds checked
255
   * and memory safe with respect to the surface, but care must still be taken
256
   * by the caller not to overread the source buffer. This variant of
257
   * WriteBuffer() requires a source buffer which contains |mInputSize.width|
258
   * pixels.
259
   *
260
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
261
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
262
   * size passed to ConfigureFilter().
263
   *
264
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
265
   * which means we can remove the PixelType template parameter from this
266
   * method.
267
   *
268
   * @param aSource A buffer to copy from. This buffer must be
269
   *                |mInputSize.width| pixels wide,  which means
270
   *                |mInputSize.width * sizeof(PixelType)| bytes. May not be
271
   *                null.
272
   *
273
   * @return WriteState::FINISHED if the entire surface has been written to.
274
   *         Otherwise, returns WriteState::NEED_MORE_DATA. If a null |aSource|
275
   *         value is passed, returns WriteState::FAILURE.
276
   */
277
  template <typename PixelType>
278
  WriteState WriteBuffer(const PixelType* aSource)
279
0
  {
280
0
    return WriteBuffer(aSource, 0, mInputSize.width);
281
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteBuffer<unsigned int>(unsigned int const*)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteBuffer<unsigned char>(unsigned char const*)
282
283
  /**
284
   * Write a row to the surface by copying from a buffer. This is bounds checked
285
   * and memory safe with respect to the surface, but care must still be taken
286
   * by the caller not to overread the source buffer. This variant of
287
   * WriteBuffer() reads at most @aLength pixels from the buffer and writes them
288
   * to the row starting at @aStartColumn. Any pixels in columns before
289
   * @aStartColumn or after the pixels copied from the buffer are cleared.
290
   *
291
   * Bounds checking failures produce warnings in debug builds because although
292
   * the bounds checking maintains safety, this kind of failure could indicate a
293
   * bug in the calling code.
294
   *
295
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
296
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
297
   * size passed to ConfigureFilter().
298
   *
299
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
300
   * which means we can remove the PixelType template parameter from this
301
   * method.
302
   *
303
   * @param aSource A buffer to copy from. This buffer must be @aLength pixels
304
   *                wide, which means |aLength * sizeof(PixelType)| bytes. May
305
   *                not be null.
306
   * @param aStartColumn The column to start writing to in the row. Columns
307
   *                     before this are cleared.
308
   * @param aLength The number of bytes, at most, which may be copied from
309
   *                @aSource. Fewer bytes may be copied in practice due to
310
   *                bounds checking.
311
   *
312
   * @return WriteState::FINISHED if the entire surface has been written to.
313
   *         Otherwise, returns WriteState::NEED_MORE_DATA. If a null |aSource|
314
   *         value is passed, returns WriteState::FAILURE.
315
   */
316
  template <typename PixelType>
317
  WriteState WriteBuffer(const PixelType* aSource,
318
                         const size_t aStartColumn,
319
                         const size_t aLength)
320
0
  {
321
0
    MOZ_ASSERT(mPixelSize == 1 || mPixelSize == 4);
322
0
    MOZ_ASSERT_IF(mPixelSize == 1, sizeof(PixelType) == sizeof(uint8_t));
323
0
    MOZ_ASSERT_IF(mPixelSize == 4, sizeof(PixelType) == sizeof(uint32_t));
324
0
325
0
    if (IsSurfaceFinished()) {
326
0
      return WriteState::FINISHED;  // Already done.
327
0
    }
328
0
329
0
    if (MOZ_UNLIKELY(!aSource)) {
330
0
      NS_WARNING("Passed a null pointer to WriteBuffer");
331
0
      return WriteState::FAILURE;
332
0
    }
333
0
334
0
    PixelType* dest = reinterpret_cast<PixelType*>(mRowPointer);
335
0
336
0
    // Clear the area before |aStartColumn|.
337
0
    const size_t prefixLength = std::min<size_t>(mInputSize.width, aStartColumn);
338
0
    if (MOZ_UNLIKELY(prefixLength != aStartColumn)) {
339
0
      NS_WARNING("Provided starting column is out-of-bounds in WriteBuffer");
340
0
    }
341
0
342
0
    memset(dest, 0, mInputSize.width * sizeof(PixelType));
343
0
    dest += prefixLength;
344
0
345
0
    // Write |aLength| pixels from |aSource| into the row, with bounds checking.
346
0
    const size_t bufferLength =
347
0
      std::min<size_t>(mInputSize.width - prefixLength, aLength);
348
0
    if (MOZ_UNLIKELY(bufferLength != aLength)) {
349
0
      NS_WARNING("Provided buffer length is out-of-bounds in WriteBuffer");
350
0
    }
351
0
352
0
    memcpy(dest, aSource, bufferLength * sizeof(PixelType));
353
0
    dest += bufferLength;
354
0
355
0
    // Clear the rest of the row.
356
0
    const size_t suffixLength = mInputSize.width - (prefixLength + bufferLength);
357
0
    memset(dest, 0, suffixLength * sizeof(PixelType));
358
0
359
0
    AdvanceRow();
360
0
361
0
    return IsSurfaceFinished() ? WriteState::FINISHED
362
0
                               : WriteState::NEED_MORE_DATA;
363
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteBuffer<unsigned int>(unsigned int const*, unsigned long, unsigned long)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteBuffer<unsigned char>(unsigned char const*, unsigned long, unsigned long)
364
365
  /**
366
   * Write an empty row to the surface. If some pixels have already been written
367
   * to this row, they'll be discarded.
368
   *
369
   * @return WriteState::FINISHED if the entire surface has been written to.
370
   *         Otherwise, returns WriteState::NEED_MORE_DATA.
371
   */
372
  WriteState WriteEmptyRow()
373
0
  {
374
0
    if (IsSurfaceFinished()) {
375
0
      return WriteState::FINISHED;  // Already done.
376
0
    }
377
0
378
0
    memset(mRowPointer, 0, mInputSize.width * mPixelSize);
379
0
    AdvanceRow();
380
0
381
0
    return IsSurfaceFinished() ? WriteState::FINISHED
382
0
                               : WriteState::NEED_MORE_DATA;
383
0
  }
384
385
  /**
386
   * Write a row to the surface by calling a lambda that uses a pointer to
387
   * directly write to the row. This is unsafe because SurfaceFilter can't
388
   * provide any bounds checking; that's up to the lambda itself. For this
389
   * reason, the other Write*() methods should be preferred whenever it's
390
   * possible to use them; WriteUnsafeComputedRow() should be used only when
391
   * it's absolutely necessary to avoid extra copies or other performance
392
   * penalties.
393
   *
394
   * This method should never be exposed to SurfacePipe consumers; it's strictly
395
   * for use in SurfaceFilters. If external code needs this method, it should
396
   * probably be turned into a SurfaceFilter.
397
   *
398
   * The template parameter PixelType must be uint8_t (for paletted surfaces) or
399
   * uint32_t (for BGRA/BGRX surfaces) and must be in agreement with the pixel
400
   * size passed to ConfigureFilter().
401
   *
402
   * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
403
   * which means we can remove the PixelType template parameter from this
404
   * method.
405
   *
406
   * @param aFunc A lambda that writes directly to the row.
407
   *
408
   * @return WriteState::FINISHED if the entire surface has been written to.
409
   *         Otherwise, returns WriteState::NEED_MORE_DATA.
410
   */
411
  template <typename PixelType, typename Func>
412
  WriteState WriteUnsafeComputedRow(Func aFunc)
413
0
  {
414
0
    MOZ_ASSERT(mPixelSize == 1 || mPixelSize == 4);
415
0
    MOZ_ASSERT_IF(mPixelSize == 1, sizeof(PixelType) == sizeof(uint8_t));
416
0
    MOZ_ASSERT_IF(mPixelSize == 4, sizeof(PixelType) == sizeof(uint32_t));
417
0
418
0
    if (IsSurfaceFinished()) {
419
0
      return WriteState::FINISHED;  // Already done.
420
0
    }
421
0
422
0
    // Call the provided lambda with a pointer to the buffer for the current
423
0
    // row. This is unsafe because we can't do any bounds checking; the lambda
424
0
    // itself has to be responsible for that.
425
0
    PixelType* rowPtr = reinterpret_cast<PixelType*>(mRowPointer);
426
0
    aFunc(rowPtr, mInputSize.width);
427
0
    AdvanceRow();
428
0
429
0
    return IsSurfaceFinished() ? WriteState::FINISHED
430
0
                               : WriteState::NEED_MORE_DATA;
431
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteUnsafeComputedRow<unsigned int, mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink>::DownscaleInputRow()::{lambda(unsigned int*, unsigned int)#1}>(mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink>::DownscaleInputRow()::{lambda(unsigned int*, unsigned int)#1})
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteUnsafeComputedRow<unsigned int, mozilla::image::DownscalingFilter<mozilla::image::PalettedSurfaceSink>::DownscaleInputRow()::{lambda(unsigned int*, unsigned int)#1}>(mozilla::image::DownscalingFilter<mozilla::image::PalettedSurfaceSink>::DownscaleInputRow()::{lambda(unsigned int*, unsigned int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteUnsafeComputedRow<unsigned int, ImageSurfaceSink_SurfaceSinkWriteUnsafeComputedRow_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}::operator()() const::{lambda(unsigned int*, unsigned int)#1}>(ImageSurfaceSink_SurfaceSinkWriteUnsafeComputedRow_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}::operator()() const::{lambda(unsigned int*, unsigned int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfaceFilter::WriteUnsafeComputedRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWriteUnsafeComputedRow_Test::TestBody()::$_54::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}::operator()() const::{lambda(unsigned char*, unsigned int)#1}>(ImageSurfaceSink_PalettedSurfaceSinkWriteUnsafeComputedRow_Test::TestBody()::$_54::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}::operator()() const::{lambda(unsigned char*, unsigned int)#1})
432
433
  //////////////////////////////////////////////////////////////////////////////
434
  // Methods Subclasses Should Override
435
  //////////////////////////////////////////////////////////////////////////////
436
437
  /// @return true if this SurfaceFilter can be used with paletted surfaces.
438
0
  virtual bool IsValidPalettedPipe() const { return false; }
439
440
  /**
441
   * @return a SurfaceInvalidRect representing the region of the surface that
442
   *         has been written to since the last time TakeInvalidRect() was
443
   *         called, or Nothing() if the region is empty (i.e. nothing has been
444
   *         written).
445
   */
446
  virtual Maybe<SurfaceInvalidRect> TakeInvalidRect() = 0;
447
448
protected:
449
450
  /**
451
   * Called by ResetToFirstRow() to actually perform the reset. It's legal to
452
   * throw away any previously written data at this point, as all rows must be
453
   * written to on every pass.
454
   */
455
  virtual uint8_t* DoResetToFirstRow() = 0;
456
457
  /**
458
   * Called by AdvanceRow() to actually advance this filter to the next row.
459
   *
460
   * @return a pointer to the buffer for the next row, or nullptr to indicate
461
   *         that we've finished the entire surface.
462
   */
463
  virtual uint8_t* DoAdvanceRow() = 0;
464
465
466
  //////////////////////////////////////////////////////////////////////////////
467
  // Methods For Internal Use By Subclasses
468
  //////////////////////////////////////////////////////////////////////////////
469
470
  /**
471
   * Called by subclasses' Configure() methods to initialize the configuration
472
   * of this filter. After the filter is configured, calls ResetToFirstRow().
473
   *
474
   * @param aInputSize The input size of this filter, in pixels. The previous
475
   *                   filter in the chain will expect to write into rows
476
   *                   |aInputSize.width| pixels wide.
477
   * @param aPixelSize How large, in bytes, each pixel in the surface is. This
478
   *                   should be either 1 for paletted images or 4 for BGRA/BGRX
479
   *                   images.
480
   */
481
  void ConfigureFilter(gfx::IntSize aInputSize, uint8_t aPixelSize)
482
0
  {
483
0
    mInputSize = aInputSize;
484
0
    mPixelSize = aPixelSize;
485
0
486
0
    ResetToFirstRow();
487
0
  }
488
489
private:
490
491
  /**
492
   * An internal method used to implement WritePixelBlocks. This method writes
493
   * up to the number of pixels necessary to complete the row and returns Some()
494
   * if we either finished the entire surface or the lambda returned a
495
   * WriteState indicating that we should return to the caller. If the row was
496
   * successfully written without either of those things happening, it returns
497
   * Nothing(), allowing WritePixelBlocks() to iterate to fill as many rows as
498
   * possible.
499
   */
500
  template <typename PixelType, typename Func>
501
  Maybe<WriteState> DoWritePixelBlockToRow(Func aFunc)
502
0
  {
503
0
    MOZ_ASSERT(mPixelSize == 1 || mPixelSize == 4);
504
0
    MOZ_ASSERT_IF(mPixelSize == 1, sizeof(PixelType) == sizeof(uint8_t));
505
0
    MOZ_ASSERT_IF(mPixelSize == 4, sizeof(PixelType) == sizeof(uint32_t));
506
0
507
0
    if (IsSurfaceFinished()) {
508
0
      return Some(WriteState::FINISHED);  // We're already done.
509
0
    }
510
0
511
0
    PixelType* rowPtr = reinterpret_cast<PixelType*>(mRowPointer);
512
0
    int32_t remainder = mInputSize.width - mCol;
513
0
    int32_t written;
514
0
    Maybe<WriteState> result;
515
0
    Tie(written, result) = aFunc(&rowPtr[mCol], remainder);
516
0
    if (written == remainder) {
517
0
      MOZ_ASSERT(result.isNothing());
518
0
      mCol = mInputSize.width;
519
0
      AdvanceRow();  // We've finished the row.
520
0
      return IsSurfaceFinished() ? Some(WriteState::FINISHED)
521
0
                                 : Nothing();
522
0
    }
523
0
524
0
    MOZ_ASSERT(written >= 0 && written < remainder);
525
0
    MOZ_ASSERT(result.isSome());
526
0
527
0
    mCol += written;
528
0
    if (*result == WriteState::FINISHED) {
529
0
      ZeroOutRestOfSurface<PixelType>();
530
0
    }
531
0
532
0
    return result;
533
0
  }
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned char, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocks_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelBlockToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#3}>(ImageSurfaceSink_SurfaceSinkWritePixelBlocksPartialRow_Test::TestBody()::$_29::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda(unsigned int*, int)#3})
534
535
  /**
536
   * An internal method used to implement both WritePixels() and
537
   * WritePixelsToRow(). Those methods differ only in their behavior after a row
538
   * is successfully written - WritePixels() continues to write another row,
539
   * while WritePixelsToRow() returns to the caller. This method writes a single
540
   * row and returns Some() if we either finished the entire surface or the
541
   * lambda returned a WriteState indicating that we should return to the
542
   * caller. If the row was successfully written without either of those things
543
   * happening, it returns Nothing(), allowing WritePixels() and
544
   * WritePixelsToRow() to implement their respective behaviors.
545
   */
546
  template <typename PixelType, typename Func>
547
  Maybe<WriteState> DoWritePixelsToRow(Func aFunc)
548
0
  {
549
0
    MOZ_ASSERT(mPixelSize == 1 || mPixelSize == 4);
550
0
    MOZ_ASSERT_IF(mPixelSize == 1, sizeof(PixelType) == sizeof(uint8_t));
551
0
    MOZ_ASSERT_IF(mPixelSize == 4, sizeof(PixelType) == sizeof(uint32_t));
552
0
553
0
    if (IsSurfaceFinished()) {
554
0
      return Some(WriteState::FINISHED);  // We're already done.
555
0
    }
556
0
557
0
    PixelType* rowPtr = reinterpret_cast<PixelType*>(mRowPointer);
558
0
559
0
    for (; mCol < mInputSize.width; ++mCol) {
560
0
      NextPixel<PixelType> result = aFunc();
561
0
      if (result.template is<PixelType>()) {
562
0
        rowPtr[mCol] = result.template as<PixelType>();
563
0
        continue;
564
0
      }
565
0
566
0
      switch (result.template as<WriteState>()) {
567
0
        case WriteState::NEED_MORE_DATA:
568
0
          return Some(WriteState::NEED_MORE_DATA);
569
0
570
0
        case WriteState::FINISHED:
571
0
          ZeroOutRestOfSurface<PixelType>();
572
0
          return Some(WriteState::FINISHED);
573
0
574
0
        case WriteState::FAILURE:
575
0
          // Note that we don't need to record this anywhere, because this
576
0
          // indicates an error in aFunc, and there's nothing wrong with our
577
0
          // machinery. The caller can recover as needed and continue writing to
578
0
          // the row.
579
0
          return Some(WriteState::FAILURE);
580
0
      }
581
0
    }
582
0
583
0
    AdvanceRow();  // We've finished the row.
584
0
585
0
    return IsSurfaceFinished() ? Some(WriteState::FINISHED)
586
0
                               : Nothing();
587
0
  }
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()::{lambda()#1}>(void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::BlendAnimationFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::BlendAnimationFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::SurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::SurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()::{lambda()#1}>(void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6>(mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11)
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::RemoveFrameRectFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> > >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::DownscalingFilterNoSkia<mozilla::image::SurfaceSink> >::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_85::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_85::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_86::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_86::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_87::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(TestWithBlendAnimationFilterClear(mozilla::image::BlendMethod)::$_87::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_0>(mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_0)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_1>(mozilla::image::CheckWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_1)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_2>(mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_2)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_3>(mozilla::image::CheckPalettedWritePixels(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> > const&, unsigned char)::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, WriteUninterpolatedPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_6>(WriteUninterpolatedPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_6)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, WriteRowColorPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_8>(WriteRowColorPixels(mozilla::image::SurfaceFilter*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> const&, unsigned char, std::__1::vector<mozilla::image::BGRAColor, std::__1::allocator<mozilla::image::BGRAColor> > const&)::$_8)
Unexecuted instantiation: mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, mozilla::image::ADAM7InterpolatingFilter<mozilla::image::PalettedSurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1}>(mozilla::image::ADAM7InterpolatingFilter<mozilla::image::PalettedSurfaceSink>::InterpolateVertically(unsigned char*, unsigned char*, unsigned char, mozilla::image::SurfaceFilter&)::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_14::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_14::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_15::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithSource_Test::TestBody()::$_15::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_16::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_16::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_KeepWithOver_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_18::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_18::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_19::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_19::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_20::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithOver_Test::TestBody()::$_20::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_21::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_21::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_22::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_22::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_23::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousWithSource_Test::TestBody()::$_23::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_24::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_24::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_25::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_25::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_RestorePreviousClearWithSource_Test::TestBody()::$_27::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageBlendAnimationFilter_PartialOverlapFrameRect_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageBlendAnimationFilter_PartialOverlapFrameRect_Test::TestBody()::$_28::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDeinterlacingFilter_WritePixelsNonProgressiveOutput51_52_Test::TestBody()::$_41::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsNonProgressiveOutput51_52_Test::TestBody()::$_41::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput20_20_Test::TestBody()::$_42::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput20_20_Test::TestBody()::$_42::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput7_7_Test::TestBody()::$_43::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput7_7_Test::TestBody()::$_43::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput3_3_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput3_3_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDeinterlacingFilter_WritePixelsOutput1_1_Test::TestBody()::$_45::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDeinterlacingFilter_WritePixelsOutput1_1_Test::TestBody()::$_45::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, WriteRowAndCheckInterlacerOutput(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::image::BGRAColor, mozilla::image::WriteState, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits>, unsigned int, unsigned int)::$_46>(WriteRowAndCheckInterlacerOutput(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*, mozilla::image::BGRAColor, mozilla::image::WriteState, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits>, unsigned int, unsigned int)::$_46)
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDownscalingFilter_WritePixelsOutput100_100to20_20_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDownscalingFilter_WritePixelsOutput100_100to20_20_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest0.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageDownscalingFilter_WritePixelsOutput100_100to10_20_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1}>(ImageDownscalingFilter_WritePixelsOutput100_100to10_20_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceFilter*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0>(CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1>(CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsFinish_Test::TestBody()::$_13::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_55::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRow_Test::TestBody()::$_17::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_56::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkWriteEmptyRow_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkWriteEmptyRow_Test::TestBody()::$_26::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkProgressivePasses_Test::TestBody()::$_30::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#4}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#4})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#5}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#5})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#6}>(ImageSurfaceSink_SurfaceSinkInvalidRect_Test::TestBody()::$_31::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#6})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned int, ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_SurfaceSinkFlipVertically_Test::TestBody()::$_32::operator()(mozilla::image::Decoder*, mozilla::image::SurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsFinish_Test::TestBody()::$_40::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsEarlyExit_Test::TestBody()::$_57::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRow_Test::TestBody()::$_44::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#1})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#2})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3}>(ImageSurfaceSink_PalettedSurfaceSinkWritePixelsToRowEarlyExit_Test::TestBody()::$_58::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*, mozilla::image::WriteState) const::{lambda()#3})
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::Maybe<mozilla::image::WriteState> mozilla::image::SurfaceFilter::DoWritePixelsToRow<unsigned char, ImageSurfaceSink_PalettedSurfaceSinkWriteEmptyRow_Test::TestBody()::$_53::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2}>(ImageSurfaceSink_PalettedSurfaceSinkWriteEmptyRow_Test::TestBody()::$_53::operator()(mozilla::image::Decoder*, mozilla::image::PalettedSurfaceSink*) const::{lambda()#2})
588
589
  template <typename PixelType>
590
  void ZeroOutRestOfSurface()
591
0
  {
592
0
    WritePixels<PixelType>([]{ return AsVariant(PixelType(0)); });
Unexecuted instantiation: void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()::{lambda()#1}::operator()() const
Unexecuted instantiation: void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()::{lambda()#1}::operator()() const
593
0
  }
Unexecuted instantiation: void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned int>()
Unexecuted instantiation: void mozilla::image::SurfaceFilter::ZeroOutRestOfSurface<unsigned char>()
594
595
  gfx::IntSize mInputSize;  /// The size of the input this filter expects.
596
  uint8_t* mRowPointer;     /// Pointer to the current row or null if finished.
597
  int32_t mCol;             /// The current column we're writing to. (0-indexed)
598
  uint8_t  mPixelSize;      /// How large each pixel in the surface is, in bytes.
599
};
600
601
/**
602
 * SurfacePipe is the public API that decoders should use to interact with a
603
 * SurfaceFilter pipeline.
604
 */
605
class SurfacePipe
606
{
607
public:
608
  SurfacePipe()
609
0
  { }
610
611
  SurfacePipe(SurfacePipe&& aOther)
612
    : mHead(std::move(aOther.mHead))
613
0
  { }
614
615
  ~SurfacePipe()
616
0
  { }
617
618
  SurfacePipe& operator=(SurfacePipe&& aOther)
619
0
  {
620
0
    MOZ_ASSERT(this != &aOther);
621
0
    mHead = std::move(aOther.mHead);
622
0
    return *this;
623
0
  }
624
625
  /// Begins a new pass, seeking to the first row of the surface.
626
  void ResetToFirstRow()
627
0
  {
628
0
    MOZ_ASSERT(mHead, "Use before configured!");
629
0
    mHead->ResetToFirstRow();
630
0
  }
631
632
  /**
633
   * Write pixels to the surface one at a time by repeatedly calling a lambda
634
   * that yields pixels. WritePixels() is completely memory safe.
635
   *
636
   * @see SurfaceFilter::WritePixels() for the canonical documentation.
637
   */
638
  template <typename PixelType, typename Func>
639
  WriteState WritePixels(Func aFunc)
640
0
  {
641
0
    MOZ_ASSERT(mHead, "Use before configured!");
642
0
    return mHead->WritePixels<PixelType>(std::forward<Func>(aFunc));
643
0
  }
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixels<unsigned int, mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6>(mozilla::image::nsIconDecoder::ReadRowOfPixels(char const*, unsigned long)::$_6)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixels<unsigned int, CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0>(CheckSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_0)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixels<unsigned char, CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1>(CheckPalettedSurfacePipeMethodResults(mozilla::image::SurfacePipe*, mozilla::image::Decoder*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&)::$_1)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixels<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_2)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixels<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_4)
644
645
  /**
646
   * A variant of WritePixels() that writes up to a single row of pixels to the
647
   * surface in blocks by repeatedly calling a lambda that yields up to the
648
   * requested number of pixels.
649
   *
650
   * @see SurfaceFilter::WritePixelBlocks() for the canonical documentation.
651
   */
652
  template <typename PixelType, typename Func>
653
  WriteState WritePixelBlocks(Func aFunc)
654
0
  {
655
0
    MOZ_ASSERT(mHead, "Use before configured!");
656
0
    return mHead->WritePixelBlocks<PixelType>(std::forward<Func>(aFunc));
657
0
  }
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelBlocks<unsigned int, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_2)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelBlocks<unsigned char, mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3>(mozilla::image::nsGIFDecoder2::ReadLZWData(char const*, unsigned long)::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelBlocks<unsigned int, ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3>(ImageSurfacePipeIntegration_SurfacePipe_Test::TestBody()::$_3)
Unexecuted instantiation: Unified_cpp_image_test_gtest1.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelBlocks<unsigned char, ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5>(ImageSurfacePipeIntegration_PalettedSurfacePipe_Test::TestBody()::$_5)
658
659
  /**
660
   * A variant of WritePixels() that writes a single row of pixels to the
661
   * surface one at a time by repeatedly calling a lambda that yields pixels.
662
   * WritePixelsToRow() is completely memory safe.
663
   *
664
   * @see SurfaceFilter::WritePixelsToRow() for the canonical documentation.
665
   */
666
  template <typename PixelType, typename Func>
667
  WriteState WritePixelsToRow(Func aFunc)
668
0
  {
669
0
    MOZ_ASSERT(mHead, "Use before configured!");
670
0
    return mHead->WritePixelsToRow<PixelType>(std::forward<Func>(aFunc));
671
0
  }
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_9)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_10)
Unexecuted instantiation: Unified_cpp_image_decoders0.cpp:mozilla::image::WriteState mozilla::image::SurfacePipe::WritePixelsToRow<unsigned int, mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11>(mozilla::image::nsPNGDecoder::WriteRow(unsigned char*)::$_11)
672
673
  /**
674
   * Write a row to the surface by copying from a buffer. This is bounds checked
675
   * and memory safe with respect to the surface, but care must still be taken
676
   * by the caller not to overread the source buffer. This variant of
677
   * WriteBuffer() requires a source buffer which contains |mInputSize.width|
678
   * pixels.
679
   *
680
   * @see SurfaceFilter::WriteBuffer() for the canonical documentation.
681
   */
682
  template <typename PixelType>
683
  WriteState WriteBuffer(const PixelType* aSource)
684
0
  {
685
0
    MOZ_ASSERT(mHead, "Use before configured!");
686
0
    return mHead->WriteBuffer<PixelType>(aSource);
687
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfacePipe::WriteBuffer<unsigned int>(unsigned int const*)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfacePipe::WriteBuffer<unsigned char>(unsigned char const*)
688
689
  /**
690
   * Write a row to the surface by copying from a buffer. This is bounds checked
691
   * and memory safe with respect to the surface, but care must still be taken
692
   * by the caller not to overread the source buffer. This variant of
693
   * WriteBuffer() reads at most @aLength pixels from the buffer and writes them
694
   * to the row starting at @aStartColumn. Any pixels in columns before
695
   * @aStartColumn or after the pixels copied from the buffer are cleared.
696
   *
697
   * @see SurfaceFilter::WriteBuffer() for the canonical documentation.
698
   */
699
  template <typename PixelType>
700
  WriteState WriteBuffer(const PixelType* aSource,
701
                         const size_t aStartColumn,
702
                         const size_t aLength)
703
0
  {
704
0
    MOZ_ASSERT(mHead, "Use before configured!");
705
0
    return mHead->WriteBuffer<PixelType>(aSource, aStartColumn, aLength);
706
0
  }
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfacePipe::WriteBuffer<unsigned int>(unsigned int const*, unsigned long, unsigned long)
Unexecuted instantiation: mozilla::image::WriteState mozilla::image::SurfacePipe::WriteBuffer<unsigned char>(unsigned char const*, unsigned long, unsigned long)
707
708
  /**
709
   * Write an empty row to the surface. If some pixels have already been written
710
   * to this row, they'll be discarded.
711
   *
712
   * @see SurfaceFilter::WriteEmptyRow() for the canonical documentation.
713
   */
714
  WriteState WriteEmptyRow()
715
0
  {
716
0
    MOZ_ASSERT(mHead, "Use before configured!");
717
0
    return mHead->WriteEmptyRow();
718
0
  }
719
720
  /// @return true if we've finished writing to the surface.
721
0
  bool IsSurfaceFinished() const { return mHead->IsSurfaceFinished(); }
722
723
  /// @see SurfaceFilter::TakeInvalidRect() for the canonical documentation.
724
  Maybe<SurfaceInvalidRect> TakeInvalidRect() const
725
0
  {
726
0
    MOZ_ASSERT(mHead, "Use before configured!");
727
0
    return mHead->TakeInvalidRect();
728
0
  }
729
730
private:
731
  friend class SurfacePipeFactory;
732
  friend class TestSurfacePipeFactory;
733
734
  explicit SurfacePipe(UniquePtr<SurfaceFilter>&& aHead)
735
    : mHead(std::move(aHead))
736
0
  { }
737
738
  SurfacePipe(const SurfacePipe&) = delete;
739
  SurfacePipe& operator=(const SurfacePipe&) = delete;
740
741
  UniquePtr<SurfaceFilter> mHead;  /// The first filter in the chain.
742
};
743
744
/**
745
 * AbstractSurfaceSink contains shared implementation for both SurfaceSink and
746
 * PalettedSurfaceSink.
747
 */
748
class AbstractSurfaceSink : public SurfaceFilter
749
{
750
public:
751
  AbstractSurfaceSink()
752
    : mImageData(nullptr)
753
    , mImageDataLength(0)
754
    , mRow(0)
755
    , mFlipVertically(false)
756
0
  { }
757
758
  Maybe<SurfaceInvalidRect> TakeInvalidRect() final;
759
760
protected:
761
  uint8_t* DoResetToFirstRow() final;
762
  uint8_t* DoAdvanceRow() final;
763
  virtual uint8_t* GetRowPointer() const = 0;
764
765
  gfx::IntRect mInvalidRect;  /// The region of the surface that has been written
766
                              /// to since the last call to TakeInvalidRect().
767
  uint8_t*  mImageData;       /// A pointer to the beginning of the surface data.
768
  uint32_t  mImageDataLength; /// The length of the surface data.
769
  uint32_t  mRow;             /// The row to which we're writing. (0-indexed)
770
  bool      mFlipVertically;  /// If true, write the rows from top to bottom.
771
};
772
773
class SurfaceSink;
774
775
/// A configuration struct for SurfaceSink.
776
struct SurfaceConfig
777
{
778
  using Filter = SurfaceSink;
779
  Decoder* mDecoder;           /// Which Decoder to use to allocate the surface.
780
  gfx::IntSize mOutputSize;    /// The size of the surface.
781
  gfx::SurfaceFormat mFormat;  /// The surface format (BGRA or BGRX).
782
  bool mFlipVertically;        /// If true, write the rows from bottom to top.
783
  Maybe<AnimationParams> mAnimParams; /// Given for animated images.
784
};
785
786
/**
787
 * A sink for normal (i.e., non-paletted) surfaces. It handles the allocation of
788
 * the surface and protects against buffer overflow. This sink should be used
789
 * for all non-animated images and for the first frame of animated images.
790
 *
791
 * Sinks must always be at the end of the SurfaceFilter chain.
792
 */
793
class SurfaceSink final : public AbstractSurfaceSink
794
{
795
public:
796
  nsresult Configure(const SurfaceConfig& aConfig);
797
798
protected:
799
  uint8_t* GetRowPointer() const override;
800
};
801
802
class PalettedSurfaceSink;
803
804
struct PalettedSurfaceConfig
805
{
806
  using Filter = PalettedSurfaceSink;
807
  Decoder* mDecoder;           /// Which Decoder to use to allocate the surface.
808
  gfx::IntSize mOutputSize;    /// The logical size of the surface.
809
  gfx::IntRect mFrameRect;     /// The surface subrect which contains data.
810
  gfx::SurfaceFormat mFormat;  /// The surface format (BGRA or BGRX).
811
  uint8_t mPaletteDepth;       /// The palette depth of this surface.
812
  bool mFlipVertically;        /// If true, write the rows from bottom to top.
813
  Maybe<AnimationParams> mAnimParams; /// Given for animated images.
814
};
815
816
/**
817
 * A sink for paletted surfaces. It handles the allocation of the surface and
818
 * protects against buffer overflow. This sink can be used for frames of
819
 * animated images except the first.
820
 *
821
 * Sinks must always be at the end of the SurfaceFilter chain.
822
 *
823
 * XXX(seth): We'll remove all support for paletted surfaces in bug 1247520,
824
 * which means we can remove PalettedSurfaceSink entirely.
825
 */
826
class PalettedSurfaceSink final : public AbstractSurfaceSink
827
{
828
public:
829
0
  bool IsValidPalettedPipe() const override { return true; }
830
831
  nsresult Configure(const PalettedSurfaceConfig& aConfig);
832
833
protected:
834
  uint8_t* GetRowPointer() const override;
835
836
private:
837
  /**
838
   * The surface subrect which contains data. Note that the surface size we
839
   * actually allocate is the size of the frame rect, not the logical size of
840
   * the surface.
841
   */
842
  gfx::IntRect mFrameRect;
843
};
844
845
} // namespace image
846
} // namespace mozilla
847
848
#endif // mozilla_image_SurfacePipe_h