async function applyFilters(e) {
            const tiledImage = e.tiledImage,
                processors = getFiltersProcessors(self, tiledImage);

            if (processors.length === 0) {
                return;
            }

            const contextCopy = await e.getData('context2d');
            if (!contextCopy) return;

            for (let i = 0; i < processors.length; i++) {
                if (e.outdated()) return;
                await processors[i](contextCopy);
            }
            if (e.outdated()) return;
            await e.setData(contextCopy, 'context2d');
        }
@class FilterPlugin
@param {Object} options The options
@param {OpenSeadragon.Viewer} options.viewer The viewer to attach this
plugin to.
@param {Object[]} options.filters The filters to apply to the images.
@param {OpenSeadragon.TiledImage[]} options.filters[x].items The tiled images
on which to apply the filter.
@param {function|function[]} options.filters[x].processors The processing
function(s) to apply to the images. The parameter of this function is
the context to modify.