Name Description Size Coverage CI issues
CacheInvalidator.cpp 1172 84 %
CacheInvalidator.h 4374 95 %
CanvasGradient.cpp 507 100 %
CanvasGradient.h 1722 90 %
CanvasImageCache.cpp Used for images specific to this one canvas. Required due to CORS security. 12318 92 %
CanvasImageCache.h Notify that image element aImage was drawn to aContext canvas using the first frame of aRequest's image. The data for the surface is in aSurface, and the image size is in aSize. aIntrinsicSize is the size the surface is intended to be rendered at. 2370 -
CanvasPath.h CanvasPath_h 3657 100 %
CanvasPattern.cpp 851 100 %
CanvasPattern.h 1769 100 %
CanvasRenderingContext2D.cpp Memory reporter stuff 261233 83 %
CanvasRenderingContext2D.h CanvasRenderingContext2D 48319 96 %
CanvasRenderingContextHelper.cpp webgl2: 10958 92 %
CanvasRenderingContextHelper.h Povides common RenderingContext functionality used by both OffscreenCanvas and HTMLCanvasElement. 4010 100 %
CanvasUtils.cpp 28340 82 %
CanvasUtils.h Float validation stuff 6594 100 %
ClientWebGLContext.cpp 234192 87 %
ClientWebGLContext.h 87996 94 %
ClientWebGLExtensions.cpp 10390 89 %
ClientWebGLExtensions.h 16900 66 %
crashtests -
DmdStdContainers.h 2324 100 %
DrawTargetWebgl.cpp 269914 83 %
DrawTargetWebgl.h 37227 92 %
DrawTargetWebglInternal.h 16838 92 %
FilterNodeWebgl.cpp 38039 78 %
FilterNodeWebgl.h FilterNodeWebgl wraps a FilterNodeSoftware for most operations that are not yet accelerated. To provide acceleration, this must be subclassed to override an optimized implementation for particular operations. 13355 88 %
GeneratePlaceholderCanvasData.h This function tries to generate random data for placeholder canvas by sampling RANDOM_BYTES_TO_SAMPLE bytes and then returning it. If it fails, returns nullptr. @return uint8_t* output buffer 3122 88 %
gtest 94 %
HostWebGLContext.cpp static 5550 70 %
HostWebGLContext.h Host endpoint of a WebGLContext. HostWebGLContext owns a WebGLContext that it uses to execute commands sent from its ClientWebGLContext. A HostWebGLContext continuously issues a Task to the Compositor thread that causes it to drain its queue of commands. It also maintains a map of WebGL objects (e.g. ObjectIdMap<WebGLShader>) that it uses associate them with their cross-process IDs. This class is not an implementation of the nsICanvasRenderingContextInternal DOM class. That is the ClientWebGLContext. 27290 94 %
ImageBitmap.cpp This class observes shutdown notifications and sends that notification to the worker thread if the image bitmap is on a worker thread. 81171 77 %
ImageBitmap.h ImageBitmap is an opaque handler to several kinds of image-like objects from HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, ImageData to CanvasRenderingContext2D and Image Blob. An ImageBitmap could be painted to a canvas element. Generally, an ImageBitmap only keeps a reference to its source object's buffer, but if the source object is an ImageData, an Blob or a HTMLCanvasElement with WebGL rendering context, the ImageBitmap copy the source object's buffer. 10193 86 %
ImageBitmapRenderingContext.cpp 9650 85 %
ImageBitmapRenderingContext.h The purpose of ImageBitmapRenderingContext is to provide a faster and efficient way to display ImageBitmap. Simply call TransferFromImageBitmap() then we'll transfer the surface of ImageBitmap to this context and then to use it to display. See more details in spec: https://wiki.whatwg.org/wiki/OffscreenCanvas 4065 45 %
ImageBitmapSource.h 760 -
ImageData.cpp 6941 94 %
ImageData.h 2900 94 %
ImageUtils.cpp 6998 73 %
ImageUtils.h ImageUtils is a wrapper around layers::Image. It provides three unified methods to all sub-classes of layers::Image, which are: (1) GetFormat() converts the image's format into ImageBitmapFormat enum. (2) GetBufferLength() returns the number of bytes that are used to store the image's underlying raw data. In theory, the functionalities of this class could be merged into the interface of layers::Image. However, this is designed as a isolated wrapper because we don't want to pollute the layers::Image's interface with methods that are only meaningful to the ImageBitmap. 1747 -
metrics.yaml 4162 -
moz.build 7003 -
MurmurHash3.cpp 8458 53 %
MurmurHash3.h 840 -
nsICanvasRenderingContextInternal.cpp 9185 85 %
nsICanvasRenderingContextInternal.h 8692 65 %
OffscreenCanvas.cpp static 23892 74 %
OffscreenCanvas.h 6917 83 %
OffscreenCanvasDisplayHelper.cpp 22885 81 %
OffscreenCanvasDisplayHelper.h 4767 100 %
OffscreenCanvasRenderingContext2D.cpp 4027 87 %
OffscreenCanvasRenderingContext2D.h 1633 100 %
PWebGL.ipdl Represents the connection between a WebGLChild actor that issues WebGL command from the content process, and a WebGLParent in the compositor process that runs the commands. 5282 -
QueueParamTraits.h QueueParamTraits provide the user with a way to implement PCQ argument (de)serialization. It uses a PcqView, which permits the system to abandon all changes to the underlying PCQ if any operation fails. The transactional nature of PCQ operations make the ideal behavior a bit complex. Since the PCQ has a fixed amount of memory available to it, TryInsert operations operations are expected to sometimes fail and be re-issued later. We want these failures to be inexpensive. The same goes for TryRemove, which fails when there isn't enough data in the queue yet for them to complete. Their expected interface is: template<> struct QueueParamTraits<typename RemoveCVR<Arg>::Type> { // Write data from aArg into the PCQ. static QueueStatus Write(ProducerView& aProducerView, const Arg& aArg) {...}; // Read data from the PCQ into aArg, or just skip the data if aArg is null. static QueueStatus Read(ConsumerView& aConsumerView, Arg* aArg) {...} }; 23529 91 %
SanitizeRenderer.cpp Narrow renderer string space down to representative replacements. E.g. "GeForce RTX 3090" => "GeForce GTX 980" For example strings: https://hackmd.io/Ductv3pQTMej74gbveD4yw 12355 71 %
SourceSurfaceWebgl.cpp 7925 81 %
SourceSurfaceWebgl.h MOZILLA_GFX_SOURCESURFACEWEBGL_H_ 2760 100 %
<1%test -
TextMetrics.h 3144 82 %
TexUnpackBlob.cpp 46059 79 %
TexUnpackBlob.h 4993 100 %
WebGL2Context.cpp virtual 5321 74 %
WebGL2Context.h Implemented in WebGLContext void VertexAttribDivisor(GLuint index, GLuint divisor); void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount); void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, WebGLintptr offset, GLsizei instanceCount); 6257 100 %
WebGL2ContextBuffers.cpp 6640 86 %
WebGL2ContextFramebuffers.cpp 7613 87 %
WebGL2ContextMRTs.cpp 4372 70 %
WebGL2ContextQueries.cpp We fake ANY_SAMPLES_PASSED and ANY_SAMPLES_PASSED_CONSERVATIVE with SAMPLES_PASSED on desktop. OpenGL ES 3.0 spec 4.1.6: If the target of the query is ANY_SAMPLES_PASSED_CONSERVATIVE, an implementation may choose to use a less precise version of the test which can additionally set the samples-boolean state to TRUE in some other implementation-dependent cases. 3223 71 %
WebGL2ContextRenderbuffers.cpp 2101 68 %
WebGL2ContextSamplers.cpp 2694 98 %
WebGL2ContextState.cpp GLboolean 3686 97 %
WebGL2ContextSync.cpp 3062 73 %
WebGL2ContextTransformFeedback.cpp 2619 96 %
WebGL2ContextUniforms.cpp 3268 84 %
WebGLBuffer.cpp 13211 85 %
WebGLBuffer.h 2408 100 %
WebGLChild.cpp 6323 80 %
WebGLChild.h 1918 89 %
WebGLCommandQueue.h 8102 93 %
WebGLContext.cpp 95414 82 %
WebGLContext.h 49618 91 %
WebGLContextBuffers.cpp 8044 94 %
WebGLContextDraw.cpp 43104 72 %
WebGLContextExtensions.cpp 23869 94 %
WebGLContextFramebufferOperations.cpp 6275 98 %
WebGLContextGL.cpp 48199 87 %
WebGLContextLossHandler.cpp 1254 95 %
WebGLContextLossHandler.h 823 -
WebGLContextState.cpp 13330 86 %
WebGLContextTextures.cpp virtual 7283 98 %
WebGLContextUtils.cpp 15922 39 %
WebGLContextValidate.cpp 21626 73 %
WebGLContextVertexArray.cpp 993 100 %
WebGLContextVertices.cpp 8800 94 %
WebGLExtensions.cpp 35788 90 %
WebGLExtensions.h 9163 89 %
WebGLFormats.cpp 51214 98 %
WebGLFormats.h 10612 94 %
WebGLFramebuffer.cpp 55180 85 %
WebGLFramebuffer.h 8289 98 %
WebGLInternalFormatsTable.h 4525 -
WebGLIpdl.h 10072 85 %
WebGLMemoryTracker.cpp 5298 8 %
WebGLMemoryTracker.h 599 100 %
WebGLMethodDispatcher.h 7041 96 %
WebGLObjectModel.h 1748 50 %
WebGLParent.cpp 15197 74 %
WebGLParent.h 5535 100 %
WebGLProgram.cpp 38747 92 %
WebGLProgram.h 5375 74 %
WebGLQuery.cpp 3697 68 %
WebGLQuery.h 1175 100 %
WebGLQueueParamTraits.h 7891 98 %
WebGLRenderbuffer.cpp 8317 74 %
WebGLRenderbuffer.h 1695 67 %
WebGLSampler.cpp 4068 92 %
WebGLSampler.h 883 100 %
WebGLShader.cpp 5585 65 %
WebGLShader.h 1828 100 %
WebGLShaderValidator.cpp 16905 87 %
WebGLShaderValidator.h 1999 100 %
WebGLStrongTypes.h Usage: =========== To create a new type from a set of GLenums do the following: STRONG_GLENUM_BEGIN(TypeName) STRONG_GLENUM_VALUE(ENUM1), STRONG_GLENUM_VALUE(ENUM2), ... STRONG_GLENUM_END() where TypeName is the name you want to give the type. Now simply use TypeName instead of GLenum. The enum values must be given without GL_ prefix. ~~~~~~~~~~~~~~~~ Important Notes: ~~~~~~~~~~~~~~~~ Boolean operators (==, !=) are provided in an effort to prevent some mistakes when using constants. For example we want to make sure that GL_ENUM_X is a valid value for the type in code like: if (myNewType == STRONG_GLENUM_VALUE(SOME_ENUM)) ... The operators will assert that STRONG_GLENUM_VALUE(SOME_ENUM) is a value that myNewType can have. ---- A get() method is provided to allow access to the underlying GLenum. This method should ideally only be called when passing parameters to the gl->fXXXX functions, and be used very minimally everywhere else. Definitely XXX - DO NOT DO - XXX: if (myNewType.get() == STRONG_GLENUM_VALUE(SOME_ENUM)) ... As that undermines the debug checks that were implemented in the ==, and != operators. If you see code like this it should be treated with suspicion. Background: =========== This macro is the first step in an effort to make the WebGL code safer. Many of the different functions take GLenum as their parameter which leads to bugs because of subtle differences in the enums purpose. For example there are two types of 'texture targets'. One is the texture binding locations: GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP Yet, this is not the same as texture image targets: GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y ... This subtle distinction has already led to many bugs in the texture code because of invalid assumptions about what type goes where. The macro below is an attempt at fixing this by providing a small wrapper around GLenum that validates its values. Comparison between STRONG_GLENUM's vs. enum classes =================================================== The present STRONG_GLENUM's differ from ordinary enum classes in that they assert at runtime that their values are legal, and in that they allow implicit conversion from integers to STRONG_GLENUM's but disallow implicit conversion from STRONG_GLENUM's to integers (enum classes are the opposite). When to use GLenum's vs. STRONG_GLENUM's vs. enum classes ========================================================= Rule of thumb: * For unchecked GLenum constants, such as WebGL method parameters that haven't been validated yet, use GLenum. * For already-validated GLenum constants, use STRONG_GLENUM's. * For custom constants that aren't GL enum values, use enum classes. 16103 100 %
WebGLSync.cpp 2018 100 %
WebGLSync.h 1832 100 %
WebGLTexelConversions.cpp @class WebGLImageConverter This class is just a helper to implement WebGLContext::ConvertImage below. Design comments: WebGLContext::ConvertImage has to handle hundreds of format conversion paths. It is important to minimize executable code size here. Instead of passing around a large number of function parameters hundreds of times, we create a WebGLImageConverter object once, storing these parameters, and then we call the run() method on it. 21621 80 %
WebGLTexelConversions.h Copyright (C) 2010 Apple Inc. All rights reserved. Copyright (C) 2010 Google Inc. All rights reserved. Copyright (C) 2010 Mozilla Corporation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 51541 66 %
WebGLTexture.cpp static 36317 96 %
WebGLTexture.h 11264 100 %
WebGLTextureUpload.cpp 64554 87 %
WebGLTextureUpload.h 1793 -
WebGLTransformFeedback.cpp 5395 87 %
WebGLTransformFeedback.h 1880 100 %
WebGLTypes.h Implementing WebGL (or OpenGL ES 2.0) on top of desktop OpenGL requires emulating the vertex attrib 0 array when it's not enabled. Indeed, OpenGL ES 2.0 allows drawing without vertex attrib 0 array enabled, but desktop OpenGL does not allow that. 35907 92 %
WebGLValidateStrings.cpp GLSL ES 3.00 p17: - Comments are delimited by / * and * /, or by // and a newline. - '//' style comments include the initial '//' marker and continue up to, but not including, the terminating newline. - '/ * ... * /' comments include both the start and end marker. - The begin comment delimiters (/ * or //) are not recognized as comment delimiters inside of a comment, hence comments cannot be nested. - Comments are treated syntactically as a single space. 4741 49 %
WebGLValidateStrings.h Copyright (C) 2011 Apple Inc. All rights reserved. Copyright (C) 2011 Mozilla Corporation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1884 -
WebGLVertexArray.cpp 2637 92 %
WebGLVertexArray.h 3241 93 %
WebGLVertexArrayFake.cpp 2107 0 %
WebGLVertexArrayFake.h 610 0 %
WebGLVertexArrayGL.cpp 822 100 %
WebGLVertexArrayGL.h 613 100 %
XRWebGLLayer.cpp static 9048 0 %
XRWebGLLayer.h 2772 0 %