code: function ImageUrlSource(sourceFromTile, opts) {
  
    opts = opts ? opts : {};
  
    this._loadPool = new WorkPool({
      concurrency: opts.concurrency || defaultConcurrency
    });
  
    this._retryDelay = opts.retryDelay || defaultRetryDelay;
    this._retryMap = {};
  
    this._sourceFromTile = sourceFromTile;
  }
docs: @class ImageUrlSource
  @implements Source
  @classdesc
  
  A {@link Source} that loads {@link Asset assets} from images given a URL and
  a crop rectangle.
  
  @param {Function} sourceFromTile Function that receives a tile and returns
  a `{ url, rect }` object, where `url` is an image URL and `rect`, when
  present, is an `{ x, y, width, height }` object in normalized coordinates
  denoting the portion of the image to use.
  @param {Object} opts
  @param {number} [opts.concurrency=4] Maximum number of tiles to request at
  the same time. The limit is per {@link ImageSourceUrl} instance.
  @param {number} [opts.retryDelay=10000] Time in milliseconds to wait before
  retrying a failed request.